mcp-gateway
Server Details
Agentic commerce gateway: discovery, search, checkout across Shopify/Woo/Odoo/PrestaShop.
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 23 tools
There are two parallel, largely overlapping checkout flows: the native one (create_cart, preview_checkout, complete_checkout, get_trust_receipt) and the UCP one (ucp_create_checkout, ucp_get_checkout, ucp_update_checkout, ucp_complete_checkout, ucp_cancel_checkout). Nothing in the descriptions tells an agent when to choose one flow over the other, and search_products vs search_products_enriched also overlap.
Nearly all tools follow a predictable snake_case verb_noun pattern (create_cart, get_shipping_rates, select_shipping_option), and the UCP tools are cleanly namespaced with a consistent ucp_ prefix. Minor deviation: the two search_products* variants differ only by a suffix rather than a clear convention.
23 tools is on the heavy side for a store-checkout gateway, and the count is inflated by two near-duplicate checkout flows plus two product-search variants. Without that redundancy the surface would be a reasonable ~15 tools.
The domain (product discovery, cart, shipping, checkout, trust/verification, and docs) is well covered end-to-end with no obvious dead ends. The main issue is over-coverage via duplicate flows rather than missing operations.
Available Tools
23 toolsapply_discountIdempotentInspect
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. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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). | |
| idempotency_key | No | Idempotency key for this call (UUID-v4 or bounded ASCII token, 1-128 chars). Equivalent to the `Idempotency-Key` header — send it here if your client cannot set headers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart_id | Yes | |
| currency | Yes | |
| discount_code | Yes | |
| discount_cents | Yes | |
| new_total_cents | Yes |
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. Provide buyer.name and buyer.email from the conversation before opening approval; ask in chat if either is missing. The approval page only reviews these details. PREFER THE CART CARD: if there is an interactive card for this cart, let the buyer confirm and (when the store offers a choice) pick the payment method there — including retrying after a declined payment or switching method — instead of calling this tool yourself. Each call you make here opens a new card in the transcript instead of updating the one already open. Only call it yourself when there is no interactive card or the buyer explicitly asks you to complete it in chat. 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.
If the response has status PENDING_EXTERNAL_CONFIRMATION, no purchase has completed yet: read order_placed and next_action — a person has to approve or pay at its url; next_action says whether calling again with the same checkout_session_id and idempotency_key can read the outcome. 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. Two of these are rejected outright if guessed: exp is an INTEGER of Unix seconds (not an ISO 8601 date), and aud is this store's slug (the one in the URL you are calling, not a domain). Its currency must match the cart's currency. Demo Store enforces max_amount_cents against the cart total; a real merchant may only observe that boundary, so enforce the buyer's limit in the agent too. The mandate is a spending cap you declare to limit yourself — it authorises nothing and does not prove the buyer's consent — and its sub must be the identity you authenticate as. max_amount_cents is the spending limit the person you are buying for gave you: ask them if they gave none. Schema: https://trusteed.xyz/.well-known/payment-mandate.schema.json. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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, R026-R028. See each field's own description for what it means and whether the server verifies it. These values are not signed into the receipt — 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 (Stripe-native settlement) returns a 'not enabled' response unless this deployment enables native settlement; when enabled it charges the Stripe Shared Payment Token passed as shared_payment_token. X402 is available through the configured x402 protocol flow, not this checkout tool. MOCK moves no money: it completes the order without charging. Whether a store accepts it depends on the store's configuration (it is the default on demo-store). Defaults to MOCK if not specified. | |
| payment_option | No | Payment method THE PERSON chose, when preview_checkout returned payment_options. Ask the person; never choose for them. Card numbers and wallet keys are never sent here: the person approves (and, with own_wallet, signs) on the approval page. | |
| 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` (integer, minor units), `currency` (3 letters, must match the cart's), `exp` (expiry as an INTEGER of Unix seconds — not an ISO 8601 date string), `sub` (the identity you authenticate as — it is compared against it) and `aud` (the store slug this mandate is for, e.g. the slug in the URL you are calling — not a domain). It is a spending cap you declare to limit yourself: it authorises nothing and does not prove the buyer's consent. Use this when your client cannot set an `X-Payment-Mandate` header. | |
| checkout_session_id | Yes | Checkout session ID from preview_checkout — the same value as create_cart's cart_id (must be a valid UUID) | |
| shared_payment_token | No | Stripe Shared Payment Token (spt_…) granted by the buyer's agent wallet for payment_method=ACP. Issued by Stripe, scoped to this merchant, amount and currency, and consumed when used: it can be charged once. Only honoured when this deployment enables native ACP settlement. | |
| 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 | |
| test_funds | No | |
| money_moves | No | |
| next_action | No | |
| payment_url | No | |
| total_cents | Yes | |
| approval_url | No | |
| order_placed | No | |
| funding_source | No | |
| payment_method | No | |
| shipping_source | No | |
| payment_captured | No | |
| external_order_id | No | |
| checkout_session_id | Yes | |
| shipping_authoritative | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: idempotency is explained as replay keyed on checkout_session_id returning the same order without re-charging, the PENDING_EXTERNAL_CONFIRMATION state is disambiguated ('no purchase has completed yet') along with how to read order_placed/next_action, and auth/token validation rules (Skyfire claims, mandate fields, header vs argument precedence) are disclosed. The readOnlyHint=false annotation is consistent with the described mutation.
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?
Front-loaded with the action and the cart-card preference, and the all-caps section headers make the dense content scannable. It is long, though, and the PAYMENT MANDATE paragraph duplicates much of the payment_mandate schema description, so a few sentences do not fully earn their 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 an 11-parameter, nested-schema, high-stakes mutation with an output schema, the description covers everything an agent needs: credentials, mandate, token, idempotency, and the multi-step approval outcome. Return-value structure is left to the output schema, 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 baseline is 3; the description adds real value on top by explaining payment_method semantics (which methods need a Skyfire token, that MOCK moves no money), mandate argument rules ('exp' is Unix seconds not ISO 8601, 'aud' is the store slug), and header precedence. It does not add much about the buyer.* or cel_context fields, which the schema already carries.
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 states a specific verb and resource ('Complete the purchase') and the description grounds it in the flow by identifying checkout_session_id as coming from preview_checkout/cart_id. It does not, however, distinguish this tool from the sibling ucp_complete_checkout, leaving the agent to infer which completion path applies in a UCP context.
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?
Explicit when-to-use and when-not-to-use rules: prefer the interactive cart card for confirmation and payment-method choice, only call this tool directly when no card exists or the buyer asks to finish in chat. Prerequisites are spelled out too — buyer.name/email must be collected first, a sandbox key is needed via create_sandbox_key, and a payment mandate is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cartIdempotentInspect
Create a shopping cart in Demo Store. Returns a cart_id (the same value as checkout_session_id in preview_checkout, complete_checkout and get_trust_receipt) 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. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| 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 |
| idempotency_key | No | Idempotency key for this cart creation (UUID-v4 or bounded ASCII token, 1-128 chars). Equivalent to the `Idempotency-Key` header — send it here if your client cannot set headers. Retrying with the same key returns the same cart instead of creating a second one. | |
| 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 | |
| next_step | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| store_name | Yes | |
| session_state | Yes | |
| subtotal_cents | Yes | |
| display_context | Yes | |
| agent_session_id | Yes | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
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 | |
| mandate_subject | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently states the credential's temporary nature (24h), that it settles nothing (simulated payments), that it works only on the demo store, and that no human login is involved. This covers the key behavioral aspects an agent needs to know before invoking the tool.
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 concise, consisting of three sentences that front-load the core purpose and then provide usage and limitations. Every sentence adds value with no redundancy or unnecessary detail. It is well-structured for quick agent 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 that the tool has an output schema (not shown here but indicated), the description does not need to explain the return format. It covers the purpose, usage, validity, scope, and caveats. For a zero-parameter, self-contained tool, the description is complete and sufficient for an agent to use 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?
The tool has zero parameters, and the schema confirms this. The description does not need to explain parameter semantics because none exist. The baseline for 0 parameters is 4, and since there is nothing to add, this score 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 clearly identifies the tool's purpose: fetching a temporary sandbox credential for the demo store. It uses a specific verb ('Get') and resource ('temporary sandbox credential') and distinguishes itself from sibling tools that handle carts, checkout, and product browsing. The 24-hour validity and demo-only scope are explicitly stated, leaving 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 provides explicit instructions on how to use the credential: either as an Authorization: Bearer header or as the agent_key argument, with a clear caveat for clients that cannot set headers. It also sets expectation that payments are simulated and the credential only works on the demo store. While it doesn't name alternatives (none exist among siblings), the usage context is fully specified.
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 readOnlyHint, openWorldHint, idempotentHint, and non-destructiveness, so the safety profile is covered. The description adds valuable context: the merchant is fixed by endpoint, not by a parameter, and no parameters are accepted—this prevents misuse and clarifies an unusual behavioral trait.
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 pack the essential information with no waste: what the tool returns, why it takes no arguments, and what to do for a different merchant. The most critical fact—'Takes NO parameters'—is front-loaded in the second sentence, and the overall structure is easily 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?
Given the tool has zero parameters, rich annotations covering safety and idempotency, and an output schema, nothing an agent needs to call it correctly is missing. The endpoint-binding behavior is explicitly clarified, which is the main source of potential confusion.
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?
With zero parameters, the schema alone provides no semantic guidance. The description explicitly states 'Takes NO parameters' and explains why the merchant is fixed by the endpoint, which is essential for an agent to avoid inventing arguments, especially since additionalProperties is true.
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 that the tool retrieves the complete merchant profile, including trust score, policies, compliance, and protocol support. It identifies the resource and scope precisely, but does not explicitly differentiate itself from sibling tools like get_trust_receipt, which appears related.
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 explains when to use the tool: to read the profile of the merchant associated with the current MCP endpoint. It also provides a clear rule for accessing a different merchant's profile by using the same tool on that merchant's endpoint, though it does not mention alternative sibling tools.
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
Get a SUMMARY of a specific page on Trusteed: its title, description, keywords, related tools and the link to the full page. It returns a summary, not the full page text: read the linked URL when the whole page is needed. content_scope says what came back. Pass the page slug (e.g. 'for-agents', 'pricing', 'blog') or a blog post slug (returns its excerpt). 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 | |
| content_scope | No | |
| datePublished | No | |
| related_tools | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely non-structured behavior: the response is a summary rather than full page text, and `content_scope` reports what was actually returned. It does not describe truncation limits or pagination of the blog listing, so it falls short of a 5.
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?
Front-loads the single most important fact (it returns a SUMMARY, not the full page) in the first clause, then moves to usage and slug mechanics. It is dense and mostly waste-free, though the slug examples ('for-agents', 'pricing') duplicate the schema and 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?
With an output schema present, the description need not explain return values, and the annotations cover the safety profile. It supplies the remaining pieces an agent needs: the summary scope, the discovery path via get_site_map, and the fallback to the linked URL for full content.
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 inline description of `page` already carries the baseline documentation, which the tool description largely repeats. It does add one non-obvious semantic: passing a blog post slug returns that post's excerpt rather than page metadata, which the schema does not state.
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 and resource (get a summary of a page) and enumerates exactly what the summary contains: title, description, keywords, related tools, and full-page link. The summary-vs-full-text boundary also separates it from genuinely different siblings, so an agent can classify it without opening 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?
Gives explicit when-to-use guidance ('read the linked URL when the whole page is needed') and names the prerequisite alternative ('Use get_site_map first to discover available slugs'). Both routing decisions an agent must make are stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_detailsARead-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-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?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description carries no burden for safety traits. What it adds is content scope (variants, sizes, colors, availability) rather than behavioral characteristics like rate limits, errors, or authorization requirements. This is adequate but adds no significant behavioral transparency beyond 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?
A single sentence with no filler, the action is front-loaded, and the included detail modifiers are concise. Every word contributes to understanding the tool's purpose.
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 one-parameter, read-only tool with an output schema and rich annotations, the description is essentially complete. It doesn't explain when to use it vs alternatives, but that gap is relatively minor for a get-by-ID operation and is somewhat addressed by the schema. Overall, it provides enough for an agent to call 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?
The schema description for product_id is complete (100% coverage) and already instructs using the `id` field from search_products or nlweb_ask and not to invent IDs. The tool description provides no additional parameter-level meaning, so the baseline of 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 tool retrieves detailed information for a specific product, listing included attributes (variants, sizes, colors, availability). The verb 'Get' and resource 'specific product' are explicit. It does not explicitly distinguish from sibling tools like search_products or search_products_enriched, but the 'specific product' phrasing implies a lookup-by-ID 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 implies usage when a specific product ID is known, but it does not provide explicit guidance on when to use this tool versus alternatives such as search_products or compare_products. The parameter schema adds the hint to use IDs from search_products or nlweb_ask, but the description itself lacks this context.
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. Requires shipping_address — pass it in the call. If the buyer requests the cheapest option, use cheapest_shipping_handle when non-null; it is null when rates cannot be compared in the cart currency. Rates marked authoritative=false are estimates, not the final charge.
PREFER THE CART CARD: if create_cart returned an interactive card (the buyer can see and click it), let them enter the address and pick shipping there instead of calling this tool yourself — each top-level call you make here opens a new card in the transcript instead of updating the one already open. Only call it yourself when there is no interactive card (text-only client) or the buyer explicitly asks you to handle it in chat.
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. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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. | |
| shipping_address | No | Destination address. Required: this tool does not prompt for it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rates | Yes | |
| cart_id | Yes | |
| address_city | No | |
| address_country | No | |
| cheapest_shipping_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, and the description explains exactly why: each top-level call opens a new card in the transcript rather than updating the existing one. It further discloses credential requirements, that authoritative=false rates are estimates, the nullability of cheapest_shipping_handle, and that the skyfire token is optional — rich context beyond 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?
Front-loads purpose, then the cart-card routing rule, then credential details. It is on the longer side with a URL and repeated credential instructions, but nearly every sentence carries actionable information, so little is wasted.
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, return values need not be explained. The description covers purpose, usage routing, prerequisites, credential path, and rate semantics — everything an agent needs to call this 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 baseline is 3, but the description adds meaning the schema omits: it states shipping_address is effectively required ('this tool does not prompt for it') even though the schema lists only cart_id as required, and clarifies agent_key can be replaced by an Authorization header.
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 ('Get available shipping rates for the cart') and implicitly differentiates from the selection sibling by focusing on retrieval vs. choosing an option. An agent can immediately tell what this returns and what it needs.
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?
Explicitly routes the agent: 'PREFER THE CART CARD... Only call it yourself when there is no interactive card (text-only client) or the buyer explicitly asks.' It also gives the cheapest-option path and the create_sandbox_key prerequisite, leaving little to inference.
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.
get_store_trustRead-onlyIdempotentInspect
Get Demo Store's signed trust score (v4.1, 0-100) with per-signal data quality, confidence level, and a detached JWS for offline verification. Don't trust the number — verify it: download the JWKS at jwks_snapshot_uri, validate jws_compact with signing_kid, and recompute payload_hash_sha256.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| available | Yes | |
| breakdown | Yes | |
| issued_at | Yes | |
| signature | Yes | |
| store_slug | Yes | |
| scoring_version | Yes | |
| confidence_level | Yes | |
| recommended_action | Yes | |
| confidence_interval | Yes |
get_trust_receiptAInspect
Retrieve the signed trust receipt for a checkout. A receipt records the complete_checkout call; read order_placed before telling anyone a purchase happened. Returns the receipt id, the JWS signature and how to verify it. Issuance is asynchronous: right after complete_checkout this may answer status: "pending" with a retry delay. pending with code receipt_pending means the purchase completed and the receipt is on its way; checkout_in_progress means it has not settled yet. Only the credential that made the purchase can read its receipt. PREFER THE CART CARD: if the purchase was completed on an interactive card, it already fetches and shows this receipt itself right after the order — calling this tool yourself right after is usually redundant and opens a new card in the transcript. Call it yourself only when there is no interactive card, or the buyer asks for the receipt later in a new turn. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| checkout_session_id | Yes | The checkout session id returned by create_cart and echoed by complete_checkout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jws | No | |
| code | No | |
| docs | No | |
| status | Yes | |
| call_id | No | |
| message | No | |
| order_id | No | |
| issued_at | No | |
| dimensions | No | |
| receipt_id | No | |
| verify_url | No | |
| verify_with | No | |
| order_placed | No | |
| checkout_status | No | |
| does_not_attest | No | |
| signature_status | No | |
| retry_after_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: asynchronous issuance, the `status: "pending"` response with a retry delay, the distinction between `receipt_pending` (purchase completed) and `checkout_in_progress` (not settled), and the authorization constraint that only the purchasing credential can read the receipt. This is exactly the behavioral context an agent needs before acting on a purchase.
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?
Long but front-loaded: purpose first, then the critical 'read order_placed before telling anyone a purchase happened' caution, then behavior, then routing. Nearly every sentence earns its place, though the density of status-code detail is close to the limit of what one paragraph should hold.
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 two-parameter read tool with an output schema already describing the return shape, the description covers everything else an agent needs: async timing, retry semantics, authorization scope, and the interactive-card preference. Nothing material 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 both parameters (agent_key, checkout_session_id) are already fully documented in the schema. The description adds no syntax or format detail beyond what the schema provides, so the 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?
States a specific verb and resource ('Retrieve the signed trust receipt for a checkout') and immediately distinguishes itself from the sibling complete_checkout by noting the receipt records that call. An agent can tell what this returns and how it differs from adjacent 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?
Explicitly states when to call and when NOT to: 'PREFER THE CART CARD... calling this tool yourself right after is usually redundant... Call it yourself only when there is no interactive card, or the buyer asks for the receipt later in a new turn.' That is a rare, precise routing rule with the alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_checkoutInspect
Preview the complete order summary before payment. Advances the session to ready-for-payment state.
PREFER THE CART CARD: if there is an interactive card for this cart, let it compute and show the summary instead of calling this tool yourself — it keeps the flow in one card.
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. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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` (integer, minor units), `currency` (3 letters, must match the cart's), `exp` (expiry as an INTEGER of Unix seconds — not an ISO 8601 date string), `sub` (the identity you authenticate as — it is compared against it) and `aud` (the store slug this mandate is for, e.g. the slug in the URL you are calling — not a domain). It is a spending cap you declare to limit yourself: it authorises nothing and does not prove the buyer's consent. Use this when your client cannot set an `X-Payment-Mandate` header. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| status | Yes | |
| currency | Yes | |
| next_step | No | |
| tax_cents | Yes | |
| expires_at | No | |
| store_name | Yes | |
| tax_status | Yes | |
| total_note | Yes | |
| approval_id | No | |
| total_cents | Yes | |
| approval_url | No | |
| discount_cents | Yes | |
| shipping_cents | Yes | |
| shipping_title | No | |
| subtotal_cents | Yes | |
| total_is_final | Yes | |
| payment_options | No | |
| shipping_source | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
| approval_status_url | No | |
| checkout_session_id | Yes | |
| shipping_authoritative | No |
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?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate the safety profile. It adds useful behavioral context by noting that results are 'ranked by relevance,' though it does not describe pagination limits or result structure; the output schema likely covers the return shape.
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 short sentences, front-loading the operation and resource before giving the return behavior and sample use cases. Every sentence contributes useful context and there is no filler or repetition of schema details.
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 read-only, idempotent search tool with a full output schema and well-documented parameters, the description is complete enough for an agent to invoke it correctly. It states the document scope, result ordering, and representative use cases without requiring additional clarification.
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 all three parameters already have explanatory descriptions in the schema, so the baseline applies. The description adds modest value by connecting the type values (page, blog, faq) to the listed documentation categories, but it does not substantially expand on 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 names a specific operation ('Full-text search'), a clear resource ('all Trusteed public documentation'), and the concrete content types included ('pages, blog posts, and FAQ entries'). This makes the tool easy to distinguish from the product-focused sibling tools like search_products and get_page_content.
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 usage context: 'Use this to find answers about protocols, pricing, integration guides, trust scores, and more.' It does not explicitly state when not to use an alternative tool, but the resource scope and the search-oriented wording are enough to guide selection.
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). 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, 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 | |
| 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, openWorldHint, idempotentHint, and destructiveHint=false. The description adds value beyond those by revealing that results are structured for generating a visual product carousel artifact and include category filtering. No contradictions 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 concise sentences, front-loaded with the core action and return value, then the artifact-specific detail. No wasted words or redundant rehashing of the input schema.
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 rich input schema, output schema, and safety annotations, the description is largely complete for invoking the tool correctly. The only notable gap is the lack of any pointer to search_products_enriched when richer results are needed, but that is more of a usage-guidance issue than a completeness failure.
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 fully documents all parameters. The description only lightly touches category filtering soldered and does not need to supplement the schema. Baseline 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 states a specific verb and resource ('Search products in Demo Store') and summarizes what is returned: matching products with prices, images, availability, and direct links. It is clear but does not explicitly differentiate itself from the sibling 'search_products_enriched', so an agent must infer which search variant to use.
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 explicit guidance is given for when to use this tool versus search_products_enriched or browse_categories. The description implies generic product search but provides no exclusions, alternatives, or route-selection logic.
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 | |
| sort_provenance_warning | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, indicating a safe, non-mutating operation. The description adds valuable behavioral context by specifying the matching algorithm (keyword/substring-based on title, description, tags, vendor) and the ordering (rating then review count), plus the important caveat that ratings are not verified by Trusteed. This adds transparency beyond annotations, though it could mention pagination or result limits, hence scoring 4.
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 compact and front-loaded with the main purpose and enriched data context, then follows with technical details and usage guidance. It avoids fluff, but slightly dense in the middle with matching/ordering details; still, every sentence contributes to understanding. Score 4 rather than 5 because the flow could be improved by separating use case from mechanics.
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 (likely describing the enriched data structure) and rich annotations, the description covers the key aspects: what data is returned, how matching works, ordering, and when to use. It doesn't explicitly mention pagination or how to handle empty results, but for a search tool with this complexity, it's adequately complete. Score 4.
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 all parameters are documented. The description reinforces the usage of query, category, and price range (linking to min_price/max_price) and clarifies the search scope. It doesn't introduce entirely new parameter details beyond schema, but given high coverage, baseline is 3, and the description's linking of natural language to parameters adds value, hence 4.
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 tool's purpose: searching products with enriched data (structured attributes, variants, GTIN, images) and specifies the use case ('ideal for comparison and detailed product discovery'). It distinctly differentiates from the sibling tool 'search_products' by emphasizing the enriched data and ideal use case, making it easy for an agent to choose correctly.
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 states when to use this tool: 'Use this when you have concrete keywords, a category, or a price range.' It also clarifies the matching mechanism and ordering criteria, and importantly highlights that the ordering is based on merchant-asserted ratings and reviews, which is a key caveat. This provides clear and actionable guidance beyond simple when-to-use.
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 and provide idempotency_key. Reuse the same key for retries of the same cart and option; use a new key if either changes.
PREFER THE CART CARD: if there is an interactive card for this cart, let the buyer pick shipping there instead of calling this tool yourself — it keeps the flow in one card instead of opening a new one per step.
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. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json. 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. | |
| idempotency_key | Yes | Required. Reuse this key only when retrying the same cart and shipping option; use a new key if either changes. | |
| 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?
Annotations already signal idempotentHint=true and non-destructive, but the description adds substantially more: the exact idempotency reuse rule, the optional skyfire token behavior ('request proceeds normally if omitted'), and the hard credential requirement with the remedy (call create_sandbox_key, pass agent_key or a Bearer header, no human login). This is far beyond what the annotations 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?
Front-loaded with the core action and prerequisite, then separated into labeled sections (cart card preference, skyfire token, credential) that are each actionable rather than padding. It is longer than typical, but the credential/Auth detail is operational information the agent genuinely needs, so only minor tightening is possible.
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 4-param mutation with an output schema, the description covers the prerequisite call, the credential bootstrap path, idempotency semantics, and an alternative UI flow. Nothing an agent needs to invoke it correctly appears to be 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 alone would justify a baseline 3, but the description adds real value: it explains why idempotency_key exists and when to regenerate it, and it names the source of shipping_handle (get_shipping_rates) and agent_key (create_sandbox_key). Only marginal gain remains over the schema text, which already repeats the idempotency guidance.
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 precise verb+resource ('Select a shipping method for the cart') and immediately distinguishes itself from the sibling get_shipping_rates by declaring it a prerequisite. An agent can tell exactly what this tool does and how it relates to the rates tool without reading either 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?
Gives explicit ordering ('Must call get_shipping_rates first'), an explicit when-not-to-use path ('PREFER THE CART CARD... let the buyer pick shipping there instead of calling this tool yourself'), and retry rules for the idempotency key. Alternatives and selecting conditions are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ucp_cancel_checkoutDestructiveIdempotentInspect
Cancel a UCP checkout session. Transitions to 'canceled' status. Cannot cancel already completed checkouts. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional cancellation reason | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| idempotency_key | No | Optional idempotency key to prevent duplicate cancellations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| next_step | No | |
| created_at | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| fulfillment | No | |
| next_action | No | |
| approval_url | No | |
| idempotency_key | No | |
| payment_options | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
ucp_complete_checkoutIdempotentInspect
Complete a UCP checkout session. Transitions to 'completed' status. Idempotent — safe to retry with the same idempotency_key. 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. Two of these are rejected outright if guessed: exp is an INTEGER of Unix seconds (not an ISO 8601 date), and aud is this store's slug (the one in the URL you are calling, not a domain). Its currency must match the cart's currency. Demo Store enforces max_amount_cents against the cart total; a real merchant may only observe that boundary, so enforce the buyer's limit in the agent too. The mandate is a spending cap you declare to limit yourself — it authorises nothing and does not prove the buyer's consent — and its sub must be the identity you authenticate as. max_amount_cents is the spending limit the person you are buying for gave you: ask them if they gave none. Schema: https://trusteed.xyz/.well-known/payment-mandate.schema.json. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer | No | Buyer name and email, needed to request the approval link. | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| x402_payload | No | x402: signed payment for the server offer (omit to get it). | |
| payment_option | No | Payment method THE PERSON chose, when preview_checkout returned payment_options. Ask the person; never choose for them. Card numbers and wallet keys are never sent here: the person approves (and, with own_wallet, signs) on the approval page. | |
| idempotency_key | Yes | Unique key to prevent duplicate completions. Generate once per attempt. | |
| payment_handler | No | Payment handler the store profile publishes. Omit for default. | |
| payment_mandate | No | Payment mandate with `mandate_id`, `max_amount_cents` (integer, minor units), `currency` (3 letters, must match the cart's), `exp` (expiry as an INTEGER of Unix seconds — not an ISO 8601 date string), `sub` (the identity you authenticate as — it is compared against it) and `aud` (the store slug this mandate is for, e.g. the slug in the URL you are calling — not a domain). It is a spending cap you declare to limit yourself: it authorises nothing and does not prove the buyer's consent. Use this when your client cannot set an `X-Payment-Mandate` header. | |
| shared_payment_token | No | Stripe Shared Payment Token (spt_…) granted by the buyer's agent wallet for payment_method=ACP. Issued by Stripe, scoped to this merchant, amount and currency, and consumed when used: it can be charged once. Only honoured when this deployment enables native ACP settlement. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| next_step | No | |
| created_at | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| fulfillment | No | |
| next_action | No | |
| approval_url | No | |
| idempotency_key | No | |
| payment_options | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
ucp_create_checkoutIdempotentInspect
Create a UCP checkout session from line items. Returns a UCP checkout object with status 'incomplete'. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| 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) | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| line_items | Yes | Line items for the checkout | |
| idempotency_key | No | Required by the checkout bucket (UUID-v4 or bounded ASCII token). Choose one per purchase attempt and reuse it to retry safely. Alternatively send it as the Idempotency-Key header or params._meta["trusteed/idempotency-key"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| next_step | No | |
| created_at | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| fulfillment | No | |
| next_action | No | |
| approval_url | No | |
| idempotency_key | No | |
| payment_options | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
ucp_get_checkoutRead-onlyIdempotentInspect
Retrieve a UCP checkout session by ID. Returns the current state of the checkout. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| next_step | No | |
| created_at | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| fulfillment | No | |
| next_action | No | |
| approval_url | No | |
| idempotency_key | No | |
| payment_options | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
ucp_update_checkoutIdempotentInspect
Update a UCP checkout session. Send line_items to replace all lines (each line may name a variant_id), and/or fulfillment to set the delivery address (fulfillment.destination, which returns the shipping options) and choose one (fulfillment.selected_option_id, which adds shipping to the totals). Only allowed when status is 'incomplete'. Checkout guide: https://trusteed.xyz/.well-known/agent-checkout-guide.json.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | ISO 4217 currency code (e.g. USD). Optional: defaults to the checkout's currency. | |
| agent_key | No | Sandbox credential from `create_sandbox_key`. Use this when your client cannot set an `Authorization: Bearer` header. | |
| line_items | No | Replacement line items (replaces all lines). Omit to leave the lines as they are. | |
| checkout_id | Yes | UCP checkout session ID (valid UUID) | |
| fulfillment | No | Delivery. Send destination first, then selected_option_id (or both in one call). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| label | No | |
| intent | No | |
| status | Yes | |
| totals | Yes | |
| currency | Yes | |
| next_step | No | |
| created_at | Yes | |
| expires_at | No | ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee. |
| extensions | No | |
| line_items | Yes | |
| updated_at | Yes | |
| fulfillment | No | |
| next_action | No | |
| approval_url | No | |
| idempotency_key | No | |
| payment_options | No | |
| next_step_message | No | |
| expires_in_seconds | No | Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
- Changed
apply_discount2 fields changed- changed
Input schema / additionalPropertiesPrevious value: -trueNew value: +false - added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Idempotency key for this call (UUID-v4 or bounded ASCII token, 1-128 chars). Equivalent to the `Idempotency-Key` header — send it here if your client cannot set headers.", + "type": "string" +}
- Changed
create_cart2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
get_store_trust2 fields changed- added
Output schema / properties / recommended_actionAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "action": { + "enum": [ + "proceed", + "proceed_with_human_confirmation", + "do_not_proceed" + ], + "type": "string" + }, + "derived_from": { + "items": { + "type": "string" + }, + "type": "array" + }, + "reason_code": { + "enum": [ + "below_eligibility_threshold", + "limited_history", + "established_record", + "unrecognized_confidence_level" + ], + "type": "string" + }, + "signed": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "action", + "reason_code", + "derived_from", + "signed" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - changed
Output schema / requiredPrevious value: -[ - "store_slug", - "available", - "score", - "confidence_level", - "scoring_version", - "issued_at", - "breakdown", - "signature", - "confidence_interval" -]New value: +[ + "store_slug", + "available", + "score", + "confidence_level", + "scoring_version", + "issued_at", + "breakdown", + "signature", + "confidence_interval", + "recommended_action" +]
- Changed
preview_checkout1 field changed- added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
ucp_cancel_checkout2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
ucp_complete_checkout2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
ucp_create_checkout2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
ucp_get_checkout2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
- Changed
ucp_update_checkout2 fields changed- added
Output schema / properties / expires_atAdded value: +{ + "description": "ISO-8601 UTC instant at which this checkout SESSION stops being usable. It is not a stock reservation and not a price guarantee.", + "type": "string" +} - added
Output schema / properties / expires_in_secondsAdded value: +{ + "description": "Whole seconds left on this checkout SESSION at response time (0 when already past). It is not a stock reservation and not a price guarantee.", + "minimum": 0, + "type": "integer" +}
6 tool updates
- Changed
preview_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
- Changed
ucp_cancel_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
- Changed
ucp_complete_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
- Changed
ucp_create_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
- Changed
ucp_get_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
- Changed
ucp_update_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / reason_unavailable / enumPrevious value: -[ - "coming_soon", - "not_enabled" -]New value: +[ + "coming_soon", + "not_enabled", + "currency_not_supported" +]
2 tool updates
- Changed
complete_checkout2 fields changed- changed
Input schema / properties / buyer / properties / email / descriptionPrevious value: -"Buyer email address"New value: +"Buyer email address (e.g. ana@example.com). Prefilled in the store checkout." - changed
Input schema / properties / buyer / properties / name / descriptionPrevious value: -"Buyer full name"New value: +"Buyer first name and surname(s) as one string, e.g. \"Ana García López\". Prefilled in the store checkout."
- Changed
get_shipping_rates3 fields changed- changed
Input schema / properties / shipping_address / properties / address1 / descriptionPrevious value: -"Street address"New value: +"Street name and number, plus flat/door if any (e.g. \"Calle Mayor 1, 2B\")" - changed
Input schema / properties / shipping_address / properties / country_code / descriptionPrevious value: -"ISO country code (e.g. US, CA)"New value: +"ISO 3166-1 alpha-2 country code, two letters (e.g. ES, US, CA). Never the country name." - changed
Input schema / properties / shipping_address / properties / zip / descriptionPrevious value: -"Postal / ZIP code"New value: +"Postal / ZIP code exactly as written, keeping leading zeros (e.g. \"08001\")"
7 tool updates
- Changed
complete_checkout2 fields changed- changed
Input schema / properties / payment_option / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card" +] - changed
Output schema / properties / payment_method / enumPrevious value: -[ - "ACP", - "KYAPAY", - "PAYPAL", - "MOCK", - "X402" -]New value: +[ + "ACP", + "KYAPAY", + "PAYPAL", + "MOCK", + "X402", + "MERCHANT_CARD" +]
- Changed
preview_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
- Changed
ucp_cancel_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
- Changed
ucp_complete_checkout2 fields changed- changed
Input schema / properties / payment_option / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card" +] - changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
- Changed
ucp_create_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
- Changed
ucp_get_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
- Changed
ucp_update_checkout1 field changed- changed
Output schema / properties / payment_options / items / properties / id / enumPrevious value: -[ - "demo_card", - "demo_wallet", - "own_wallet", - "kyapay" -]New value: +[ + "demo_card", + "demo_wallet", + "own_wallet", + "merchant_card", + "kyapay" +]
1 tool update
- Added
ucp_complete_checkout
4 tool updates
- Changed
ucp_cancel_checkout3 fields changed- added
Output schema / properties / fulfillmentAdded value: +{ + "additionalProperties": true, + "properties": { + "destination": { + "additionalProperties": true, + "properties": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "province_code": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "required": [ + "city", + "country_code", + "zip" + ], + "type": "object" + }, + "options": { + "items": { + "additionalProperties": true, + "properties": { + "authoritative": { + "type": "boolean" + }, + "estimated_delivery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": true, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source": { + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "source", + "authoritative" + ], + "type": "object" + }, + "type": "array" + }, + "selected_option_id": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / line_items / items / properties / variant_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / line_items / items / properties / variant_titleAdded value: +{ + "type": "string" +}
- Changed
ucp_create_checkout5 fields changed- added
Input schema / properties / idempotency_keyAdded value: +{ + "description": "Required by the checkout bucket (UUID-v4 or bounded ASCII token). Choose one per purchase attempt and reuse it to retry safely. Alternatively send it as the Idempotency-Key header or params._meta[\"trusteed/idempotency-key\"].", + "type": "string" +} - added
Input schema / properties / line_items / items / properties / variant_idAdded value: +{ + "description": "Variant (size/colour) id as listed by get_product_details. Required when the product has more than one variant; the price and stock of THAT variant apply.", + "minLength": 1, + "type": "string" +} - added
Output schema / properties / fulfillmentAdded value: +{ + "additionalProperties": true, + "properties": { + "destination": { + "additionalProperties": true, + "properties": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "province_code": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "required": [ + "city", + "country_code", + "zip" + ], + "type": "object" + }, + "options": { + "items": { + "additionalProperties": true, + "properties": { + "authoritative": { + "type": "boolean" + }, + "estimated_delivery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": true, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source": { + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "source", + "authoritative" + ], + "type": "object" + }, + "type": "array" + }, + "selected_option_id": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / line_items / items / properties / variant_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / line_items / items / properties / variant_titleAdded value: +{ + "type": "string" +}
- Changed
ucp_get_checkout3 fields changed- added
Output schema / properties / fulfillmentAdded value: +{ + "additionalProperties": true, + "properties": { + "destination": { + "additionalProperties": true, + "properties": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "province_code": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "required": [ + "city", + "country_code", + "zip" + ], + "type": "object" + }, + "options": { + "items": { + "additionalProperties": true, + "properties": { + "authoritative": { + "type": "boolean" + }, + "estimated_delivery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": true, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source": { + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "source", + "authoritative" + ], + "type": "object" + }, + "type": "array" + }, + "selected_option_id": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / line_items / items / properties / variant_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / line_items / items / properties / variant_titleAdded value: +{ + "type": "string" +}
- Changed
ucp_update_checkout8 fields changed- changed
Input schema / properties / currency / descriptionPrevious value: -"ISO 4217 currency code (e.g. USD)"New value: +"ISO 4217 currency code (e.g. USD). Optional: defaults to the checkout's currency." - added
Input schema / properties / fulfillmentAdded value: +{ + "additionalProperties": true, + "description": "Delivery. Send destination first, then selected_option_id (or both in one call).", + "properties": { + "destination": { + "additionalProperties": true, + "description": "Delivery address. Sending it loads the shipping options for that destination; the response lists them in fulfillment.options.", + "properties": { + "address1": { + "description": "Street address", + "type": "string" + }, + "city": { + "description": "City", + "type": "string" + }, + "country_code": { + "description": "ISO 3166-1 alpha-2 country code (e.g. US, ES)", + "type": "string" + }, + "province_code": { + "description": "Province or state code (optional)", + "type": "string" + }, + "zip": { + "description": "Postal / ZIP code", + "type": "string" + } + }, + "required": [ + "address1", + "city", + "country_code", + "zip" + ], + "type": "object" + }, + "selected_option_id": { + "description": "Id of one of fulfillment.options. Choosing it adds the shipping amount to the totals.", + "type": "string" + } + }, + "type": "object" +} - changed
Input schema / properties / line_items / descriptionPrevious value: -"Replacement line items"New value: +"Replacement line items (replaces all lines). Omit to leave the lines as they are." - added
Input schema / properties / line_items / items / properties / variant_idAdded value: +{ + "description": "Variant (size/colour) id as listed by get_product_details. Required when the product has more than one variant; the price and stock of THAT variant apply.", + "minLength": 1, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "checkout_id", - "currency", - "line_items" -]New value: +[ + "checkout_id" +] - added
Output schema / properties / fulfillmentAdded value: +{ + "additionalProperties": true, + "properties": { + "destination": { + "additionalProperties": true, + "properties": { + "city": { + "type": "string" + }, + "country_code": { + "type": "string" + }, + "province_code": { + "type": "string" + }, + "zip": { + "type": "string" + } + }, + "required": [ + "city", + "country_code", + "zip" + ], + "type": "object" + }, + "options": { + "items": { + "additionalProperties": true, + "properties": { + "authoritative": { + "type": "boolean" + }, + "estimated_delivery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "price": { + "additionalProperties": true, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + } + }, + "required": [ + "amount", + "currency" + ], + "type": "object" + }, + "source": { + "enum": [ + "platform", + "merchant_policy", + "estimated" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title", + "price", + "source", + "authoritative" + ], + "type": "object" + }, + "type": "array" + }, + "selected_option_id": { + "type": "string" + } + }, + "type": "object" +} - added
Output schema / properties / line_items / items / properties / variant_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / line_items / items / properties / variant_titleAdded value: +{ + "type": "string" +}
2 tool updates
- Changed
complete_checkout2 fields changed- added
Output schema / properties / funding_sourceAdded value: +{ + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" +} - added
Output schema / properties / test_fundsAdded value: +{ + "type": "boolean" +}
- Changed
get_page_content1 field changed- added
Output schema / properties / content_scopeAdded value: +{ + "enum": [ + "summary", + "index" + ], + "type": "string" +}
7 tool updates
- Changed
complete_checkout1 field changed- added
Input schema / properties / payment_optionAdded value: +{ + "description": "Payment method THE PERSON chose, when preview_checkout returned payment_options. Ask the person; never choose for them. Card numbers and wallet keys are never sent here: the person approves (and, with own_wallet, signs) on the approval page.", + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet" + ], + "type": "string" +}
- Changed
get_trust_receipt1 field changed- added
Output schema / properties / verify_urlAdded value: +{ + "type": "string" +}
- Changed
preview_checkout3 fields changed- added
Output schema / properties / next_stepAdded value: +{ + "const": "ask_user_payment_method", + "type": "string" +} - added
Output schema / properties / next_step_messageAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_optionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "available": { + "type": "boolean" + }, + "funding_source": { + "anyOf": [ + { + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet", + "kyapay" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "rail": { + "enum": [ + "stripe", + "x402", + "kyapay" + ], + "type": "string" + }, + "reason_unavailable": { + "enum": [ + "coming_soon", + "not_enabled" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "rail", + "funding_source", + "available" + ], + "type": "object" + }, + "type": "array" +}
- Changed
ucp_cancel_checkout3 fields changed- added
Output schema / properties / next_stepAdded value: +{ + "const": "ask_user_payment_method", + "type": "string" +} - added
Output schema / properties / next_step_messageAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_optionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "available": { + "type": "boolean" + }, + "funding_source": { + "anyOf": [ + { + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet", + "kyapay" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "rail": { + "enum": [ + "stripe", + "x402", + "kyapay" + ], + "type": "string" + }, + "reason_unavailable": { + "enum": [ + "coming_soon", + "not_enabled" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "rail", + "funding_source", + "available" + ], + "type": "object" + }, + "type": "array" +}
- Changed
ucp_create_checkout3 fields changed- added
Output schema / properties / next_stepAdded value: +{ + "const": "ask_user_payment_method", + "type": "string" +} - added
Output schema / properties / next_step_messageAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_optionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "available": { + "type": "boolean" + }, + "funding_source": { + "anyOf": [ + { + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet", + "kyapay" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "rail": { + "enum": [ + "stripe", + "x402", + "kyapay" + ], + "type": "string" + }, + "reason_unavailable": { + "enum": [ + "coming_soon", + "not_enabled" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "rail", + "funding_source", + "available" + ], + "type": "object" + }, + "type": "array" +}
- Changed
ucp_get_checkout3 fields changed- added
Output schema / properties / next_stepAdded value: +{ + "const": "ask_user_payment_method", + "type": "string" +} - added
Output schema / properties / next_step_messageAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_optionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "available": { + "type": "boolean" + }, + "funding_source": { + "anyOf": [ + { + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet", + "kyapay" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "rail": { + "enum": [ + "stripe", + "x402", + "kyapay" + ], + "type": "string" + }, + "reason_unavailable": { + "enum": [ + "coming_soon", + "not_enabled" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "rail", + "funding_source", + "available" + ], + "type": "object" + }, + "type": "array" +}
- Changed
ucp_update_checkout3 fields changed- added
Output schema / properties / next_stepAdded value: +{ + "const": "ask_user_payment_method", + "type": "string" +} - added
Output schema / properties / next_step_messageAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_optionsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "available": { + "type": "boolean" + }, + "funding_source": { + "anyOf": [ + { + "enum": [ + "platform_test_card", + "platform_test_wallet", + "buyer_wallet" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "enum": [ + "demo_card", + "demo_wallet", + "own_wallet", + "kyapay" + ], + "type": "string" + }, + "label": { + "type": "string" + }, + "rail": { + "enum": [ + "stripe", + "x402", + "kyapay" + ], + "type": "string" + }, + "reason_unavailable": { + "enum": [ + "coming_soon", + "not_enabled" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "rail", + "funding_source", + "available" + ], + "type": "object" + }, + "type": "array" +}
5 tool updates
- Changed
complete_checkout4 fields changed- changed
Output schema / properties / next_action / properties / reuse_arguments / items / enumPrevious value: -[ - "checkout_session_id", - "idempotency_key" -]New value: +[ + "checkout_session_id", + "checkout_id", + "idempotency_key" +] - removed
Output schema / properties / next_action / properties / then_call / constRemoved value: -"complete_checkout" - added
Output schema / properties / next_action / properties / then_call / maxLengthAdded value: +64 - added
Output schema / properties / next_action / properties / then_call / minLengthAdded value: +1
- Changed
ucp_cancel_checkout2 fields changed- added
Output schema / properties / approval_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_actionAdded value: +{ + "additionalProperties": true, + "properties": { + "actor": { + "const": "buyer", + "type": "string" + }, + "do": { + "enum": [ + "approve", + "pay" + ], + "type": "string" + }, + "instruction": { + "type": "string" + }, + "reuse_arguments": { + "items": { + "enum": [ + "checkout_session_id", + "checkout_id", + "idempotency_key" + ], + "type": "string" + }, + "type": "array" + }, + "then_call": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "actor", + "do", + "url", + "instruction" + ], + "type": "object" +}
- Changed
ucp_create_checkout2 fields changed- added
Output schema / properties / approval_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_actionAdded value: +{ + "additionalProperties": true, + "properties": { + "actor": { + "const": "buyer", + "type": "string" + }, + "do": { + "enum": [ + "approve", + "pay" + ], + "type": "string" + }, + "instruction": { + "type": "string" + }, + "reuse_arguments": { + "items": { + "enum": [ + "checkout_session_id", + "checkout_id", + "idempotency_key" + ], + "type": "string" + }, + "type": "array" + }, + "then_call": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "actor", + "do", + "url", + "instruction" + ], + "type": "object" +}
- Changed
ucp_get_checkout2 fields changed- added
Output schema / properties / approval_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_actionAdded value: +{ + "additionalProperties": true, + "properties": { + "actor": { + "const": "buyer", + "type": "string" + }, + "do": { + "enum": [ + "approve", + "pay" + ], + "type": "string" + }, + "instruction": { + "type": "string" + }, + "reuse_arguments": { + "items": { + "enum": [ + "checkout_session_id", + "checkout_id", + "idempotency_key" + ], + "type": "string" + }, + "type": "array" + }, + "then_call": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "actor", + "do", + "url", + "instruction" + ], + "type": "object" +}
- Changed
ucp_update_checkout2 fields changed- added
Output schema / properties / approval_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_actionAdded value: +{ + "additionalProperties": true, + "properties": { + "actor": { + "const": "buyer", + "type": "string" + }, + "do": { + "enum": [ + "approve", + "pay" + ], + "type": "string" + }, + "instruction": { + "type": "string" + }, + "reuse_arguments": { + "items": { + "enum": [ + "checkout_session_id", + "checkout_id", + "idempotency_key" + ], + "type": "string" + }, + "type": "array" + }, + "then_call": { + "maxLength": 64, + "minLength": 1, + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "actor", + "do", + "url", + "instruction" + ], + "type": "object" +}
1 tool update
- Changed
get_trust_receipt2 fields changed- added
Output schema / properties / dimensionsAdded value: +{ + "additionalProperties": false, + "properties": { + "chain_coverage": { + "additionalProperties": true, + "properties": { + "checkpoint_day": { + "type": [ + "string", + "null" + ] + }, + "covered_through_seq": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "receipt_seq": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "status": { + "enum": [ + "covered", + "not_covered", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "status", + "receipt_seq", + "covered_through_seq", + "checkpoint_day" + ], + "type": "object" + }, + "evidence_present": { + "enum": [ + "present", + "absent", + "unknown" + ], + "type": "string" + }, + "evidence_verified": { + "enum": [ + "verified", + "not_verified", + "not_applicable" + ], + "type": "string" + }, + "issuer_signed": { + "enum": [ + "verified", + "present_unverified", + "absent", + "rejected" + ], + "type": "string" + }, + "revocation": { + "additionalProperties": true, + "properties": { + "checked_at": { + "type": [ + "string", + "null" + ] + }, + "freshness_seconds": { + "anyOf": [ + { + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "status": { + "enum": [ + "not_revoked", + "revoked", + "unknown" + ], + "type": "string" + }, + "status_list_url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "status", + "checked_at", + "freshness_seconds", + "status_list_url" + ], + "type": "object" + }, + "settlement": { + "additionalProperties": true, + "properties": { + "rail_evidence_ref": { + "minLength": 1, + "type": "string" + }, + "status": { + "enum": [ + "settled", + "not_attested" + ], + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "version": { + "const": "1.0", + "type": "string" + } + }, + "required": [ + "version", + "issuer_signed", + "evidence_present", + "evidence_verified", + "chain_coverage", + "revocation", + "settlement" + ], + "type": "object" +} - added
Output schema / properties / does_not_attestAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
1 tool update
- Changed
preview_checkout6 fields changed- added
Output schema / properties / approval_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / approval_status_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / approval_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / expires_atAdded value: +{ + "type": "string" +} - removed
Output schema / properties / status / constRemoved value: -"READY_FOR_PAYMENT" - added
Output schema / properties / status / enumAdded value: +[ + "READY_FOR_PAYMENT", + "PENDING_APPROVAL" +]
1 tool update
- Changed
complete_checkout5 fields changed- changed
Input schema / properties / payment_method / descriptionPrevious value: -"Payment method to use. PAYPAL creates a PayPal order and presents approval URL. KYAPAY requires kyapay_token. ACP (Stripe-native settlement) returns a 'not enabled' response unless this deployment enables native settlement; when enabled it charges the Stripe Shared Payment Token passed as shared_payment_token. MOCK moves no money: it completes the order without charging. Whether a store accepts it depends on the store's configuration (it is the default on demo-store). Defaults to MOCK if not specified."New value: +"Payment method to use. PAYPAL creates a PayPal order and presents approval URL. KYAPAY requires kyapay_token. ACP (Stripe-native settlement) returns a 'not enabled' response unless this deployment enables native settlement; when enabled it charges the Stripe Shared Payment Token passed as shared_payment_token. X402 is available through the configured x402 protocol flow, not this checkout tool. MOCK moves no money: it completes the order without charging. Whether a store accepts it depends on the store's configuration (it is the default on demo-store). Defaults to MOCK if not specified." - changed
Input schema / properties / payment_method / enumPrevious value: -[ - "ACP", - "KYAPAY", - "PAYPAL", - "MOCK" -]New value: +[ + "ACP", + "KYAPAY", + "PAYPAL", + "MOCK", + "X402" +] - added
Output schema / properties / money_movesAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / payment_capturedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / payment_methodAdded value: +{ + "enum": [ + "ACP", + "KYAPAY", + "PAYPAL", + "MOCK", + "X402" + ], + "type": "string" +}
1 tool update
- Changed
complete_checkout2 fields changed- changed
Input schema / properties / payment_method / descriptionPrevious value: -"Payment method to use. PAYPAL creates a PayPal order and presents approval URL. KYAPAY requires kyapay_token. ACP (Stripe-native settlement) returns a 'not enabled' response unless this deployment enables native settlement. MOCK moves no money: it completes the order without charging. Whether a store accepts it depends on the store's configuration (it is the default on demo-store). Defaults to MOCK if not specified."New value: +"Payment method to use. PAYPAL creates a PayPal order and presents approval URL. KYAPAY requires kyapay_token. ACP (Stripe-native settlement) returns a 'not enabled' response unless this deployment enables native settlement; when enabled it charges the Stripe Shared Payment Token passed as shared_payment_token. MOCK moves no money: it completes the order without charging. Whether a store accepts it depends on the store's configuration (it is the default on demo-store). Defaults to MOCK if not specified." - added
Input schema / properties / shared_payment_tokenAdded value: +{ + "description": "Stripe Shared Payment Token (spt_…) granted by the buyer's agent wallet for payment_method=ACP. Issued by Stripe, scoped to this merchant, amount and currency, and consumed when used: it can be charged once. Only honoured when this deployment enables native ACP settlement.", + "pattern": "^spt_[A-Za-z0-9_]+$", + "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.4112 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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.