Zinc
Shop Amazon, Walmart, Target and Best Buy from chat: search, pay by card, track orders.
我该使用它吗
质量与安全性
发现(8)
- LOW在 list-orders 中
- LOW在 get-order 中
- LOW在 get-order-tracking 中
- LOW在 list-addresses 中
- LOW在 prepare-order 中
- LOW在 place-order 中
- LOW在 get-payment-status 中
- LOW在 search-products 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.zinc.com/mcp"
}
}
}远程端点
https://mcp.zinc.com/mcpstreamable-http它能做什么
工具清单
工具(9)
🟢list-orders(search, status, has_tracking, limit)
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.
输入模式
{
"type": "object",
"properties": {
"search": {
"description": "Partial Zinc order ID or tracking number to match",
"type": "string"
},
"status": {
"description": "Filter to one Zinc order status",
"type": "string",
"enum": [
"pending",
"in_progress",
"order_placed",
"order_failed",
"cancelled",
"cancelled_by_retailer"
]
},
"has_tracking": {
"description": "True to return only orders that already have tracking numbers",
"type": "boolean"
},
"limit": {
"default": 10,
"description": "How many orders to return (1-50, default 10)",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"orders": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Zinc order UUID"
},
"status": {
"type": "string",
"description": "Zinc order status"
},
"retailer": {
"type": "string",
"description": "Merchant inferred from the item URLs — Zinc stores no retailer field"
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Total units across all line items"
},
"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."
},
"retailer_logo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The retailer's mark, for rows with no product picture."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"url",
"title",
"image"
],
"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."
},
"total_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 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."
},
"total_display": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Preformatted total, e.g. $41.98"
},
"max_price_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 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."
},
"merchant_order_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Retailer's own order numbers"
},
"shipment_summary": {
"type": "string",
"description": "One-line shipment state rolled up from the tracking rows"
},
"tracking": {
"type": "array",
"items": {
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Carrier code, e.g. ups, usps, fedex"
},
"tracking_number": {
"type": "string"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "pending, in_transit, or delivered; null before first scan"
},
"estimated_delivery_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Carrier ETA as a destination-local YYYY-MM-DD date"
},
"tracking_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"carrier",
"tracking_number",
"status",
"estimated_delivery_date",
"tracking_url"
],
"additionalProperties": false
}
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure reason when status is order_failed"
},
"error_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Worker's classification of the failure, e.g. max_price_exceeded"
},
"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."
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
}
},
"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"
],
"additionalProperties": false
}
},
"total": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Total matching orders on the account"
},
"returned": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"environment": {
"type": "string",
"enum": [
"sandbox",
"live"
],
"description": "Which Zinc dataset the configured API key reads"
}
},
"required": [
"orders",
"total",
"returned",
"environment"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get-order(order_id)
Fetch one Zinc order by its UUID and render a detail card: line items, retailer price breakdown, shipping destination, and shipment timeline.
输入模式
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The Zinc order UUID"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"order": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Zinc order UUID"
},
"status": {
"type": "string",
"description": "Zinc order status"
},
"retailer": {
"type": "string",
"description": "Merchant inferred from the item URLs — Zinc stores no retailer field"
},
"item_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Total units across all line items"
},
"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."
},
"retailer_logo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The retailer's mark, for rows with no product picture."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"url",
"title",
"image"
],
"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."
},
"total_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 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."
},
"total_display": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Preformatted total, e.g. $41.98"
},
"max_price_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 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."
},
"merchant_order_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Retailer's own order numbers"
},
"shipment_summary": {
"type": "string",
"description": "One-line shipment state rolled up from the tracking rows"
},
"tracking": {
"type": "array",
"items": {
"type": "object",
"properties": {
"carrier": {
"type": "string",
"description": "Carrier code, e.g. ups, usps, fedex"
},
"tracking_number": {
"type": "string"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "pending, in_transit, or delivered; null before first scan"
},
"estimated_delivery_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Carrier ETA as a destination-local YYYY-MM-DD date"
},
"tracking_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"carrier",
"tracking_number",
"status",
"estimated_delivery_date",
"tracking_url"
],
"additionalProperties": false
}
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Failure reason when status is order_failed"
},
"error_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Worker's classification of the failure, e.g. max_price_exceeded"
},
"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."
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
}
},
"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"
],
"additionalProperties": false
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What the shopper saw when buying through this connector; null otherwise."
},
"image": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"retailer_logo": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"quantity": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"status": {
"type": "string"
},
"variant": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"cancellation_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"url",
"title",
"image",
"retailer_logo",
"quantity",
"status",
"variant",
"cancellation_reason"
],
"additionalProperties": false
}
},
"price_breakdown": {
"anyOf": [
{
"type": "object",
"properties": {
"subtotal_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"tax_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"shipping_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"discount_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"fees_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"total_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"currency": {
"type": "string"
}
},
"required": [
"subtotal_cents",
"tax_cents",
"shipping_cents",
"discount_cents",
"fees_cents",
"total_cents",
"currency"
],
"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."
},
"ship_to": {
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"postal_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"city",
"state",
"postal_code",
"country"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"environment": {
"type": "string",
"enum": [
"sandbox",
"live"
]
}
},
"required": [
"order",
"items",
"price_breakdown",
"prices_withheld",
"ship_to",
"environment"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get-order-tracking(order_id)
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.
输入模式
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "The Zinc order UUID"
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"order_status": {
"type": "string"
},
"shipment_summary": {
"type": "string"
},
"shipments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"carrier": {
"type": "string"
},
"tracking_number": {
"type": "string"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"estimated_delivery_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"tracking_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"checkpoints": {
"type": "array",
"items": {
"type": "object",
"properties": {
"checkpoint_time": {
"type": "string"
},
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"checkpoint_time",
"status",
"message",
"location"
],
"additionalProperties": false
},
"description": "Newest scan first"
}
},
"required": [
"carrier",
"tracking_number",
"status",
"estimated_delivery_date",
"tracking_url",
"checkpoints"
],
"additionalProperties": false
}
}
},
"required": [
"order_id",
"order_status",
"shipment_summary",
"shipments"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢list-addresses
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.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"addresses": {
"type": "array",
"items": {
"type": "object",
"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",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"id",
"label",
"last_used",
"order_count"
],
"additionalProperties": false
}
},
"orders_inspected": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"addresses",
"orders_inspected"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢prepare-order(products, address_id, max_price)
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.
输入模式
{
"type": "object",
"properties": {
"products": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Product URL on the retailer's site"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"title": {
"description": "Product title from search, for the card.",
"type": "string"
},
"image": {
"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.",
"type": "string"
},
"price_cents": {
"description": "Listed unit price from search, in cents. Drives the quote and the cap.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"url"
]
}
},
"address_id": {
"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.",
"type": "string"
},
"max_price": {
"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.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"products"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Product URL on the retailer's site"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"title": {
"description": "Product title from search, for the card.",
"type": "string"
},
"image": {
"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.",
"type": "string"
},
"price_cents": {
"description": "Listed unit price from search, in cents. Drives the quote and the cap.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"retailer_logo": {
"type": "string"
}
},
"required": [
"url",
"quantity"
],
"additionalProperties": false
}
},
"shipping_address": {
"description": "Only when resolved from a saved address; otherwise entered at checkout.",
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"address_line1": {
"type": "string"
},
"address_line2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"description": "Two-letter state code where applicable",
"type": "string"
},
"postal_code": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"country": {
"default": "US",
"type": "string"
}
},
"required": [
"first_name",
"last_name",
"address_line1",
"city",
"postal_code",
"phone_number",
"country"
],
"additionalProperties": false
},
"max_price_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_price_display": {
"type": "string"
},
"quote": {
"anyOf": [
{
"type": "object",
"properties": {
"listed_price_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"estimated_tax_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"shipping_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"order_fee_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"estimated_total_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "What the card will most likely be charged: goods + tax + shipping + fee."
},
"hold_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Authorized on the card: max_price + fee."
},
"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."
},
"tax_basis": {
"type": "string",
"enum": [
"assistant",
"assumed",
"floored"
],
"description": "Always 'assumed' here: a flat 10% estimate, not a rate lookup."
},
"shipping_basis": {
"type": "string",
"enum": [
"member",
"free_over_threshold",
"standard"
],
"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."
},
"cap_basis": {
"type": "string",
"enum": [
"derived",
"budget"
],
"description": "derived: the cap is the estimate plus a margin; budget: it is the max_price the user named."
}
},
"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"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"ship_to_summary": {
"type": "string",
"description": "Empty when the shopper will enter the address on the payment page."
},
"environment": {
"type": "string",
"enum": [
"sandbox",
"live"
]
},
"can_place": {
"type": "boolean",
"description": "False when this connection lacks the orders:write scope."
},
"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."
}
},
"required": [
"products",
"max_price_cents",
"max_price_display",
"quote",
"ship_to_summary",
"environment",
"can_place",
"guest"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴place-order(confirmation, order)
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.
输入模式
{
"type": "object",
"properties": {
"confirmation": {
"type": "string",
"description": "Issued by prepare-order to the view."
},
"order": {
"type": "object",
"properties": {
"products": {
"minItems": 1,
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Product URL on the retailer's site"
},
"quantity": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"title": {
"type": "string"
},
"image": {
"type": "string"
}
},
"required": [
"url"
]
}
},
"shipping_address": {
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"address_line1": {
"type": "string"
},
"address_line2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"description": "Two-letter state code where applicable",
"type": "string"
},
"postal_code": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"country": {
"default": "US",
"type": "string"
}
},
"required": [
"first_name",
"last_name",
"address_line1",
"city",
"postal_code",
"phone_number"
]
},
"max_price": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"products",
"max_price"
]
}
},
"required": [
"confirmation",
"order"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "An order status once placed, or requires_action while the buyer pays."
},
"order_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"max_price_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"payment": {
"anyOf": [
{
"type": "object",
"properties": {
"payment_id": {
"type": "string"
},
"status": {
"type": "string"
},
"order_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"pay_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hold_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"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."
}
},
"required": [
"payment_id",
"status",
"order_id",
"pay_url",
"expires_at",
"hold_cents",
"failure"
],
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Set when the buyer has to pay on pay_url before the order exists."
}
},
"required": [
"status",
"order_id",
"max_price_cents",
"payment"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get-payment-status(payment_id)
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.
输入模式
{
"type": "object",
"properties": {
"payment_id": {
"type": "string",
"description": "The payment id place-order returned."
}
},
"required": [
"payment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"payment_id": {
"type": "string"
},
"status": {
"type": "string"
},
"order_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"pay_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"hold_cents": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"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."
}
},
"required": [
"payment_id",
"status",
"order_id",
"pay_url",
"expires_at",
"hold_cents",
"failure"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search-products(query, retailers)
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.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "What to search for, e.g. 'airpods pro' or 'cotton bath towels'"
},
"retailers": {
"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.",
"maxItems": 18,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"required": [
"query"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}输出模式
{
"type": "object",
"properties": {
"query": {
"type": "string"
},
"retailers": {
"description": "The stores the search was limited to; absent when it searched everywhere.",
"type": "array",
"items": {
"type": "string"
}
},
"results": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Orderable retailer URL — pass straight to prepare-order"
},
"retailer": {
"type": "string"
},
"title": {
"type": "string"
},
"image": {
"type": "string"
},
"retailer_logo": {
"type": "string"
},
"brand": {
"type": "string"
},
"price_cents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"price_display": {
"type": "string"
},
"stars": {
"type": "number"
},
"num_reviews": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"url",
"retailer",
"title"
],
"additionalProperties": false
},
"description": "At most 20 results, best first. The card shows them all; a narrower query finds more, not a second page."
},
"result_count": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "How many results are in `results`."
},
"environment": {
"type": "string",
"enum": [
"sandbox",
"live"
]
}
},
"required": [
"query",
"results",
"result_count",
"environment"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡send_feedback(content, source)
Records feedback about this MCP server, including unexpected tool failures, unhelpful responses, or missing capabilities observed by the agent or reported by the user.
输入模式
{
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "The feedback content, stripped of any PII."
},
"source": {
"type": "string",
"enum": [
"user",
"model"
],
"description": "Who initiated the feedback: \"user\" or \"model\"."
}
},
"required": [
"content",
"source"
]
}社区
证据