Koskamo

Zinc MCP

A hosted MCP server enabling AI assistants to search for products across major retailers like Amazon and Walmart, review order totals, and complete purchases using a card payment. It supports order tracking and history retrieval, requiring no API key for basic usage.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Zinc MCP logo, by Zinc SolutionsVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Zinc Solutions
You need:A chat client that renders MCP Apps cards: Claude (web, desktop, mobile) or ChatGPT
MCP endpoint (Streamable HTTP)
https://mcp.zinc.com/mcp
Vendor documentation

What you can do with it

  • Search for products across multiple retailers
  • Review estimated order totals and card holds
  • Place orders via secure payment page
  • Track order status and history

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
zinc 1.1.0
MCP protocol
2025-06-18
Tools
9 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use search-products when the user wants to buy something and has not given a product URL. Then STOP: the results card is where the user chooses, so name the standouts briefly and wait. Never call prepare-order in the same turn as a search; 'get me some coffee' is a search, not a pick, even if you know their address. Go straight to prepare-order only when the user names one specific product or, after seeing results, picks one or tells you to choose. Buying takes two steps and you only ever do the first: prepare-order renders a review card with the item and the estimated total, and only the user can confirm it. Never call place-order yourself; it needs a token you are not given. Nothing is spent until the retailer order is placed. Never ask for a shipping address: the shopper enters it on the payment page with their card. list-addresses has nothing until the user has signed in via list-orders; do not call it to start a purchase. prepare-order prices the order itself from each product's url, title, image and price_cents from search; tax is estimated at a flat 10% and shipping is filled in. Leave max_price out unless the user named a budget. Not sold here: weapons, tobacco and nicotine, regulated drugs, prescription medication, adult products, gambling, covert surveillance, counterfeits. Both tools refuse those; say so plainly and do not rephrase around it. No sign-in is needed to search or buy. Search is free. The shopper pays by card: Pay & place opens the payment page in a new tab while the card polls get-payment-status until the order exists. Only the actual total plus a $1 fee is captured; the rest of the hold is released. An order placed in this conversation can be shown any time with get-order or get-order-tracking by the id that place-order and get-payment-status return. Order history needs the user's Zinc account. When they ask for it, just call list-orders: the host asks them to sign in right there, then the call goes through. Never send them elsewhere to sign in, and never ask them to sign in to buy.

Tools

9 advertised

list-orders — List Zinc orders
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

List or search the Zinc orders on the configured account, newest first. Renders an interactive order list. Use `search` for a partial order ID or tracking number, `status` to filter by order status, and `has_tracking` to show only shipped orders.

