mcp-gateway
Server Details
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 20 tools
Most tools are distinct, but there is overlap between search_products and search_products_enriched (both search products with different detail levels) and between the standard checkout flow and the UCP checkout flow (both handle checkouts). Agents may struggle to choose the right one without carefully reading descriptions.
All tool names follow a consistent snake_case verb_noun pattern (e.g., create_cart, get_shipping_rates, complete_checkout). The ucp_ prefix cleanly namespaces a separate checkout workflow, maintaining overall consistency.
With 20 tools, this is at the high end of what is typically appropriate. The server aggregates multiple domains (shopping, content, UCP checkout, credentials), which justifies the count, but it feels heavy and could benefit from tighter scoping.
The standard shopping flow is incomplete: there is no tool to add items to a cart after creating it (create_cart) or to retrieve the cart's contents. This creates a dead end for the primary workflow. The UCP flow is more complete (create, get, update, cancel), but the overall surface has significant gaps.
Available Tools
20 toolsapply_discountAIdempotentInspect
Apply a discount or promo code to the cart.
SKYFIRE TOKEN (optional): Pass a kya or kya-pay token in the skyfire-pay-id header to boost trust score. No token required — request proceeds normally if omitted. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Set to 'ucp_identity' to apply a loyalty discount derived from a UCP identity token instead of a promo code. | |
| cart_id | Yes | Cart session ID | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| discount_code | No | Discount or promo code to apply (required unless source is ucp_identity) | |
| identity_token | No | UCP identity bearer token (required when source is ucp_identity). | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart_id | Yes | |
| currency | Yes | |
| discount_code | Yes | |
| discount_cents | Yes | |
| new_total_cents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals that a payment mandate is required even though the schema lists only cart_id as required, and that mismatched currency or over-cap mandates are denied. It also documents credential setup, optional skyfire-token behavior, and the absence of human login. These details significantly exceed what the annotations provide, and there is no contradiction with readOnlyHint=false, destructiveHint=false, or idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the core purpose, and the labeled paragraphs (SKYFIRE TOKEN, PAYMENT MANDATE, CREDENTIAL) are scannable and mostly non-redundant. It is long, but the tool has unusually complex auth prerequisites. Some header/argument alternatives are repeated from the parameter descriptions, so it is not perfectly concise, but every block earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and hidden requirements, the description covers setup order, mandatory mandate fields, currency-matching and cap-enforcement failure conditions, header fallbacks, and the no-human-login policy. Since an output schema exists, return-value details do not need to be spelled out. The only omissions are minor edge cases such as discount conflicts, which are not needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes every parameter, the description adds crucial meaning: payment_mandate is actually mandatory and must match the cart currency with cap enforcement; agent_key is a create_sandbox_key credential; discount_code is required unless source is ucp_identity; and identity_token pairs with source='ucp_identity'. It also introduces the skyfire-pay-id header option, going beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Apply a discount or promo code to the cart.' This clearly distinguishes it from checkout/payment siblings like complete_checkout and preview_checkout, and the later mention of UCP identity discounts clarifies the alternative input mode. An agent can understand exactly what the tool does without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong operational guidance: it explicitly tells the agent to call create_sandbox_key first, to pass the key as agent_key or Authorization header, and not to attempt human login. It also explains when to use the payment_mandate argument versus the X-Payment-Mandate header. It does not formally state exclusions like 'use complete_checkout instead,' but the preconditions and alternative paths are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browse_categoriesARead-onlyIdempotentInspect
List all product categories in Demo Store with product counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| categories | Yes | |
| store_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'product counts' and the 'all categories' scope, which is useful but does not disclose behavior such as pagination, ordering, or response size. This meets the baseline without exceeding it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence with no filler. The main action and resource appear first, and the useful detail about product counts is included without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, a rich annotation set, and an output schema present, the description fully equips an agent to select and invoke this tool correctly. Nothing about when to call it or what to expect is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are 0 parameterschers, so no parameter explanation is needed. The baseline of 4 applies because the description compensates for the absence of parameters by clarifying exactly what will be returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('all product categories'), and a meaningful detail ('with product counts'), within the context of Demo Store. This distinguishes it from sibling tools that search or retrieve individual products or pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is the tool for browsing the full category listing in Demo Store, which provides enough context for when to use it. It does not explicitly name alternatives or exclusions, but none are necessary for such a straightforward no-parameter listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_productsARead-onlyIdempotentInspect
Compare 2 to 5 products side-by-side with normalized attribute table and best-value recommendation.
| Name | Required | Description | Default |
|---|---|---|---|
| product_ids | Yes | Array of product IDs to compare (2-5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes | |
| bestValue | Yes | |
| commonFields | Yes | |
| comparisonTable | Yes | |
| recommendation_provenance_warning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, openWorldHint, and destructiveHint. The description adds meaningful behavioral context by specifying that it produces a normalized attribute table and a best-value recommendation, going beyond the minimal safety profile. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence that front-loads the action ('Compare') and immediately states the key constraints and outputs. Every word earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter, full schema coverage, annotations covering the safety profile, and an output schema present, the description gives enough for correct invocation. It could have mentioned that the product IDs must reference existing products, but this is a minor gap given the output schema will define the result structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already states 'Array of product IDs to compare (2-5)'. The tool description repeats the 2-5 range but does not add extra meaning about ID formats, source, or preprocessing requirements, so the schema carries the weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compare'), a specific resource ('products'), an explicit range ('2 to 5'), and the output type ('normalized attribute table and best-value recommendation'). This clearly differentiates it from single-product tools like get_product_details and search tools like search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—when comparing 2 to 5 products side-by-side—but does not explicitly mention alternatives, exclusions, or when not to use it. It provides no direct routing guidance against sibling tools like get_product_details or search_products_enriched.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_checkoutAIdempotentInspect
Complete the purchase. Collects buyer contact info via elicitation if supported. Idempotent — replay is keyed on checkout_session_id: any retry against a session that already has an order returns that same order (COMPLETED or PENDING_EXTERNAL_CONFIRMATION) without re-charging. The provided idempotency_key is recorded on the session for audit and short-circuits a repeated call with the same key.
SKYFIRE TOKEN (payment_method=KYAPAY): Requires a Skyfire pay or kya-pay token. Preferred: pass the JWT in the skyfire-pay-id request header. Alternative: pass as kyapay_token parameter. Claims validated: sub (account ID), jti (replay prevention), amount (USD, matched against cart total), cur (must be USD), sps (pricing scheme). Missing token with KYAPAY method → error. Invalid token → error 'Invalid Skyfire token'. For other payment methods (MOCK, PAYPAL) no Skyfire token is required. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer | No | Optional buyer contact information | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| cel_context | No | Optional enforcement context for Trusteed native MCP flows (no Shopify/WooCommerce/PrestaShop/Magento plugin). Providing these fields enables full evaluation of rules R004, R006, R008, R012-R013, R015-R017, R022, R026-R029. Fields are validated and signed — do not include values you cannot substantiate. | |
| kyapay_token | No | Skyfire pay or kya-pay JWT for autonomous payment via Skyfire (payment_method=KYAPAY). Alternative to passing the token in the skyfire-pay-id request header — the header takes precedence if both are provided. Claims required: sub, jti, amount (USD), cur=USD, sps. | |
| payment_method | No | Payment method to use. PAYPAL creates a PayPal order and presents approval URL. KYAPAY requires kyapay_token. ACP (Agentic Commerce Protocol / Stripe-native settlement) is NOT enabled by default: unless MCP_ACP_NATIVE_SETTLEMENT_ENABLED=true, a non-zero non-Shopify ACP cart returns an explicit 'not enabled' response instead of a mock completion. Defaults to MOCK if not specified. | |
| idempotency_key | Yes | Unique key to prevent duplicate charges on retry. Generate once per purchase attempt. Replay is enforced primarily on checkout_session_id (the existing order is returned). The first key seen for a session is recorded; reusing the same key short-circuits to the existing order. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. | |
| checkout_session_id | Yes | Checkout session ID from preview_checkout (must be a valid UUID) | |
| reconfirmed_state_hash | No | SHA-256 of the authoritative merchant state, as returned in details.reconfirm_state_hash by a previous STATE_RECONFIRMATION_REQUIRED error. Required to proceed when the merchant state moved after the approved preview. Passing a stale hash is refused: it means the state moved again and must be reconfirmed anew. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| currency | Yes | |
| order_id | Yes | |
| idempotent | Yes | |
| store_name | Yes | |
| payment_url | No | |
| total_cents | Yes | |
| external_order_id | No | |
| checkout_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state idempotentHint=true and destructiveHint=false. The description goes far beyond by detailing idempotency behavior (replay keyed on checkout_session_id, returns existing order without re-charging), error cases (missing/invalid token), enforcement of payment mandate caps, and credential requirements. This is substantial behavioral disclosure that annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though long, every sentence carries essential information. It is front-loaded with the core purpose and idempotency, then logically groups token, mandate, and credential requirements. No filler or redundancy; the structure aids scanning and comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 9 parameters, nested objects, an output schema, and the need for credentials/mandates, the description covers all critical aspects: idempotency, token validation, mandate enforcement, credential acquisition, reconfirmation, and error handling. It also references the create_sandbox_key tool in the same list. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning beyond the schema. For example, it explains idempotency_key's role in short-circuiting, kyapay_token's required claims and precedence over header, payment_method's defaults and ACP behavior, payment_mandate's purpose and header alternative, agent_key's use when headers unavailable, and reconfirmed_state_hash's condition for use. This is far beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Complete the purchase') and distinguishes itself from siblings like preview_checkout and ucp_* checkout tools by focusing on the final completion step. It also clarifies it collects buyer contact info via elicitation, adding specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use instructions, including calling create_sandbox_key first, when Skyfire token is required (KYAPAY) vs not (MOCK, PAYPAL), and that no human login exists. It also explains the idempotency key usage and the reconfirmation requirement, giving clear conditions for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cartAIdempotentInspect
Create a shopping cart in Demo Store. Returns a cart_id for use with get_shipping_rates, preview_checkout, and complete_checkout.
SKYFIRE TOKEN (optional): Provide a kya or kya-pay Skyfire token in the skyfire-pay-id request header to boost your agent trust score (up to +0.35), which may unlock better pricing or priority service. No token required — request proceeds with neutral trust score (0.50) if omitted or invalid. PAYMENT MANDATE: this tool also requires one, sent as an X-Payment-Mandate header. This tool does not accept extra arguments, so the header is the only channel here. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Items to add to cart | |
| agent_token | No | JWS compact (EdDSA/Ed25519) signed by the agent. Required for Shopify enforcement rules R001/R002/R004. The token is embedded as a server-authoritative cart attribute — Trusteed does NOT verify the signature here; that is done offline by the Shopify Function WASM. | |
| display_context | No | Agent display capability: webview (browser) or headless | headless |
| agent_session_id | No | Opaque agent session identifier for cart resume across sessions |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| status | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| store_name | Yes | |
| session_state | Yes | |
| subtotal_cents | Yes | |
| display_context | Yes | |
| agent_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing required payment-mandate headers (and their currency-match denial rule), optional Skyfire trust-token effects, credential requirements, and the absence of human login. It also warns that invalid tokens proceed with a neutral trust score and that the max_amount cap is enforced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but the SKYFIRE TOKEN / PAYMENT MANDATE / CREDENTIAL labels make it scannable, and the core purpose is front-loaded. Nearly every sentence carries operational information; only the incorrect `agent_key` reference keeps it from being fully reliable and tidy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a state-changing tool with auth and mandate requirements, it covers a great deal: prerequisites, headers, trust-score effects, and downstream usage. However, the central credential-preservation step is inaccurate (`agent_key` vs the schema's actual parameters), and it never explains how the agent determines the cart's currency to satisfy the mandate's currency-match rule.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so baseline would be 3, but the description introduces an `agent_key` argument that does not exist in the input schema, which has additionalProperties: false. An agent following this instruction would submit an invalid tool call; the description does not map the create_sandbox_key output to the actual `agent_token`, `display_context`, or `agent_session_id` parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Create a shopping cart in Demo Store,' and distinguishes itself from checkout/shipping siblings by stating it returns a cart_id for use with get_shipping_rates, preview_checkout, and complete_checkout. This is unambiguous and separates it from create_sandbox_key and the ucp_* checkout tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit execution context: call create_sandbox_key first, pass the returned credential (or Bearer header), and do not attempt human login. It also places the tool in a sequence with get_shipping_rates, preview_checkout, and complete_checkout. It stops short of naming alternate cart/checkout tools or exclusion conditions, so it is strong but not a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_sandbox_keyAInspect
Get a temporary sandbox credential for this demo store, valid 24h. Present it as an Authorization: Bearer header, or — when your client cannot set headers — as the agent_key argument of the checkout tools. Payments here are simulated: this credential settles nothing and works only on the demo store. No human login is involved at any point.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| api_key | No | |
| retryable | No | |
| expires_at | No | |
| presented_as | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It states validity duration (24h), that payments are simulated, that the credential settles nothing, that it works only on the demo store, and that no human login is involved. These are meaningful behavioral traits beyond the mere fact of creating a key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and every sentence earns its place: purpose and validity, two usage methods with a clear conditional, and important limitations. The most essential information is front-loaded, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool takes no parameters and an output schema exists to describe the return value, the description covers everything an agent needs: what the credential is, how long it lasts, exactly how to present it, and what its limitations are. The sibling context confirms checkout tools exist, so the reference to `agent_key` is actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema has 100% coverage of that fact, so the baseline is 4. The description adds relevant contextual guidance about how the returned credential should be used, even though it does not define any input parameters because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Get') and the resource ('temporary sandbox credential'), and gives concrete purpose: authenticating to the demo store. It distinguishes itself from all sibling tools by being the only credential/authentication tool in the list, rather than a cart, checkout, product, or search operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit, actionable usage instructions: present the credential as an `Authorization: Bearer` header, or pass it as the `agent_key` argument to checkout tools when headers cannot be set. It also sets expectations about scope ('works only on the demo store') and simulation ('settles nothing'), making the correct invocation context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_merchant_profileARead-onlyIdempotentInspect
Get the complete profile — trust score, policies, compliance, and protocol support — of the merchant this MCP endpoint belongs to. Takes NO parameters: the merchant is fixed by which store's /:storeSlug/mcp endpoint you connected to, not by an argument. To read a different merchant's profile, call this same tool on that merchant's own endpoint instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| store | Yes | |
| trust | Yes | |
| identity | Yes | |
| policies | Yes | |
| discovery | Yes | |
| protocols | Yes | |
| acpFeedUrl | Yes | |
| compliance | Yes | |
| manifest_jws | Yes | |
| manifest_hash | Yes | |
| protocolScopeNote | Yes | |
| agentPolicySummary | Yes | |
| manifest_signed_at | Yes | |
| supportedProtocols | Yes | |
| identityProviderType | Yes | |
| enrichedCatalogEnabled | Yes | |
| identityLinkingEnabled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds meaningful context beyond those: the merchant is determined by the endpoint, no parameter selects it, and the returned profile covers specific data domains. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core action and resource are front-loaded, the critical no-parameter constraint is explicit, and the cross-merchant instruction is placed last without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, zero-parameter tool with rich annotations and an output schema, the description covers everything needed to call it correctly: what is returned, how the merchant is determined, why no arguments are required, and how to target another merchant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the description proactively explains why, preventing an agent from inventing a merchant ID or store slug argument. This is stronger than the baseline for parameterless tools because it resolves the most likely confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: getting the complete merchant profile, and lists the concrete content categories (trust score, policies, compliance, protocol support). It is distinct from sibling tools focused on products, carts, checkout, or content pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use the tool and the unusual zero-parameter model, including how to handle a different merchant by calling the same tool on that merchant's endpoint. It does not explicitly name sibling exclusions, but the resource scope makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_contentARead-onlyIdempotentInspect
Read the content of a specific page on Trusteed. Pass the page slug (e.g. 'for-agents', 'pricing', 'blog') or a blog post slug. Use get_site_map first to discover available slugs. Pass page='blog' to list all blog posts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page slug (e.g. 'for-agents', 'pricing', 'trust') or blog post slug. Use 'blog' to list all blog posts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| slug | No | |
| tags | No | |
| type | No | |
| found | No | |
| posts | No | |
| title | No | |
| total | No | |
| excerpt | No | |
| category | No | |
| keywords | No | |
| suggestion | No | |
| description | No | |
| readingTime | No | |
| datePublished | No | |
| related_tools | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior, so the bar for additional disclosure is lower. The description adds useful behavioral detail beyond the schema: the special semantics of page='blog' and the expectation that slugs come from get_site_map. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The core purpose is front-loaded, followed by parameter guidance and the prerequisite use of get_site_map. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only tool with rich annotations and an output schema, the description is complete. It tells the agent what slugs look like, how to discover them, and the special blog-listing behavior, so nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter and schema description coverage is 100%, so the schema already documents the page slug and the 'blog' special value. The description largely repeats the schema's parameter explanation rather than adding new semantic meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read the content of a specific page on Trusteed.' It clearly distinguishes itself from siblings like get_site_map (which discovers slugs) and get_product_details (which returns product data), and adds the special 'blog' listing behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to 'Use get_site_map first to discover available slugs,' which routes the agent to the correct precursor tool. It gives clear context for when this tool is appropriate, though it does not spell out explicit when-not-to-use exclusions against other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_detailsBRead-onlyIdempotentInspect
Get detailed information about a specific product in Demo Store, including all variants, sizes, colors, and availability.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Product ID — use the `id` field returned by search_products or nlweb_ask (e.g. 'prod-snk-001'). Do not invent IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| url | No | |
| tags | No | |
| error | No | |
| price | No | |
| title | No | |
| jsonLd | No | |
| vendor | No | |
| message | No | |
| currency | No | |
| variants | No | |
| image_url | No | |
| attributes | No | |
| categories | No | |
| product_id | No | |
| review_count | No | |
| stock_status | No | |
| average_rating | No | |
| compare_at_price | No | |
| rating_provenance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds value by specifying the scope of details (variants, sizes, colors, availability), which goes beyond annotations. No contradiction is present, and the description aligns with the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence. It front-loads the core action and resource, then expands with the detail categories. There is no filler or redundancy; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter and an output schema, the description is largely complete. It states the tool's scope and the kind of data returned. The only gap is the lack of explicit routing to sibling tools (e.g., how to obtain product_id), but given the schema already covers that, the overall context is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the product_id parameter well (including the instruction to use the id field from search_products). The description does not add any additional parameter-level information; it relies entirely on the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get detailed information') and the specific resource ('a specific product in Demo Store'), and even enumerates the details include variants, sizes, colors, and availability. It distinguishes from the search sibling tools (which return lists) by focusing on a single product, though it does not name an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It does not mention that search_products should be used first to find product IDs, nor does it note any exclusions (e.g., 'not for listing multiple products'). Usage context is entirely implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shipping_ratesAInspect
Get available shipping rates for the cart. Collects shipping address via elicitation if supported.
SKYFIRE TOKEN (optional): Pass a kya or kya-pay token in the skyfire-pay-id header to boost trust score. No token required — request proceeds normally if omitted. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes | Cart session ID returned by create_cart | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. | |
| shipping_address | No | Destination address. Omit to collect via elicitation (Claude.ai). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | Yes | |
| cart_id | Yes | |
| address_city | No | |
| address_country | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing mandatory payment mandate requirements, denied-outright conditions on currency mismatch, max_amount_cents enforcement, optional token behavior, credential prerequisites, address elicitation, and the fact that there is no human login. These are exactly the operational behaviors an agent needs to know and are absent from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with labeled sections for token, payment mandate, and credential. It is front-loaded with the core purpose, and each section earns its place given the integration complexity, though some redundancy with schema descriptions could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with authentication, payment mandate, and credential prerequisites, the description is remarkably complete: it covers required headers, argument alternatives, failure conditions, prerequisite tool calls, and the no-human-login rule. An output schema exists, so the lack of return-format detail is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though schema description coverage is 100%, the description adds meaningful parameter-level meaning: payment_mandate may be sent as an argument or X-Payment-Mandate header, its currency must match the cart or the call is denied, and its cap is enforced against the cart total. It also clarifies that agent_key can be passed as an argument or Bearer header and that create_sandbox_key must be called first.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence, 'Get available shipping rates for the cart,' names a specific verb and resource, and clearly distinguishes this from siblings like select_shipping_option and preview_checkout. The additional note about address elicitation further sharpens the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear prerequisite guidance — call create_sandbox_key first, provide a payment mandate, optionally include a skyfire token — but it does not explicitly say when to use this tool versus siblings such as select_shipping_option or preview_checkout. Usage is implied by the purpose statement rather than explicitly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_mapARead-onlyIdempotentInspect
Returns the complete site map of Trusteed: all public pages organized by category. Use this to discover what sections are available (docs, blog, integrations, legal, marketing) and find the right path before calling get_page_content.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter pages by category: commerce, docs, legal, blog, marketing, integrations |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes | |
| total | Yes | |
| faq_count | Yes | |
| blog_count | Yes | |
| categories | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by stating the tool returns the complete site map and that it is a discovery/pre-navigation step. It does not contradict annotations. A small gap is that it doesn't mention whether the optional category filter changes the completeness of the returned map, but the schema covers the filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core function and scope; the second gives the usage context and names the next tool. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, no required params) and has a rich output schema plus annotations covering safety. The description explains the purpose and the workflow context. It could mention that the category filter is optional, but the schema already marks it as not required, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the single optional category parameter. The description mentions categories in the body ('docs, blog, integrations, legal, marketing') but does not add meaning beyond the schema's enum list. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('complete site map of Trusteed'), and the organizational principle ('all public pages organized by category'). It also names the sibling tool it is meant to precede ('get_page_content'), which distinguishes it from the other browsing/search tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: 'Use this to discover what sections are available... and find the right path before calling get_page_content.' This gives a clear workflow directive and names the alternative/next step, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_checkoutAInspect
Preview the complete order summary before payment. Advances the session to ready-for-payment state.
SKYFIRE TOKEN (optional): Pass a kya or kya-pay token in the skyfire-pay-id header to boost trust score. No token required — request proceeds normally if omitted. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes | Cart session ID returned by create_cart | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| status | Yes | |
| currency | Yes | |
| store_name | Yes | |
| total_cents | Yes | |
| discount_cents | Yes | |
| shipping_cents | Yes | |
| shipping_title | No | |
| subtotal_cents | Yes | |
| checkout_session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important state-changing behavior beyond the annotations: it advances the session state, requires a payment mandate, and denies the call outright if the mandate currency does not match the cart's currency. It also clarifies the optional token behavior ('request proceeds normally if omitted') and that there is no human login. This goes well beyond the sparse annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then uses clear uppercase section labels for token, mandate, and credential requirements. It is long, but the length is justified by the complex authentication and mandate rules. Minor redundancy exists in repeating the 'if your client cannot set headers' condition for both payment_mandate and agent_key.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with this many auth-related conditions, the description covers everything needed: purpose, state transition, optional token, mandatory mandate fields, currency rule, credential acquisition via create_sandbox_key, header alternatives, and the absence of human login. An output schema exists, so return-value details do not need to be in the description. The tool is fully callable from the description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics for payment_mandate and agent_key, including required subfields, header alternatives, currency-matching enforcement, and the max_amount_cents cap. It adds less for cart_id, but that parameter is already simple and well described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Preview the complete order summary before payment.' It also states the key side effect, 'Advances the session to ready-for-payment state,' which clearly separates it from siblings like complete_checkout and ucp_create_checkout. This is a clear, distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual sequencing: this is for previewing before payment and advancing to ready-for-payment, which implies use before complete_checkout. It also provides explicit prerequisite guidance such as 'Call the create_sandbox_key tool first.' However, it does not explicitly name alternatives or state when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsARead-onlyIdempotentInspect
Full-text search across all Trusteed public documentation: pages, blog posts, and FAQ entries. Returns ranked results by relevance. Use this to find answers about protocols, pricing, integration guides, trust scores, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter results by type: page, blog, or faq. Omit to search all types. | |
| limit | No | Maximum number of results (1-20, default 10) | |
| query | Yes | Search query, e.g. 'trust score threshold', 'shopify integration', 'rate limits' |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context: full-text search, coverage across documented types, relevance ranking, and the 'public' nature of the material.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and scope, followed by expected output and usage examples. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with an output schema, 100% parameter coverage, and clear sibling separation, the description fully equips an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description does not need to add parameter details. It broadly aligns with the 'type' enum by mentioning pages, blog posts, and FAQ entries, but does not add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('search') and a clear resource ('all Trusteed public documentation: pages, blog posts, and FAQ entries'), and names the result type ('ranked results by relevance'). This clearly distinguishes it from product-search siblings like search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context ('Use this to find answers about protocols, pricing, integration guides, trust scores, and more') and the scope of what it searches. It does not explicitly name alternatives or exclusions, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsARead-onlyIdempotentInspect
Search products in Demo Store. Returns matching products with prices, images, availability, and direct links. Results include data for generating a visual product carousel artifact with category filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (1-50) | |
| query | No | Search query (e.g. 'red sneakers', 'winter jacket'). Omit to list all products. | |
| cursor | No | Opaque pagination cursor from next_cursor of a previous response. Only valid for the SAME query, category, price range and sort_by — a cursor replayed against different filters is rejected, not silently applied. | |
| compact | No | When true, the same products are described only once instead of twice. `structuredContent.products` stays the full typed record — every field, every product, untouched — but the text reply becomes a short id/title/price/currency/availability line per product instead of a markdown re-narration of that same data (images, links, ratings inline), and the duplicate `_carousel`/`_ui` widget payload is left out. Nothing that asserts trust is affected: `merchant_trust`, `rating_provenance` and `sort_provenance_warning` are never trimmed by this flag. Ignored when `field_mask` is also set — a field mask already replaces the narration with a compact listing and drops the widget payload, so there is nothing left for `compact` to cut. | |
| sort_by | No | Sort order for results | relevance |
| category | No | Filter by category slug | |
| max_price | No | Maximum price filter | |
| min_price | No | Minimum price filter | |
| field_mask | No | Return only these product fields, to spend less of your context on a large catalogue. `id` is always included. Supplying a mask also drops the carousel/UI payloads, which are the bulk of a full response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| total | Yes | |
| has_more | No | |
| products | Yes | |
| _carousel | No | |
| next_cursor | No | |
| store_environment | No | |
| sort_provenance_warning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: the compact flag's effect on output, the field_mask's context-saving behavior, and the cursor's strict validity constraint (rejected if replayed against different filters). This goes beyond the annotations and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and return value, then dives into parameter-specific behavior. It is somewhat long, but every sentence adds meaningful detail about output shaping and pagination constraints. The structure is logical: purpose first, then output highlights, then parameter nuances.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, output schema, rich annotations), the description covers the key behavioral nuances an agent needs: pagination cursor validity, compact vs. field_mask interaction, and trust-field preservation. It doesn't explicitly describe the output schema structure, but the output schema exists and the description references key fields. Minor gap: no explicit statement about when to prefer search_products_enriched, but overall complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains that 'compact' trims the text reply and drops widget payloads while preserving trust fields, and that 'field_mask' drops carousel/UI payloads and always includes 'id'. It also clarifies the cursor's strict binding to the same query/filters. This is more than the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and resource ('products in Demo Store'), and immediately distinguishes the tool from siblings by noting it returns prices, images, availability, and direct links, plus data for a visual carousel artifact. This clearly differentiates it from search_products_enriched and get_product_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching and listing products, and the sibling list includes search_products_enriched, which suggests a more enriched alternative, but the description does not explicitly state when to use this tool vs. search_products_enriched or get_product_details. It gives clear context for what it returns but no explicit exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_products_enrichedARead-onlyIdempotentInspect
Search products with enriched data including structured attributes, variants, GTIN, and images. Ideal for comparison and detailed product discovery. Matching is keyword/substring-based (title, description, tags, vendor) with rating-then-review ordering — the rating and review count it orders by are asserted by the merchant and are not verified by Trusteed. Use this when you have concrete keywords, a category, or a price range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-20) | |
| query | Yes | Search query | |
| category | No | Filter by category | |
| max_price | No | Maximum price | |
| min_price | No | Minimum price |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| products | Yes | |
| _carousel | No | |
| sort_provenance_warning | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnly/idempotent annotations: matching is keyword/substring-based on specific fields, ordering is rating-then-review, and crucially it warns that ratings/review counts are merchant-asserted and not verified by Trusteed. This is meaningful, honest behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the enriched-data scope, the matching/ordering behavior with the trust caveat, and the when-to-use guidance. It is front-loaded with the primary purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety semantics, the description sufficiently covers what an agent needs to select and call this tool: result richness, search behavior, ordering caveat, and input context. No critical operational behavior is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by clarifying what the query parameter actually does ('keyword/substring-based (title, description, tags, vendor)') and reinforcing the intended use of category and price-range filters. It does not describe every parameter but adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search products') and clearly differentiates this tool by its enriched result data: 'structured attributes, variants, GTIN, and images.' It also states the intended use ('comparison and detailed product discovery'), making its purpose distinct from the simpler sibling search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance on when to use the tool: 'Use this when you have concrete keywords, a category, or a price range.' It does not explicitly name alternatives or exclusion cases, so it stops short of the fullest when/when-not guidance, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_shipping_optionAIdempotentInspect
Select a shipping method for the cart. Must call get_shipping_rates first.
SKYFIRE TOKEN (optional): Pass a kya or kya-pay token in the skyfire-pay-id header to boost trust score. No token required — request proceeds normally if omitted. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total. CREDENTIAL: this store needs one. Call the create_sandbox_key tool first (it is in this tool list and needs no credential), then pass the key you get back as the agent_key argument — or as an Authorization: Bearer header if your client can set headers. Do not ask a person to log in: there is no human login for this store.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes | Cart session ID | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. | |
| shipping_handle | Yes | Shipping method handle from get_shipping_rates |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart_id | Yes | |
| currency | Yes | |
| total_cents | Yes | |
| selected_title | Yes | |
| shipping_cents | Yes | |
| subtotal_cents | Yes | |
| selected_handle | Yes | |
| shipping_source | Yes | |
| shipping_authoritative | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing authentication requirements, the mandatory payment mandate, currency-matching enforcement, the max_amount_cents cap, and the optional skyfire token behavior. It also clarifies that the call is denied outright on currency mismatch. This is strong behavioral context; a slight deduction is warranted because it does not describe the mutation effect on the cart or any idempotency-relevant behavior beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with clear all-caps sections and front-loaded purpose. Every section carries actionable detail, but it could be tightened; for example, the header-vs-argument alternatives are stated multiple times for both agent_key and payment_mandate. Still, it remains focused and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with authentication, a payment mandate, and prerequisite calls, the description is remarkably complete: it covers the prerequisite sequence, credential acquisition, header/argument alternatives, mandatory mandate contents, denial conditions, and the lack of human login. With an output schema present and full input schema coverage, an agent has everything needed to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful meaning to agent_key and payment_mandate by explaining how to obtain the credential via create_sandbox_key, when to use arguments versus headers, and the required mandate fields/currency rule. This exceeds schema-only documentation, though cart_id and shipping_handle receive no additional explanation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Select a shipping method for the cart.' It clearly distinguishes the tool from the sibling get_shipping_rates by requiring that tool to be called first, and the shipping_handle parameter is explicitly tied to get_shipping_rates output. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow guidance: call get_shipping_rates first, then select a shipping option, and for credentials call create_sandbox_key first. It also states that no human login exists. However, it does not explicitly say when not to use this tool, such as 'use complete_checkout instead when finalizing the purchase,' so it falls short of fully explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_cancel_checkoutADestructiveIdempotentInspect
Cancel a UCP checkout session. Transitions to 'canceled' status. Cannot cancel already completed checkouts. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional cancellation reason | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| idempotency_key | No | Optional idempotency key to prevent duplicate cancellations. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| created_at | Yes | |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as destructive and idempotent, and the description adds substantial behavioral context beyond that: the payment mandate requirement, the header-vs-argument delivery option, the mandatory fields, the currency-match denial condition, and enforcement of max_amount_cents against the cart total. This is exactly the kind of non-obvious runtime behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then covers the mandatory payment mandate details. It is a bit dense, especially the uppercase PAYMENT MANDATE section, but every sentence serves a functional purpose given the hidden requirement and denial conditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description provides complete operational context: what happens on cancel, what is not cancellable, how the required payment mandate must be supplied, and what conditions cause denial. No critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds critical semantics not fully visible in the schema: payment_mandate is actually required (though the schema lists it as optional) when not supplied as a header, its fields are enforced, its currency must match the cart, and the cap is enforced. This goes well beyond the schema's generic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Cancel a UCP checkout session.' It adds a concrete state transition ('Transitions to canceled status') and a distinguishing constraint ('Cannot cancel already completed checkouts'), which clearly separates this from sibling tools like complete_checkout or ucp_update_checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (cancel a UCP checkout) and an explicit exclusion (not already completed checkouts). It does not name alternatives such as complete_checkout for completed sessions, so it stops short of fully explicit when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_create_checkoutAIdempotentInspect
Create a UCP checkout session from line items. Returns a UCP checkout object with status 'incomplete'. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional label for additional identifiers (e.g. external order ref, multi-PSP reference) | |
| intent | No | Intent context for relevance and personalization | |
| currency | Yes | ISO 4217 currency code (e.g. USD) | |
| line_items | Yes | Line items for the checkout | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| created_at | Yes | |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses the mandatory payment mandate, the ability to send it as an argument or header, the hard denial on currency mismatch, and the max_amount cap enforcement. These are operationally critical constraints that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and each sentence carries information. The Payment Mandate section is longer than ideal and partly overlaps schema descriptions, but it is justified because it clarifies a non-obvious required field and hard failure conditions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich field schemas, the description covers the critical missing context: return status, mandate requirements, and enforcement behavior. It is slightly vague about how 'cart total' and 'cart currency' are derived, but not enough to block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds important meaning for payment_mandate: the required embedded fields, the header alternative, the currency-match hard stop, and cap enforcement. It does not add much to currency or line_items, but the schema already documents those fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a UCP checkout session from line items.' It also clarifies the expected return state ('status incomplete'), which distinguishes it from sibling tools like complete_checkout or preview_checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (creating an initial checkout from line items and supplying a payment mandate), and the 'status incomplete' detail signals this is the creation step. It does not explicitly name alternatives or exclusion conditions, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_get_checkoutARead-onlyIdempotentInspect
Retrieve a UCP checkout session by ID. Returns the current state of the checkout. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| created_at | Yes | |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent hints, the description discloses that a payment mandate is mandatory even for this read, specifies the required fields, and gives exact denial conditions (currency mismatch, cap enforcement). This is material behavioral context an agent could not infer from annotations or schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, state returned, mandate requirement, transport alternatives, field requirements, and validation consequences. The structure front-loads the primary action and then gives the critical auth constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-checkout read with an output schema present, the description covers the essential call requirements, including the non-obvious mandate and validation rules. Nothing needed to correctly invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds significant meaning to payment_mandate: the exact fields it must carry, the header-vs-argument alternatives, and the currency/cap enforcement rules. It thus goes well beyond the schema's generic 'Payment mandate with fields' text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Retrieve a UCP checkout session by ID') and clarifies it returns the current state. This clearly differentiates it from sibling mutation tools like ucp_create_checkout, ucp_update_checkout, and ucp_cancel_checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear from the retrieval semantics for a single checkout by ID, but the description does not explicitly name alternative tools or exclusion conditions. It does give concrete invocation guidance for the required payment mandate, which helps an agent use it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_update_checkoutAIdempotentInspect
Update a UCP checkout session by fully replacing all line items. Only allowed when status is 'incomplete'. PAYMENT MANDATE: this tool also requires one. Send it as the payment_mandate argument if your client cannot set headers, or as an X-Payment-Mandate header. It must carry mandate_id, max_amount_cents, currency, exp, sub, aud, and its currency must match the cart's currency or the call is denied outright. The cap in max_amount_cents is enforced against the cart total.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | Yes | ISO 4217 currency code (e.g. USD) | |
| line_items | Yes | Replacement line items | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| created_at | Yes | |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| idempotency_key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining that a payment mandate is required, how to send it via body or header, the exact fields it must carry, and that currency mismatch causes outright denial. It also clarifies the cap enforcement against the cart total, providing rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: the core purpose is front-loaded, followed by a clearly flagged payment-mandate section. Every sentence carries operational value, and the formatting makes the critical warning easy to notice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity, the description covers the essential operational context: replacement semantics, status precondition, payment mandate requirements, and validation behavior. The existence of an output schema covers return-value expectations, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds meaningful semantic context beyond the schema, especially around payment_mandate: how to pass it, what it must contain, and the currency-matching rule. This elevates it above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific action: 'Update a UCP checkout session by fully replacing all line items.' This distinguishes it from sibling tools like ucp_create_checkout and complete_checkout, and the resource and operation are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage condition ('Only allowed when status is incomplete') and details critical operational requirements like the payment mandate. It does not explicitly name alternative tools or say when not to use it, so it stops just short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
- Changed
apply_discount2 fields changed- added
Input schema / properties / agent_keyAdded value: +{ + "description": "Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header.", + "type": "string" +} - added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
complete_checkout2 fields changed- added
Input schema / properties / agent_keyAdded value: +{ + "description": "Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header.", + "type": "string" +} - added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
get_shipping_rates2 fields changed- added
Input schema / properties / agent_keyAdded value: +{ + "description": "Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header.", + "type": "string" +} - added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
preview_checkout2 fields changed- added
Input schema / properties / agent_keyAdded value: +{ + "description": "Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header.", + "type": "string" +} - added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
select_shipping_option2 fields changed- added
Input schema / properties / agent_keyAdded value: +{ + "description": "Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header.", + "type": "string" +} - added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
ucp_cancel_checkout1 field changed- added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
ucp_create_checkout1 field changed- added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
ucp_get_checkout1 field changed- added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
- Changed
ucp_update_checkout1 field changed- added
Input schema / properties / payment_mandateAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "type": "object" + }, + { + "type": "string" + } + ], + "description": "Payment mandate with `mandate_id`, `max_amount_cents`, `currency`, `exp`, `sub`, `aud`. Its `currency` must match the cart's. Use this when your client cannot set an `X-Payment-Mandate` header." +}
1 tool update
- Added
create_sandbox_key
1 tool update
- Changed
search_products_enriched1 field changed- added
Output schema / properties / _carouselAdded value: +{ + "additionalProperties": true, + "properties": { + "apiEndpoint": { + "type": "string" + }, + "initialCategory": { + "type": "string" + }, + "productsForArtifact": { + "items": {}, + "type": "array" + }, + "storeSlug": { + "type": "string" + } + }, + "required": [ + "apiEndpoint", + "storeSlug", + "productsForArtifact", + "initialCategory" + ], + "type": "object" +}
19 tool updates
- Changed
apply_discount2 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
browse_categories3 fields changed- added
Input schema / additionalPropertiesAdded value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / categories / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
compare_products6 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / bestValue / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "productId": { - "type": "string" - }, - "reason": { - "type": "string" - } - }, - "required": [ - "productId", - "reason" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "productId": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "productId", + "reason" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / products / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / attributes / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / rating_provenance / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "note": { - "type": "string" - }, - "origin": { - "const": "merchant", - "type": "string" - }, - "strength": { - "const": "claimed", - "type": "string" - }, - "verified": { - "const": false, - "type": "boolean" - } - }, - "required": [ - "origin", - "strength", - "verified", - "note" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
complete_checkout4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / buyer / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / cel_context / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
create_cart2 fields changed- changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / items / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_merchant_profile27 fields changed- added
Input schema / additionalPropertiesAdded value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / agentPolicySummary / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / agentPolicySummary / properties / maxCartValue / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / agentPolicySummary / properties / maxUnitsPerLine / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / compliance / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / discovery / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / identity / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / identity / properties / address / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / identity / properties / contact / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / properties / payment / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / properties / payment / properties / withheldMethods / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / properties / returns / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / properties / shipping / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / policies / properties / warranty / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / properties / acp / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / properties / ap2 / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / properties / ucp / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / properties / vic / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / protocols / properties / x402 / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / store / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / supportedProtocols / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / trust / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / trust / properties / legacyV2Components / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_page_content3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / posts / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_product_details4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / rating_provenance / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "note": { - "type": "string" - }, - "origin": { - "const": "merchant", - "type": "string" - }, - "strength": { - "const": "claimed", - "type": "string" - }, - "verified": { - "const": false, - "type": "boolean" - } - }, - "required": [ - "origin", - "strength", - "verified", - "note" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / variants / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_shipping_rates4 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / shipping_address / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / rates / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_site_map3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / pages / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
preview_checkout3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / items / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
search_docs3 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / results / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
search_products5 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / _carousel / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / rating_provenance / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "note": { - "type": "string" - }, - "origin": { - "const": "merchant", - "type": "string" - }, - "strength": { - "const": "claimed", - "type": "string" - }, - "verified": { - "const": false, - "type": "boolean" - } - }, - "required": [ - "origin", - "strength", - "verified", - "note" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
search_products_enriched7 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / attributes / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / images / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / products / items / properties / rating_provenance / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "note": { - "type": "string" - }, - "origin": { - "const": "merchant", - "type": "string" - }, - "strength": { - "const": "claimed", - "type": "string" - }, - "verified": { - "const": false, - "type": "boolean" - } - }, - "required": [ - "origin", - "strength", - "verified", - "note" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / products / items / properties / variants / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
select_shipping_option2 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
ucp_cancel_checkout8 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / properties / warnings / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / intent / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / properties / price / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / totals / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
ucp_create_checkout10 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / intent / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / properties / warnings / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / intent / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / properties / price / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / totals / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
ucp_get_checkout8 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / properties / warnings / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / intent / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / properties / price / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / totals / items / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
ucp_update_checkout9 fields changed- changed
Input schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Input schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / extensions / properties / warnings / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / intent / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / line_items / items / properties / price / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / totals / items / additionalPropertiesPrevious value: -falseNew value: +true
1 tool update
- Changed
get_merchant_profile2 fields changed- added
Output schema / properties / agentPolicySummary / properties / maxUnitsPerLineAdded value: +{ + "additionalProperties": false, + "properties": { + "derivedFrom": { + "items": { + "type": "string" + }, + "type": "array" + }, + "units": { + "type": "integer" + } + }, + "required": [ + "units", + "derivedFrom" + ], + "type": "object" +} - changed
Output schema / properties / agentPolicySummary / properties / source / enumPrevious value: -[ - "merchant_rules", - "not_configured", - "lookup_failed" -]New value: +[ + "merchant_rules", + "platform_ceiling", + "not_configured", + "lookup_failed" +]
1 tool update
- Changed
get_merchant_profile13 fields changed- added
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / additionalPropertiesAdded value: +false - removed
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / itemsRemoved value: -{ - "type": "string" -} - added
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / propertiesAdded value: +{ + "countries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "derivedFrom": { + "items": { + "type": "string" + }, + "type": "array" + } +} - added
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / requiredAdded value: +[ + "countries", + "derivedFrom" +] - changed
Output schema / properties / agentPolicySummary / properties / allowedShippingCountries / typePrevious value: -"array"New value: +"object" - removed
Output schema / properties / agentPolicySummary / properties / alwaysConfirmRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / agentPolicySummary / properties / confirmationRequiredAboveUsdRemoved value: -{ - "type": "number" -} - added
Output schema / properties / agentPolicySummary / properties / confirmationRequiredAtOrAboveAdded value: +{ + "$ref": "#/properties/agentPolicySummary/properties/maxCartValue" +} - added
Output schema / properties / agentPolicySummary / properties / maxCartValueAdded value: +{ + "additionalProperties": false, + "properties": { + "amountCents": { + "type": "number" + }, + "derivedFrom": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "amountCents", + "derivedFrom" + ], + "type": "object" +} - removed
Output schema / properties / agentPolicySummary / properties / maxCartValueUsdRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / agentPolicySummary / properties / neverConfirmRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / agentPolicySummary / properties / sourceAdded value: +{ + "enum": [ + "merchant_rules", + "not_configured", + "lookup_failed" + ], + "type": "string" +} - changed
Output schema / properties / agentPolicySummary / requiredPrevious value: -[ - "maxCartValueUsd", - "confirmationRequiredAboveUsd", - "allowedShippingCountries", - "alwaysConfirm", - "neverConfirm" -]New value: +[ + "source" +]
1 tool update
- Changed
create_cart4 fields changed- changed
Input schema / properties / items / items / properties / variant_id / descriptionPrevious value: -"Variant ID (optional)"New value: +"Variant ID (optional). Must match a variant id listed by get_product_details; an unknown id is rejected rather than silently replaced by the default variant." - added
Output schema / properties / items / items / properties / skuAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / variant_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / items / items / properties / variant_titleAdded value: +{ + "type": "string" +}
1 tool update
- Changed
get_merchant_profile1 field changed- changed
Output schema / properties / policies / properties / shipping / descriptionPrevious value: -"Merchant-declared shipping policy. Absent = not declared. An absent freeThresholdCents is NOT 'free shipping on everything'."New value: +"Merchant-declared shipping policy for the merchant's OWN checkout. Absent = not declared. An absent freeThresholdCents is NOT 'free shipping on everything', and a declared one is NOT applied by get_shipping_rates: those rates are flat estimates that ignore the cart subtotal. Delivery days here may differ from the estimates too."
2 tool updates
- Changed
get_shipping_rates3 fields changed- added
Output schema / properties / rates / items / properties / authoritativeAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / rates / items / properties / sourceAdded value: +{ + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" +} - changed
Output schema / properties / rates / items / requiredPrevious value: -[ - "handle", - "title", - "price", - "currency" -]New value: +[ + "handle", + "title", + "price", + "currency", + "source", + "authoritative" +]
- Changed
select_shipping_option3 fields changed- added
Output schema / properties / shipping_authoritativeAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / shipping_sourceAdded value: +{ + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "cart_id", - "selected_handle", - "selected_title", - "shipping_cents", - "subtotal_cents", - "total_cents", - "currency" -]New value: +[ + "cart_id", + "selected_handle", + "selected_title", + "shipping_cents", + "subtotal_cents", + "total_cents", + "currency", + "shipping_source", + "shipping_authoritative" +]
1 tool update
- Changed
get_merchant_profile16 fields changed- added
Output schema / properties / compliance / properties / dataRetentionDays / descriptionAdded value: +"Retention window as declared by the merchant. Absent = not declared; absence is NOT 'data is deleted immediately'." - added
Output schema / properties / compliance / properties / gdprContactEmailAdded value: +{ + "type": "string" +} - added
Output schema / properties / compliance / properties / pciDssLevel / descriptionAdded value: +"PCI DSS merchant level as declared by the merchant (1-4). Absent = not declared." - removed
Output schema / properties / compliance / requiredRemoved value: -[ - "gdprDataController", - "pciDssLevel", - "encryptionAtRest", - "encryptionInTransit", - "dataRetentionDays" -] - removed
Output schema / properties / identity / properties / address / requiredRemoved value: -[ - "street", - "city", - "state", - "country", - "postalCode" -] - removed
Output schema / properties / identity / properties / contact / requiredRemoved value: -[ - "email", - "phone", - "chat" -] - removed
Output schema / properties / identity / requiredRemoved value: -[ - "legalName", - "taxId", - "address", - "contact" -] - added
Output schema / properties / policies / properties / payment / descriptionAdded value: +"Merchant-declared payment policy. Absent = not declared; ask at checkout." - removed
Output schema / properties / policies / properties / payment / requiredRemoved value: -[ - "acceptedMethods", - "securityStandard" -] - added
Output schema / properties / policies / properties / returns / descriptionAdded value: +"Merchant-declared return policy. Absent = not declared; absence is NEVER zero." - removed
Output schema / properties / policies / properties / returns / requiredRemoved value: -[ - "windowDays", - "freeReturnShipping", - "refundMethod", - "refundProcessingDays" -] - added
Output schema / properties / policies / properties / shipping / descriptionAdded value: +"Merchant-declared shipping policy. Absent = not declared. An absent freeThresholdCents is NOT 'free shipping on everything'." - removed
Output schema / properties / policies / properties / shipping / requiredRemoved value: -[ - "freeThresholdCents", - "standardDeliveryDays", - "expressPrice", - "overnightPrice" -] - added
Output schema / properties / policies / properties / warranty / descriptionAdded value: +"Merchant-declared warranty. Absent = not declared, NOT 'no warranty'." - removed
Output schema / properties / policies / properties / warranty / requiredRemoved value: -[ - "periodYears", - "covered" -] - removed
Output schema / properties / policies / requiredRemoved value: -[ - "returns", - "shipping", - "warranty", - "payment" -]
1 tool update
- Changed
complete_checkout1 field changed- added
Output schema / properties / payment_urlAdded value: +{ + "type": "string" +}
9 tool updates
- Added
compare_products - Added
get_page_content - Added
get_site_map - Added
search_docs - Added
search_products_enriched - Added
ucp_cancel_checkout - Added
ucp_create_checkout - Added
ucp_get_checkout - Added
ucp_update_checkout
1 tool update
- Changed
search_products1 field changed- added
Input schema / properties / compactAdded value: +{ + "default": false, + "description": "When true, the same products are described only once instead of twice. `structuredContent.products` stays the full typed record — every field, every product, untouched — but the text reply becomes a short id/title/price/currency/availability line per product instead of a markdown re-narration of that same data (images, links, ratings inline), and the duplicate `_carousel`/`_ui` widget payload is left out. Nothing that asserts trust is affected: `merchant_trust`, `rating_provenance` and `sort_provenance_warning` are never trimmed by this flag. Ignored when `field_mask` is also set — a field mask already replaces the narration with a compact listing and drops the widget payload, so there is nothing left for `compact` to cut.", + "type": "boolean" +}
10 tool updates
- Changed
apply_discount1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "cart_id": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "discount_cents": { + "type": "number" + }, + "discount_code": { + "type": "string" + }, + "new_total_cents": { + "type": "number" + } + }, + "required": [ + "cart_id", + "discount_code", + "discount_cents", + "new_total_cents", + "currency" + ], + "type": "object" +}
- Changed
browse_categories1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "categories": { + "items": { + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "product_count": { + "type": "number" + } + }, + "required": [ + "name", + "product_count" + ], + "type": "object" + }, + "type": "array" + }, + "store_name": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "categories", + "total", + "store_name" + ], + "type": "object" +}
- Changed
complete_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "checkout_session_id": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "external_order_id": { + "type": "string" + }, + "idempotent": { + "type": "boolean" + }, + "order_id": { + "type": "string" + }, + "status": { + "enum": [ + "COMPLETED", + "ALREADY_PLACED", + "PENDING_EXTERNAL_CONFIRMATION" + ], + "type": "string" + }, + "store_name": { + "type": "string" + }, + "total_cents": { + "type": "number" + } + }, + "required": [ + "order_id", + "checkout_session_id", + "store_name", + "total_cents", + "currency", + "status", + "idempotent" + ], + "type": "object" +}
- Changed
create_cart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "agent_session_id": { + "type": "string" + }, + "cart_id": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "display_context": { + "enum": [ + "webview", + "headless" + ], + "type": "string" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "line_price": { + "type": "number" + }, + "name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "unit_price": { + "type": "number" + } + }, + "required": [ + "name", + "quantity", + "unit_price", + "line_price" + ], + "type": "object" + }, + "type": "array" + }, + "session_state": { + "enum": [ + "new", + "resumed" + ], + "type": "string" + }, + "status": { + "const": "NOT_READY_FOR_PAYMENT", + "type": "string" + }, + "store_name": { + "type": "string" + }, + "subtotal_cents": { + "type": "number" + } + }, + "required": [ + "cart_id", + "store_name", + "items", + "subtotal_cents", + "currency", + "status", + "agent_session_id", + "session_state", + "display_context" + ], + "type": "object" +}
- Changed
get_merchant_profile1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "acpFeedUrl": { + "type": "string" + }, + "agentPolicySummary": { + "additionalProperties": false, + "properties": { + "allowedShippingCountries": { + "items": { + "type": "string" + }, + "type": "array" + }, + "alwaysConfirm": { + "items": { + "type": "string" + }, + "type": "array" + }, + "confirmationRequiredAboveUsd": { + "type": "number" + }, + "maxCartValueUsd": { + "type": "number" + }, + "neverConfirm": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "maxCartValueUsd", + "confirmationRequiredAboveUsd", + "allowedShippingCountries", + "alwaysConfirm", + "neverConfirm" + ], + "type": "object" + }, + "compliance": { + "additionalProperties": false, + "properties": { + "dataRetentionDays": { + "type": "number" + }, + "encryptionAtRest": { + "type": "string" + }, + "encryptionInTransit": { + "type": "string" + }, + "gdprDataController": { + "type": "string" + }, + "pciDssLevel": { + "type": "number" + } + }, + "required": [ + "gdprDataController", + "pciDssLevel", + "encryptionAtRest", + "encryptionInTransit", + "dataRetentionDays" + ], + "type": "object" + }, + "discovery": { + "additionalProperties": false, + "properties": { + "agUiEndpoint": { + "type": "string" + }, + "agentCard": { + "type": "string" + }, + "agentPolicy": { + "type": "string" + }, + "llmsTxt": { + "type": "string" + }, + "mcpEndpoint": { + "type": "string" + }, + "ucpProfile": { + "type": "string" + } + }, + "required": [ + "mcpEndpoint", + "agUiEndpoint", + "agentCard", + "agentPolicy", + "ucpProfile", + "llmsTxt" + ], + "type": "object" + }, + "enrichedCatalogEnabled": { + "type": "boolean" + }, + "identity": { + "additionalProperties": false, + "properties": { + "address": { + "additionalProperties": false, + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + }, + "street": { + "type": "string" + } + }, + "required": [ + "street", + "city", + "state", + "country", + "postalCode" + ], + "type": "object" + }, + "contact": { + "additionalProperties": false, + "properties": { + "chat": { + "type": "string" + }, + "email": { + "type": "string" + }, + "phone": { + "type": "string" + } + }, + "required": [ + "email", + "phone", + "chat" + ], + "type": "object" + }, + "legalName": { + "type": "string" + }, + "taxId": { + "type": "string" + } + }, + "required": [ + "legalName", + "taxId", + "address", + "contact" + ], + "type": "object" + }, + "identityLinkingEnabled": { + "type": "boolean" + }, + "identityProviderType": { + "type": [ + "string", + "null" + ] + }, + "manifest_hash": { + "type": "string" + }, + "manifest_jws": { + "type": [ + "string", + "null" + ] + }, + "manifest_signed_at": { + "type": [ + "string", + "null" + ] + }, + "policies": { + "additionalProperties": false, + "properties": { + "payment": { + "additionalProperties": false, + "properties": { + "acceptedMethods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "securityStandard": { + "type": "string" + }, + "withheldMethods": { + "items": { + "additionalProperties": false, + "properties": { + "method": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "required": [ + "method", + "reason" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "acceptedMethods", + "securityStandard" + ], + "type": "object" + }, + "returns": { + "additionalProperties": false, + "properties": { + "freeReturnShipping": { + "type": "string" + }, + "refundMethod": { + "type": "string" + }, + "refundProcessingDays": { + "type": "number" + }, + "windowDays": { + "type": "number" + } + }, + "required": [ + "windowDays", + "freeReturnShipping", + "refundMethod", + "refundProcessingDays" + ], + "type": "object" + }, + "shipping": { + "additionalProperties": false, + "properties": { + "expressPrice": { + "type": "number" + }, + "freeThresholdCents": { + "type": "number" + }, + "overnightPrice": { + "type": "number" + }, + "standardDeliveryDays": { + "type": "string" + } + }, + "required": [ + "freeThresholdCents", + "standardDeliveryDays", + "expressPrice", + "overnightPrice" + ], + "type": "object" + }, + "warranty": { + "additionalProperties": false, + "properties": { + "covered": { + "type": "string" + }, + "periodYears": { + "type": "number" + } + }, + "required": [ + "periodYears", + "covered" + ], + "type": "object" + } + }, + "required": [ + "returns", + "shipping", + "warranty", + "payment" + ], + "type": "object" + }, + "protocolScopeNote": { + "type": "string" + }, + "protocols": { + "additionalProperties": false, + "properties": { + "acp": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "enabled", + "provider" + ], + "type": "object" + }, + "ap2": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "enabled", + "provider" + ], + "type": "object" + }, + "ucp": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "version": { + "type": "string" + } + }, + "required": [ + "enabled", + "version" + ], + "type": "object" + }, + "vic": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "environment": { + "type": "string" + } + }, + "required": [ + "enabled", + "environment" + ], + "type": "object" + }, + "x402": { + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "provider": { + "type": "string" + } + }, + "required": [ + "enabled", + "provider" + ], + "type": "object" + } + }, + "required": [ + "acp", + "ap2", + "x402" + ], + "type": "object" + }, + "store": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "isDemo": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "name", + "slug", + "description", + "isDemo" + ], + "type": "object" + }, + "supportedProtocols": { + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "mode": { + "enum": [ + "live", + "sandbox", + "coming_soon" + ], + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "mode", + "description" + ], + "type": "object" + }, + "type": "array" + }, + "trust": { + "additionalProperties": false, + "properties": { + "componentsSourceOfTruth": { + "description": "Canonical source for the components behind overallScore.", + "type": "string" + }, + "legacyV2Components": { + "additionalProperties": false, + "description": "Legacy v2 self-declared breakdown (0-1). Does NOT explain overallScore (v4.1). For the components behind the published score call GET /api/v1/stores/{slug}/trust-score, or get_store_trust for the signed envelope. Omitted when every value is zero.", + "properties": { + "catalogCompleteness": { + "type": "number" + }, + "dataFreshness": { + "type": "number" + }, + "policyClarity": { + "type": "number" + }, + "priceAccuracy": { + "type": "number" + }, + "responseTime": { + "type": "number" + }, + "returnRate": { + "type": "number" + }, + "stockReliability": { + "type": "number" + }, + "verificationDepth": { + "type": "number" + } + }, + "required": [ + "catalogCompleteness", + "dataFreshness", + "priceAccuracy", + "stockReliability", + "policyClarity", + "responseTime", + "returnRate", + "verificationDepth" + ], + "type": "object" + }, + "overallScore": { + "description": "Trust score, engine v4.1, scale 0-100. null = not published.", + "type": [ + "number", + "null" + ] + }, + "scoringVersion": { + "description": "Engine version behind overallScore ('4.1'), null when absent.", + "type": [ + "string", + "null" + ] + }, + "verificationLevel": { + "type": "string" + } + }, + "required": [ + "overallScore", + "scoringVersion", + "verificationLevel", + "componentsSourceOfTruth" + ], + "type": "object" + } + }, + "required": [ + "store", + "identity", + "trust", + "policies", + "compliance", + "protocols", + "supportedProtocols", + "protocolScopeNote", + "agentPolicySummary", + "discovery", + "identityLinkingEnabled", + "identityProviderType", + "acpFeedUrl", + "enrichedCatalogEnabled", + "manifest_hash", + "manifest_signed_at", + "manifest_jws" + ], + "type": "object" +}
- Changed
get_product_details1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "attributes": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "average_rating": { + "type": [ + "number", + "null" + ] + }, + "categories": { + "items": { + "type": "string" + }, + "type": "array" + }, + "compare_at_price": { + "type": [ + "number", + "null" + ] + }, + "currency": { + "type": "string" + }, + "error": { + "const": "not_found", + "type": "string" + }, + "id": { + "type": "string" + }, + "image_url": { + "type": [ + "string", + "null" + ] + }, + "jsonLd": { + "additionalProperties": {}, + "type": "object" + }, + "message": { + "type": "string" + }, + "price": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "rating_provenance": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "review_count": { + "type": [ + "number", + "null" + ] + }, + "stock_status": { + "enum": [ + "in_stock", + "low_stock", + "out_of_stock" + ], + "type": "string" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "variants": { + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "options": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "price": { + "type": "number" + }, + "sku": { + "type": [ + "string", + "null" + ] + }, + "stock_status": { + "enum": [ + "in_stock", + "low_stock", + "out_of_stock" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "sku", + "stock_status", + "options" + ], + "type": "object" + }, + "type": "array" + }, + "vendor": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" +}
- Changed
get_shipping_rates1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "address_city": { + "type": "string" + }, + "address_country": { + "type": "string" + }, + "cart_id": { + "type": "string" + }, + "rates": { + "items": { + "additionalProperties": false, + "properties": { + "currency": { + "type": "string" + }, + "estimated_delivery": { + "type": "string" + }, + "handle": { + "type": "string" + }, + "price": { + "type": "number" + }, + "title": { + "type": "string" + } + }, + "required": [ + "handle", + "title", + "price", + "currency" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "cart_id", + "rates" + ], + "type": "object" +}
- Changed
preview_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "checkout_session_id": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "discount_cents": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": false, + "properties": { + "line_price": { + "type": "number" + }, + "name": { + "type": "string" + }, + "quantity": { + "type": "number" + } + }, + "required": [ + "name", + "quantity", + "line_price" + ], + "type": "object" + }, + "type": "array" + }, + "shipping_cents": { + "type": "number" + }, + "shipping_title": { + "type": "string" + }, + "status": { + "const": "READY_FOR_PAYMENT", + "type": "string" + }, + "store_name": { + "type": "string" + }, + "subtotal_cents": { + "type": "number" + }, + "total_cents": { + "type": "number" + } + }, + "required": [ + "checkout_session_id", + "store_name", + "items", + "subtotal_cents", + "shipping_cents", + "discount_cents", + "total_cents", + "currency", + "status" + ], + "type": "object" +}
- Changed
search_products1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "_carousel": { + "additionalProperties": false, + "properties": { + "apiEndpoint": { + "type": "string" + }, + "initialCategory": { + "type": "string" + }, + "productsForArtifact": { + "items": {}, + "type": "array" + }, + "storeSlug": { + "type": "string" + } + }, + "required": [ + "apiEndpoint", + "storeSlug", + "productsForArtifact", + "initialCategory" + ], + "type": "object" + }, + "has_more": { + "type": "boolean" + }, + "next_cursor": { + "type": "string" + }, + "products": { + "items": { + "additionalProperties": false, + "properties": { + "compareAtPrice": { + "type": [ + "number", + "null" + ] + }, + "currency": { + "type": "string" + }, + "id": { + "description": "Product ID — use as product_id in create_cart", + "type": "string" + }, + "image": { + "type": [ + "string", + "null" + ] + }, + "price": { + "type": "number" + }, + "rating": { + "type": [ + "number", + "null" + ] + }, + "rating_provenance": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "note": { + "type": "string" + }, + "origin": { + "const": "merchant", + "type": "string" + }, + "strength": { + "const": "claimed", + "type": "string" + }, + "verified": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "origin", + "strength", + "verified", + "note" + ], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "reviewCount": { + "type": [ + "number", + "null" + ] + }, + "stockStatus": { + "enum": [ + "in_stock", + "low_stock", + "out_of_stock" + ], + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + }, + "vendor": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "type": "array" + }, + "query": { + "type": "string" + }, + "sort_provenance_warning": { + "type": "string" + }, + "store_environment": { + "type": "string" + }, + "total": { + "type": "number" + } + }, + "required": [ + "products", + "total" + ], + "type": "object" +}
- Changed
select_shipping_option1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "cart_id": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "selected_handle": { + "type": "string" + }, + "selected_title": { + "type": "string" + }, + "shipping_cents": { + "type": "number" + }, + "subtotal_cents": { + "type": "number" + }, + "total_cents": { + "type": "number" + } + }, + "required": [ + "cart_id", + "selected_handle", + "selected_title", + "shipping_cents", + "subtotal_cents", + "total_cents", + "currency" + ], + "type": "object" +}
1 tool update
- Changed
complete_checkout1 field changed- added
Input schema / properties / reconfirmed_state_hashAdded value: +{ + "description": "SHA-256 of the authoritative merchant state, as returned in details.reconfirm_state_hash by a previous STATE_RECONFIRMATION_REQUIRED error. Required to proceed when the merchant state moved after the approved preview. Passing a stale hash is refused: it means the state moved again and must be reconfirmed anew.", + "pattern": "^[0-9a-f]{64}$", + "type": "string" +}
Related MCP Connectors
AI shopping gateway for product search, inventory, carts, and merchant-hosted checkout.
Shopify product discovery and x402-paid offer verification for AI agents.
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
The independent agent-commerce protocol for AI-agent checkout on any online store.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse product catalogs, search products with filters, and initiate checkouts, generating order summaries and checkout URLs.-
- AlicenseCqualityDmaintenanceEnables AI agents to manage e-commerce operations across multiple platforms (Shopify, WooCommerce, Stripe, MercadoLibre) through a conversational interface.418 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI shopping agents to search products, check stock, apply promotions, manage cart sessions, and create cryptographically signed checkout sessions on e-commerce storefronts, while giving merchants analytics into agent intent and catalog demand gaps.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to autonomously browse inventory, negotiate terms, manage carts, and execute secure payments on Shopify stores using standardized protocols. It provides a bridge for LLMs to handle the entire commerce lifecycle from discovery to order tracking through a verifiable mandate chain.52MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.