Shop Amazon, Walmart, Target and Best Buy from chat: search, pay by card, track orders.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Fetch one Zinc order by its UUID and render a detail card: line items, retailer price breakdown, shipping destination, and shipment timeline.
The Zinc order UUID
Fetch one Zinc order by its UUID and render a detail card: line items, retailer price breakdown, shipping destination, and shipment timeline.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The Zinc order UUID |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The Zinc order UUID"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The Zinc order UUID |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The Zinc order UUID"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| payment_id* | string | The payment id place-order returned. |
{
"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."
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many orders to return (1-50, default 10) |
| search | string | Partial Zinc order ID or tracking number to match |
| status | string | Filter to one Zinc order status |
| has_tracking | boolean | True to return only orders that already have tracking numbers |
{
"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"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| order* | object | |
| confirmation* | string | Issued by prepare-order to the view. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| products* | array | |
| max_price | integer | 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 | string | 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. |
{
"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."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| query* | string | What to search for, e.g. 'airpods pro' or 'cotton bath towels' |
| retailers | array | 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. |
{
"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."
}
}
}Records feedback about this MCP server, including unexpected tool failures, unhelpful responses, or missing capabilities observed by the agent or reported by the user.
| Argument | Type | Description |
|---|---|---|
| source* | string | Who initiated the feedback: "user" or "model". |
| content* | string | The feedback content, stripped of any PII. |
{
"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."
}
}
}