list-orders input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1,
      "description": "How many orders to return (1-50, default 10)"
    },
    "search": {
      "type": "string",
      "description": "Partial Zinc order ID or tracking number to match"
    },
    "status": {
      "enum": [
        "pending",
        "in_progress",
        "order_placed",
        "order_failed",
        "cancelled",
        "cancelled_by_retailer"
      ],
      "type": "string",
      "description": "Filter to one Zinc order status"
    },
    "has_tracking": {
      "type": "boolean",
      "description": "True to return only orders that already have tracking numbers"
    }
  }
}
list-orders output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "orders",
    "total",
    "returned",
    "environment"
  ],
  "properties": {
    "total": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Total matching orders on the account"
    },
    "orders": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "status",
          "retailer",
          "item_count",
          "item_urls",
          "retailer_logo",
          "items",
          "total_cents",
          "total_display",
          "max_price_cents",
          "merchant_order_ids",
          "shipment_summary",
          "tracking",
          "error",
          "error_type",
          "is_trial",
          "created_at",
          "updated_at"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Zinc order UUID"
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Failure reason when status is order_failed"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "url",
                "title",
                "image"
              ],
              "properties": {
                "url": {
                  "type": "string"
                },
                "image": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "title": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false
            },
            "description": "One per line item. title/image are what the shopper saw in the review card when the order was placed through this connector; null when the order came from elsewhere."
          },
          "status": {
            "type": "string",
            "description": "Zinc order status"
          },
          "is_trial": {
            "type": "boolean",
            "description": "max_price of 0 marks a trial run: the retailer validates the order and deliberately does not place it, charging nothing. That outcome is recorded as order_failed with error_type max_price_exceeded, and nothing went wrong — do not report it as a failure. A trial carrying any other error_type did fail, before the price ceiling was ever reached, and the error explains how. This flag is the one to read: a null max_price_cents is an unknown ceiling, never a trial."
          },
          "retailer": {
            "type": "string",
            "description": "Merchant inferred from the item URLs — Zinc stores no retailer field"
          },
          "tracking": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "carrier",
                "tracking_number",
                "status",
                "estimated_delivery_date",
                "tracking_url"
              ],
              "properties": {
                "status": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "pending, in_transit, or delivered; null before first scan"
                },
                "carrier": {
                  "type": "string",
                  "description": "Carrier code, e.g. ups, usps, fedex"
                },
                "tracking_url": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "tracking_number": {
                  "type": "string"
                },
                "estimated_delivery_date": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "Carrier ETA as a destination-local YYYY-MM-DD date"
                }
              },
              "additionalProperties": false
            }
          },
          "item_urls": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Retailer URL per line item. Zinc stores no product name, so this is the only identification of what was ordered — a title derived from the URL path was a guess and often wrong."
          },
          "created_at": {
            "type": "string"
          },
          "error_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Worker's classification of the failure, e.g. max_price_exceeded"
          },
          "item_count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "description": "Total units across all line items"
          },
          "updated_at": {
            "type": "string"
          },
          "total_cents": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "What the retailer charged, in cents. Null when the order was never placed AND null on every list-orders row — the Zinc list endpoint omits it. Call get-order for the real total."
          },
          "retailer_logo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The retailer's mark, for rows with no product picture."
          },
          "total_display": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Preformatted total, e.g. $41.98"
          },
          "max_price_cents": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 9007199254740991,
                "minimum": -9007199254740991
              },
              {
                "type": "null"
              }
            ],
            "description": "Customer's price ceiling, in cents. Null means withheld, not zero: the public tracking view a guest reads does not carry it. A zero ceiling means something specific (see is_trial) that null does not."
          },
          "shipment_summary": {
            "type": "string",
            "description": "One-line shipment state rolled up from the tracking rows"
          },
          "merchant_order_ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Retailer's own order numbers"
          }
        },
        "additionalProperties": false
      }
    },
    "returned": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "environment": {
      "enum": [
        "sandbox",
        "live"
      ],
      "type": "string",
      "description": "Which Zinc dataset the configured API key reads"
    }
  },
  "additionalProperties": false
}
list-orders annotations
{
  "title": "List Zinc orders",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get-order — Get a Zinc order
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch one Zinc order by its UUID and render a detail card: line items, retailer price breakdown, shipping destination, and shipment timeline.

get-order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The Zinc order UUID"
    }
  }
}
get-order output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order",
    "items",
    "price_breakdown",
    "prices_withheld",
    "ship_to",
    "environment"
  ],
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "title",
          "image",
          "retailer_logo",
          "quantity",
          "status",
          "variant",
          "cancellation_reason"
        ],
        "properties": {
          "url": {
            "type": "string"
          },
          "image": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "title": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "What the shopper saw when buying through this connector; null otherwise."
          },
          "status": {
            "type": "string"
          },
          "variant": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "quantity": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "retailer_logo": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "cancellation_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "order": {
      "type": "object",
      "required": [
        "id",
        "status",
        "retailer",
        "item_count",
        "item_urls",
        "retailer_logo",
        "items",
        "total_cents",
        "total_display",
        "max_price_cents",
        "merchant_order_ids",
        "shipment_summary",
        "tracking",
        "error",
        "error_type",
        "is_trial",
        "created_at",
        "updated_at"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Zinc order UUID"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Failure reason when status is order_failed"
        },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url",
              "title",
              "image"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "image": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "title": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false
          },
          "description": "One per line item. title/image are what the shopper saw in the review card when the order was placed through this connector; null when the order came from elsewhere."
        },
        "status": {
          "type": "string",
          "description": "Zinc order status"
        },
        "is_trial": {
          "type": "boolean",
          "description": "max_price of 0 marks a trial run: the retailer validates the order and deliberately does not place it, charging nothing. That outcome is recorded as order_failed with error_type max_price_exceeded, and nothing went wrong — do not report it as a failure. A trial carrying any other error_type did fail, before the price ceiling was ever reached, and the error explains how. This flag is the one to read: a null max_price_cents is an unknown ceiling, never a trial."
        },
        "retailer": {
          "type": "string",
          "description": "Merchant inferred from the item URLs — Zinc stores no retailer field"
        },
        "tracking": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "carrier",
              "tracking_number",
              "status",
              "estimated_delivery_date",
              "tracking_url"
            ],
            "properties": {
              "status": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "pending, in_transit, or delivered; null before first scan"
              },
              "carrier": {
                "type": "string",
                "description": "Carrier code, e.g. ups, usps, fedex"
              },
              "tracking_url": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "tracking_number": {
                "type": "string"
              },
              "estimated_delivery_date": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Carrier ETA as a destination-local YYYY-MM-DD date"
              }
            },
            "additionalProperties": false
          }
        },
        "item_urls": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Retailer URL per line item. Zinc stores no product name, so this is the only identification of what was ordered — a title derived from the URL path was a guess and often wrong."
        },
        "created_at": {
          "type": "string"
        },
        "error_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Worker's classification of the failure, e.g. max_price_exceeded"
        },
        "item_count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "Total units across all line items"
        },
        "updated_at": {
          "type": "string"
        },
        "total_cents": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "What the retailer charged, in cents. Null when the order was never placed AND null on every list-orders row — the Zinc list endpoint omits it. Call get-order for the real total."
        },
        "retailer_logo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The retailer's mark, for rows with no product picture."
        },
        "total_display": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Preformatted total, e.g. $41.98"
        },
        "max_price_cents": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            {
              "type": "null"
            }
          ],
          "description": "Customer's price ceiling, in cents. Null means withheld, not zero: the public tracking view a guest reads does not carry it. A zero ceiling means something specific (see is_trial) that null does not."
        },
        "shipment_summary": {
          "type": "string",
          "description": "One-line shipment state rolled up from the tracking rows"
        },
        "merchant_order_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Retailer's own order numbers"
        }
      },
      "additionalProperties": false
    },
    "ship_to": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "name",
            "city",
            "state",
            "postal_code",
            "country"
          ],
          "properties": {
            "city": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "state": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "country": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "postal_code": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "environment": {
      "enum": [
        "sandbox",
        "live"
      ],
      "type": "string"
    },
    "price_breakdown": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "subtotal_cents",
            "tax_cents",
            "shipping_cents",
            "discount_cents",
            "fees_cents",
            "total_cents",
            "currency"
          ],
          "properties": {
            "currency": {
              "type": "string"
            },
            "tax_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "fees_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "total_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "discount_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "shipping_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "subtotal_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Null until the retailer order is placed — unless prices_withheld is true, which means the amounts exist and this read cannot see them. All amounts in cents."
    },
    "prices_withheld": {
      "type": "boolean",
      "description": "True when the order was read without an account, from the public tracking view, which carries no money at all. The order may well have been charged in full: never report it as uncharged. False on a signed-in read, where a null breakdown does mean not charged yet."
    }
  },
  "additionalProperties": false
}
get-order annotations
{
  "title": "Get a Zinc order",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get-order-tracking — Get shipment tracking for a Zinc order
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Return the carrier tracking timeline (scan checkpoints) for one Zinc order. Use this when the question is only about where a package is, not about pricing or line items.

get-order-tracking input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The Zinc order UUID"
    }
  }
}
get-order-tracking output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id",
    "order_status",
    "shipment_summary",
    "shipments"
  ],
  "properties": {
    "order_id": {
      "type": "string"
    },
    "shipments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "carrier",
          "tracking_number",
          "status",
          "estimated_delivery_date",
          "tracking_url",
          "checkpoints"
        ],
        "properties": {
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "carrier": {
            "type": "string"
          },
          "checkpoints": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "checkpoint_time",
                "status",
                "message",
                "location"
              ],
              "properties": {
                "status": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                },
                "location": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "checkpoint_time": {
                  "type": "string"
                }
              },
              "additionalProperties": false
            },
            "description": "Newest scan first"
          },
          "tracking_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "tracking_number": {
            "type": "string"
          },
          "estimated_delivery_date": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "order_status": {
      "type": "string"
    },
    "shipment_summary": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get-order-tracking annotations
{
  "title": "Get shipment tracking for a Zinc order",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
list-addresses — List addresses the user has shipped to before
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Destinations from the signed-in user's recent orders, each with an id you can pass to prepare-order as address_id. Only useful once the user has signed in (list-orders has worked, or they asked for their history); for anyone else it has nothing, and the shopper enters the address on the payment page instead. It never prompts for sign-in. Labels are deliberately partial — a name, a city, a truncated postal code. You are not shown the street, and you do not need it: the full address is resolved server-side and shown to the user in the review card before anything is placed. Never reconstruct or guess an address from a label; if none of these is the right destination, ask the user.

list-addresses input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list-addresses output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "addresses",
    "orders_inspected"
  ],
  "properties": {
    "addresses": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "label",
          "last_used",
          "order_count"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Pass as prepare-order's address_id"
          },
          "label": {
            "type": "string",
            "description": "Partial by design — not the full address"
          },
          "last_used": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "order_count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          }
        },
        "additionalProperties": false
      }
    },
    "orders_inspected": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  },
  "additionalProperties": false
}
list-addresses annotations
{
  "title": "List addresses the user has shipped to before",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
prepare-order — Prepare an order for the user to review
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Show the user an order to review: items, what it will cost and the hold on the card. This does NOT place the order or spend anything — the user places it by clicking Pay & place in the card that appears, and enters their shipping address on the payment page that opens. Use this whenever the user wants to buy something; never ask them for an address first. Pass each product's title, image and price_cents from search so the card shows the item and quotes the total; leave max_price out unless the user named a budget. address_id, from list-addresses, is only for a signed-in user shipping somewhere they have shipped before. Not sold through this connector: weapons, tobacco and nicotine, regulated drugs and paraphernalia, prescription medication, adult products, gambling, covert surveillance and counterfeit goods. An order for one of those is refused.

prepare-order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "products"
  ],
  "properties": {
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Product URL on the retailer's site"
          },
          "image": {
            "type": "string",
            "description": "Product image URL, copied verbatim from the search result. Only an address search returned can be shown — a constructed or substituted one is dropped rather than rendered."
          },
          "title": {
            "type": "string",
            "description": "Product title from search, for the card."
          },
          "quantity": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "minimum": 1
          },
          "price_cents": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": 0,
            "description": "Listed unit price from search, in cents. Drives the quote and the cap."
          }
        }
      },
      "minItems": 1
    },
    "max_price": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 1,
      "description": "Hard spending cap for this order, in cents, including tax and shipping. Pass it only when the user named a budget; otherwise leave it out and the cap is derived from the listed price, an estimated tax and shipping, with a margin. The order fails rather than exceeding it."
    },
    "address_id": {
      "type": "string",
      "description": "An id from list-addresses, for a signed-in user shipping somewhere they have shipped before. Resolved against their own order history; the full address appears in the review card, not here. Leave it out otherwise: the shopper enters the address on the payment page. Never ask for an address in the conversation."
    }
  }
}
prepare-order output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "products",
    "max_price_cents",
    "max_price_display",
    "quote",
    "ship_to_summary",
    "environment",
    "can_place",
    "guest"
  ],
  "properties": {
    "guest": {
      "type": "boolean",
      "description": "True when nobody is signed in: the order belongs to a guest account made from the checkout email rather than to a Zinc account."
    },
    "quote": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "listed_price_cents",
            "estimated_tax_cents",
            "shipping_cents",
            "order_fee_cents",
            "estimated_total_cents",
            "hold_cents",
            "tax_rate",
            "tax_basis",
            "shipping_basis",
            "cap_basis"
          ],
          "properties": {
            "tax_rate": {
              "type": "number",
              "description": "The rate the tax ESTIMATE used, as a decimal. Not a lookup: the destination is not known until checkout, so a flat 10% is assumed and the retailer charges the real tax. It only sizes the hold; only the actual total is ever captured."
            },
            "cap_basis": {
              "enum": [
                "derived",
                "budget"
              ],
              "type": "string",
              "description": "derived: the cap is the estimate plus a margin; budget: it is the max_price the user named."
            },
            "tax_basis": {
              "enum": [
                "assistant",
                "assumed",
                "floored"
              ],
              "type": "string",
              "description": "Always 'assumed' here: a flat 10% estimate, not a rate lookup."
            },
            "hold_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "description": "Authorized on the card: max_price + fee."
            },
            "shipping_basis": {
              "enum": [
                "member",
                "free_over_threshold",
                "standard"
              ],
              "type": "string",
              "description": "member: ships free at any size on this connector; free_over_threshold: the basket clears the retailer's free-shipping line; standard: the retailer's ground charge applies."
            },
            "shipping_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            "order_fee_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            "listed_price_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            "estimated_tax_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991
            },
            "estimated_total_cents": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "description": "What the card will most likely be charged: goods + tax + shipping + fee."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ]
    },
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "quantity"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Product URL on the retailer's site"
          },
          "image": {
            "type": "string",
            "description": "Product image URL, copied verbatim from the search result. Only an address search returned can be shown — a constructed or substituted one is dropped rather than rendered."
          },
          "title": {
            "type": "string",
            "description": "Product title from search, for the card."
          },
          "quantity": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "minimum": 1
          },
          "price_cents": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": 0,
            "description": "Listed unit price from search, in cents. Drives the quote and the cap."
          },
          "retailer_logo": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "can_place": {
      "type": "boolean",
      "description": "False when this connection lacks the orders:write scope."
    },
    "environment": {
      "enum": [
        "sandbox",
        "live"
      ],
      "type": "string"
    },
    "max_price_cents": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    },
    "ship_to_summary": {
      "type": "string",
      "description": "Empty when the shopper will enter the address on the payment page."
    },
    "shipping_address": {
      "type": "object",
      "required": [
        "first_name",
        "last_name",
        "address_line1",
        "city",
        "postal_code",
        "phone_number",
        "country"
      ],
      "properties": {
        "city": {
          "type": "string"
        },
        "state": {
          "type": "string",
          "description": "Two-letter state code where applicable"
        },
        "country": {
          "type": "string",
          "default": "US"
        },
        "last_name": {
          "type": "string"
        },
        "first_name": {
          "type": "string"
        },
        "postal_code": {
          "type": "string"
        },
        "phone_number": {
          "type": "string"
        },
        "address_line1": {
          "type": "string"
        },
        "address_line2": {
          "type": "string"
        }
      },
      "description": "Only when resolved from a saved address; otherwise entered at checkout.",
      "additionalProperties": false
    },
    "max_price_display": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
