← Back to Catalog

Merchant Catalog Acceptance

ID: F362 | Version: 0.1.0

Tool: merchant_catalog_acceptance

Deterministic acceptance report for a supplied product catalog: validates price/currency/availability/URL formatting, GS1 GTIN checksums, and flags duplicate SKUs, duplicate GTINs, and grouped-variant collisions. Checks only the structured rows given in the request - no network calls, no brand or marketplace certification, no ISO 4217 currency list.

Pricing

0.05 per analysis

Requires x402 capable MCP client with wallet for payment settlement.

Input Schema

{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "products"
  ],
  "properties": {
    "products": {
      "type": "array",
      "minItems": 1,
      "maxItems": 500,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "description": "Submit the observed row as-is, including missing or invalid values. Row defects are reported by the job, not rejected by the tool schema.",
        "properties": {
          "sku": {
            "description": "Observed SKU. Acceptance requires a nonblank string of at most 128 characters."
          },
          "title": {
            "description": "Observed title. Acceptance requires a nonblank string of at most 512 characters."
          },
          "price": {
            "description": "Observed price. Acceptance requires a canonical nonnegative decimal string with at most 15 integer and 6 fractional digits; numeric values are reported as defects."
          },
          "currency": {
            "description": "Observed currency. Acceptance requires exactly three uppercase ASCII letters; no ISO registry lookup."
          },
          "availability": {
            "description": "Observed availability. Accepted values: in_stock, out_of_stock, preorder."
          },
          "url": {
            "description": "Observed URL. Acceptance requires an absolute HTTP(S) URL without credentials, whitespace, controls or malformed percent escapes. Never fetched."
          },
          "gtin": {
            "description": "Optional observed GTIN. Acceptance requires a digit string of length 8, 12, 13 or 14 with a valid check digit. Leading zeros are significant."
          },
          "brand": {
            "description": "Optional observed brand. Acceptance requires a nonblank string of at most 256 characters."
          },
          "group_id": {
            "description": "Optional observed variant group. Acceptance requires a nonblank string of at most 128 characters."
          },
          "attributes": {
            "description": "Optional observed attribute map. Acceptance requires at most 50 string entries; keys at most 128 and values at most 256 characters."
          }
        }
      }
    },
    "required_attributes": {
      "type": "array",
      "description": "Optional list of attribute keys that every row must supply in its attributes map.",
      "maxItems": 50,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 128
      }
    }
  }
}

Example Input

{
  "products": [
    {
      "sku": "SKU-001",
      "title": "Trail Running Shoe - Blue - 10",
      "price": "89.99",
      "currency": "USD",
      "availability": "in_stock",
      "url": "https://shop.example.com/p/sku-001",
      "gtin": "4006381333931",
      "brand": "Acme",
      "group_id": "shoe-trail",
      "attributes": {
        "color": "blue",
        "size": "10"
      }
    },
    {
      "sku": "SKU-003",
      "title": "Trail Running Shoe - Red - 10",
      "price": "not-a-price",
      "currency": "us",
      "availability": "in-stock",
      "url": "ftp://shop.example.com/p/sku-003",
      "group_id": "shoe-trail",
      "attributes": {
        "color": "red"
      }
    }
  ],
  "required_attributes": [
    "color",
    "size"
  ]
}

Example Output

{
  "ok": true,
  "summary": {
    "products": 2,
    "accepted": 1,
    "rejected": 1,
    "issue_counts": {
      "invalid_price": 1,
      "invalid_currency": 1,
      "invalid_availability": 1,
      "invalid_url": 1,
      "missing_attribute": 1
    }
  },
  "rows": [
    {
      "index": 0,
      "sku": "SKU-001",
      "accepted": true,
      "issues": []
    },
    {
      "index": 1,
      "sku": "SKU-003",
      "accepted": false,
      "issues": [
        {
          "code": "invalid_price",
          "field": "price"
        },
        {
          "code": "invalid_currency",
          "field": "currency"
        },
        {
          "code": "invalid_availability",
          "field": "availability"
        },
        {
          "code": "invalid_url",
          "field": "url"
        },
        {
          "code": "missing_attribute",
          "field": "size"
        }
      ]
    }
  ],
  "duplicate_skus": [],
  "duplicate_gtins": [],
  "variant_collisions": [],
  "scope": "supplied_catalog_only"
}

Limitations

Connect via MCP

Add to your MCP client configuration:

{
  "mcpServers": {
    "merchant-catalog-acceptance": {
      "type": "http",
      "url": "https://mcp-factory.bowling-anthony.workers.dev/merchant-catalog-acceptance/mcp"
    }
  }
}

Payment

Price: 0.05 USDC per analysis

This tool requires an x402-capable MCP client with wallet support. Tool listing and initialization are free. Actual completed job analysis is paid in USDC on the Base network.

Payment flow:

  1. Client discovers the price, then submits a signed x402 v2 PAYMENT-SIGNATURE authorization with the input
  2. If settlement is pending, retry the identical input and authorization; do not sign another charge.
  3. Results retained for 24 hours for recovery
  4. Maximum output size: 96 KiB