prepare-order annotations
{
  "title": "Prepare an order for the user to review",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
place-order — Place a reviewed order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Internal: places an order the user already confirmed in the review card, paying by card. Requires a confirmation issued by prepare-order, which is not available to you — call prepare-order and let the user confirm instead.

place-order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "confirmation",
    "order"
  ],
  "properties": {
    "order": {
      "type": "object",
      "required": [
        "products",
        "max_price"
      ],
      "properties": {
        "products": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "url"
            ],
            "properties": {
              "url": {
                "type": "string",
                "description": "Product URL on the retailer's site"
              },
              "image": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "quantity": {
                "type": "integer",
                "default": 1,
                "maximum": 9007199254740991,
                "minimum": 1
              }
            }
          },
          "minItems": 1
        },
        "max_price": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 1
        },
        "shipping_address": {
          "type": "object",
          "required": [
            "first_name",
            "last_name",
            "address_line1",
            "city",
            "postal_code",
            "phone_number"
          ],
          "properties": {
            "city": {
              "type": "string"
            },
            "state": {
              "type": "string",
              "description": "Two-letter state code where applicable"
            },
            "country": {
              "type": "string",
              "default": "US"
            },
            "last_name": {
              "type": "string"
            },
            "first_name": {
              "type": "string"
            },
            "postal_code": {
              "type": "string"
            },
            "phone_number": {
              "type": "string"
            },
            "address_line1": {
              "type": "string"
            },
            "address_line2": {
              "type": "string"
            }
          }
        }
      }
    },
    "confirmation": {
      "type": "string",
      "description": "Issued by prepare-order to the view."
    }
  }
}
place-order output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "status",
    "order_id",
    "max_price_cents",
    "payment"
  ],
  "properties": {
    "status": {
      "type": "string",
      "description": "An order status once placed, or requires_action while the buyer pays."
    },
    "payment": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "payment_id",
            "status",
            "order_id",
            "pay_url",
            "expires_at",
            "hold_cents",
            "failure"
          ],
          "properties": {
            "status": {
              "type": "string"
            },
            "failure": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Why the payment ended `failed`, for the shopper — e.g. the address they entered at checkout could not be used. The hold has been released."
            },
            "pay_url": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "order_id": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "expires_at": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "hold_cents": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 9007199254740991,
                  "minimum": -9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            },
            "payment_id": {
              "type": "string"
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Set when the buyer has to pay on pay_url before the order exists."
    },
    "order_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "max_price_cents": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991
    }
  },
  "additionalProperties": false
}
place-order annotations
{
  "title": "Place a reviewed order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
get-payment-status — Check a pending card payment
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Where a card payment stands after place-order sent the buyer to a payment page: requires_action until they pay, then placed with the order_id. The review card polls this itself; call it only if the user asks whether their payment went through.

get-payment-status input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "payment_id"
  ],
  "properties": {
    "payment_id": {
      "type": "string",
      "description": "The payment id place-order returned."
    }
  }
}
get-payment-status output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "payment_id",
    "status",
    "order_id",
    "pay_url",
    "expires_at",
    "hold_cents",
    "failure"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "failure": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Why the payment ended `failed`, for the shopper — e.g. the address they entered at checkout could not be used. The hold has been released."
    },
    "pay_url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "order_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "expires_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "hold_cents": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "payment_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get-payment-status annotations
{
  "title": "Check a pending card payment",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search-products — Search for products across retailers
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find products across Amazon, Walmart, Target, Best Buy and more. Each result carries an orderable URL that can be passed straight to prepare-order, along with its title, image and price_cents — pass those too, so the review card can show the item and quote the total. Use this when the user wants to buy something but has not given a product URL. Then stop and let the user choose from the card — do not go on to prepare-order in the same turn unless they already named the exact item or asked you to pick. Search once with the user's best query rather than issuing speculative variations, and do not retry a failed search without saying why. When the user names the store they want to buy from, pass it in retailers rather than in the query; otherwise leave retailers out and search everywhere. Not sold through this connector: weapons, tobacco and nicotine, regulated drugs and paraphernalia, prescription medication, adult products, gambling, covert surveillance and counterfeit goods. A search for one of those is refused and matching results are dropped; tell the user plainly rather than rephrasing the query to get around it.

search-products input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "What to search for, e.g. 'airpods pro' or 'cotton bath towels'"
    },
    "retailers": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100,
        "minLength": 1
      },
      "maxItems": 18,
      "description": "Only return results from these stores: any of amazon, bestbuy, bhphotovideo, chewy, costco, homedepot, kohls, lowes, macys, newegg, staples, target, walmart, wayfair, etsy, plus up to 3 Shopify stores by domain (e.g. 'yetch.studio'). A Shopify store must be in Zinc's catalog; an unknown value is rejected with the list of accepted ones. Omit to search every retailer. Shopify stores and Etsy are only searched when named here."
    }
  }
}
search-products output schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query",
    "results",
    "result_count",
    "environment"
  ],
  "properties": {
    "query": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "retailer",
          "title"
        ],
        "properties": {
          "url": {
            "type": "string",
            "description": "Orderable retailer URL — pass straight to prepare-order"
          },
          "brand": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "stars": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "retailer": {
            "type": "string"
          },
          "num_reviews": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "price_cents": {
            "type": "integer",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991
          },
          "price_display": {
            "type": "string"
          },
          "retailer_logo": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "At most 20 results, best first. The card shows them all; a narrower query finds more, not a second page."
    },
    "retailers": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The stores the search was limited to; absent when it searched everywhere."
    },
    "environment": {
      "enum": [
        "sandbox",
        "live"
      ],
      "type": "string"
    },
    "result_count": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "How many results are in `results`."
    }
  },
  "additionalProperties": false
}
search-products annotations
{
  "title": "Search for products across retailers",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
send_feedback — Send feedback
Advertised by the server during the last successful anonymous check.
Open-world

Records feedback about this MCP server, including unexpected tool failures, unhelpful responses, or missing capabilities observed by the agent or reported by the user.

send_feedback input schema
{
  "type": "object",
  "required": [
    "content",
    "source"
  ],
  "properties": {
    "source": {
      "enum": [
        "user",
        "model"
      ],
      "type": "string",
      "description": "Who initiated the feedback: \"user\" or \"model\"."
    },
    "content": {
      "type": "string",
      "description": "The feedback content, stripped of any PII."
    }
  }
}
send_feedback output schema
{
  "type": "object",
  "required": [
    "received"
  ],
  "properties": {
    "received": {
      "type": "boolean",
      "description": "True once the feedback is recorded."
    }
  }
}
send_feedback annotations
{
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}

Prompts

0 advertised

No prompt definitions available.

Resources

4 advertised

order-confirm

Advertised by the server during the last successful anonymous check.

Order review card: the item, the estimated total and the card hold, with the Pay & place button only the user can press. The shopper enters the shipping address on the payment page that opens.

order-confirm URI
ui://views/order-confirm.html

MIME type: text/html;profile=mcp-app

order-detail

Advertised by the server during the last successful anonymous check.

One order's detail card: line items, the retailer's price breakdown, the destination and the shipment timeline.

order-detail URI
ui://views/order-detail.html

MIME type: text/html;profile=mcp-app

orders-list

Advertised by the server during the last successful anonymous check.

The user's orders as rows with status, shipment progress and total; hover details, newest first.

orders-list URI
ui://views/orders-list.html

MIME type: text/html;profile=mcp-app

product-search

Advertised by the server during the last successful anonymous check.

Product search results as a card of tiles — image, title, retailer, price — the user picks from. It already shows every result, so do not repeat the list.

product-search URI
ui://views/product-search.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1147 ms
95th percentile latency
1147 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1147 ms · metadata changed · 9 tool(s), 4 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zinc-mcp https://mcp.zinc.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zinc-mcp --url https://mcp.zinc.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zinc-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zinc-mcp": {
      "url": "https://mcp.zinc.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zinc-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.zinc.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zinc-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zinc-mcp": {
      "type": "http",
      "url": "https://mcp.zinc.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zinc-mcp https://mcp.zinc.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "zinc-mcp": {
      "url": "https://mcp.zinc.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "zinc-mcp": {
      "serverUrl": "https://mcp.zinc.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Zinc MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Zinc MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing