Facet UCP Shopping
by facet.llc · remote · no sign-in to list tools · v1.0.0 · published by llc.facet
The independent agent-commerce protocol for AI-agent checkout on any online store.
23 tools: 3 can delete or cancel things, 7 change things and 13 only read.
Scanned Oct 21, 2026
- Deletes or cancels3Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things7Claude Code: ask: see these tools
- Only reads13Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http ucp-shopping https://api.facet.llc/ucp/mcpFindings
Matches of fixed checks, with the text they matched.
The description mentions "credential".
What this check looks forMatched text
description: "...by submitting the buyer-signed payment credential. This is the MONEY-MOVING leg: funds ca..."
The input schema at properties.payment.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.payment.description: "...he payment container `{ instruments: [{ credential: { type, ... } }] }`, where credential...."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Deletes or cancels 3Claude Code: deny
cancel_cartCancel a cart.No findings
Why it is in this group
- The name "cancel_cart" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel a cart. Idempotent, owner-scoped, and moves no money. REQUIRES IDENTITY plus an Idempotency-Key on a signature-required Terminal.
cancel_checkoutCancel a checkout session before completion, releasing its inventory hold.No findings
Why it is in this group
- The name "cancel_checkout" says "cancel": a word for removing or ending something.
Description, as the server wrote it Cancel a checkout session before completion, releasing its inventory hold. Idempotent, owner-scoped, and moves no money (distinct from an escrow refund). REQUIRES IDENTITY plus an Idempotency-Key on a signature-required Terminal.
wishlist_removeRemove a product from YOUR wishlist on this merchant.No findings
Why it is in this group
- The name "wishlist_remove" says "remove": a word for removing or ending something.
Description, as the server wrote it Remove a product from YOUR wishlist on this merchant. Idempotent: removing something not on your list succeeds with removed:false. Scoped to your own agent identity. REQUIRES IDENTITY: Facet KYA as `Authorization: Bearer <kya>`.
Changes things 7Claude Code: ask
complete_checkoutComplete a checkout you created and place the order by submitting the buyer-signed payment credential.2 findings
Why it is in this group
- The name "complete_checkout" says "checkout": a word for a change.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...by submitting the buyer-signed payment credential. This is the MONEY-MOVING leg: funds ca..."
- Info
The input schema at properties.payment.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.payment.description: "...he payment container `{ instruments: [{ credential: { type, ... } }] }`, where credential...."
Description, as the server wrote it Complete a checkout you created and place the order by submitting the buyer-signed payment credential. This is the MONEY-MOVING leg: funds capture on-chain to the merchant's pay_to (x402) or into escrow (Boson). The amount is re-derived server-side from the reservation, never your request, and the buyer's signature is verified before any capture. A per-buyer refusal (FORBIDDEN, cap-exceeded, FULFILLMENT_REQUIRED) returns as an error result; a missing or invalid identity is a real 401. REQUIRES IDENTITY plus a signed Idempotency-Key on a signature-required Terminal.
create_cartCreate a pre-checkout cart from catalog line items.No findings
Why it is in this group
- The name "create_cart" says "create": a word for a change.
Description, as the server wrote it Create a pre-checkout cart from catalog line items. A cart is a mutable scratchpad: it moves no money and holds no inventory, so it carries estimated (server-derived) totals and NO payment_handlers. Assemble it, then create_checkout(cart_id) to convert. REQUIRES IDENTITY on a signature-required Terminal.
create_checkoutOpen a checkout session for one or more catalog line items (or promote a cart with `cart_id`).No findings
Why it is in this group
- The name "create_checkout" says "create": a word for a change.
Description, as the server wrote it Open a checkout session for one or more catalog line items (or promote a cart with `cart_id`). Returns the session plus server-resolved `payment_handlers` (rail, pay_to, exact amount) to satisfy: the price and pay_to are the MERCHANT's, sealed here, never read from your request. Physical goods REQUIRE a `fulfillment` ship-to (else FULFILLMENT_REQUIRED), sealed at create. REQUIRES IDENTITY on a signature-required Terminal: a Facet KYA as `Authorization: Bearer <kya>`.
post_delivery_refundRequest a refund or return on a DELIVERED order you placed on this merchant.No findings
Why it is in this group
- The name "post_delivery_refund" says "post": a word for a change.
Description, as the server wrote it Request a refund or return on a DELIVERED order you placed on this merchant. Opens a merchant-approved refund ticket (status `requested`); it moves NO money on its own. The merchant reviews and approves it, and only then does the send-back sign from the merchant's OWN wallet (non-custodial). Amount and recipient are NOT inputs: the refund amount is derived and capped server-side, and the recipient is the order's stamped payer, never one you name. Pass `refund_line_items` to refund only part of the order; omit for the whole order. Owner-scoped: another agent's order returns FORBIDDEN. REQUIRES IDENTITY: a Facet KYA as `Authorization: Bearer <kya>` (an ES256 JWT from https://issuer.facet.llc, or another issuer in this Terminal's agents.txt KYA-Issuers). A wallet-bound KYA also authorizes a platform-originated order by its stamped payer.
update_cartReplace a cart's line items (full replacement), re-priced server-side.No findings
Why it is in this group
- The name "update_cart" says "update": a word for a change.
Description, as the server wrote it Replace a cart's line items (full replacement), re-priced server-side. Owner-scoped. REQUIRES IDENTITY on a signature-required Terminal.
update_checkoutReturn a checkout's CURRENT sealed snapshot.No findings
Why it is in this group
- The name "update_checkout" says "update": a word for a change.
Description, as the server wrote it Return a checkout's CURRENT sealed snapshot. Facet seals price and items at create, so this is a no-op that reports the session plus a note: to change line items, update the cart and start a new checkout with create_checkout(cart_id). Owner-scoped.
wishlist_addSave a product to YOUR wishlist on this merchant for later.No findings
Why it is in this group
- The name "wishlist_add" says "add": a word for a change.
Description, as the server wrote it Save a product to YOUR wishlist on this merchant for later. Idempotent: saving the same product again updates its note and keeps the original save time. Scoped to your own agent identity. REQUIRES IDENTITY: Facet KYA as `Authorization: Bearer <kya>`.
Only reads 13Claude Code: allow
discover_businessesFind businesses in the Facet Universal Business Index that an agent can transact with.No findings
Why it is in this group
- The description's first verb is "find": a word for reading.
Description, as the server wrote it Find businesses in the Facet Universal Business Index that an agent can transact with. Returns `featured` (claimed merchants with a live `terminal_url` — point your catalog and checkout calls there) and `results` (the wider directory). Use this first when you do not already know which merchant to talk to. REQUIRES IDENTITY: send a Facet KYA as `Authorization: Bearer <kya>` on the MCP request. A KYA is an ES256 JWT from Facet's default issuer https://issuer.facet.llc (or another issuer this Terminal trusts — see KYA-Issuers in its /.well-known/agents.txt). Calling without one returns 401 with a signup link.
discover_productsSearch products ACROSS every merchant in the Facet network that has opted into cross-merchant discovery.No findings
Why it is in this group
- The description's first verb is "search": a word for reading.
Description, as the server wrote it Search products ACROSS every merchant in the Facet network that has opted into cross-merchant discovery. Returns matches each carrying the selling merchant's `terminal_url` (point your catalog and checkout calls there). Filter by free-text `query` (product name + description), exact `category`, and/or `tags` (all must be present); at least one filter is required. Use this when you know WHAT you want but not WHICH merchant sells it. REQUIRES IDENTITY: send a Facet KYA as `Authorization: Bearer <kya>` on the MCP request. A KYA is an ES256 JWT from Facet's default issuer https://issuer.facet.llc (or another issuer this Terminal trusts; see KYA-Issuers in its /.well-known/agents.txt). Calling without one returns 401 with a signup link.
get_cartRead back one of YOUR carts by id: line items and estimated totals.No findings
Why it is in this group
- The name "get_cart" says "get": a word for reading.
Description, as the server wrote it Read back one of YOUR carts by id: line items and estimated totals. Owner-scoped, so another agent's id returns not_found. REQUIRES IDENTITY on a signature-required Terminal.
get_checkoutRead back one of YOUR checkout sessions by id: status, totals, line items, payment_handlers.No findings
Why it is in this group
- The name "get_checkout" says "get": a word for reading.
Description, as the server wrote it Read back one of YOUR checkout sessions by id: status, totals, line items, payment_handlers. Owner-scoped, so another agent's id returns not_found. REQUIRES IDENTITY on a signature-required Terminal.
get_orderRead back one of YOUR orders on this merchant: status, amount, settlement state.No findings
Why it is in this group
- The name "get_order" says "get": a word for reading.
Description, as the server wrote it Read back one of YOUR orders on this merchant: status, amount, settlement state. Use the order_id returned when you paid. You can only read orders your own agent identity placed — another agent's order returns FORBIDDEN. REQUIRES IDENTITY: Facet KYA as `Authorization: Bearer <kya>`.
get_payment_capabilitiesWhich settlement rails this merchant actually accepts (e.g.No findings
Why it is in this group
- The name "get_payment_capabilities" says "get": a word for reading.
Description, as the server wrote it Which settlement rails this merchant actually accepts (e.g. coin/boson-escrow for escrowed funds that release on fulfilment, coin/usdc-base for direct). Call before get_payment_requirements so you pass a rail_id this merchant registers, rather than guessing. No identity required — this is discovery data.
get_payment_requirementsTurn a `quote_token` from get_quote into a seller-signed payment offer to authorize.No findings
Why it is in this group
- The name "get_payment_requirements" says "get": a word for reading.
Description, as the server wrote it Turn a `quote_token` from get_quote into a seller-signed payment offer to authorize. Returns `requirements` (escrow address, asset, exact atomic amount, network) — sign it LOCALLY with your own wallet (e.g. @bosonprotocol/x402-client handle402 for `coin/boson-escrow`, producing an X-PAYMENT string). Facet never holds your key and cannot sign for you, which is why paying is two steps and not one. The offer binds to the quote_token's sealed landed total and ship-to, so the amount is the merchant's, not one you name. REQUIRES IDENTITY: same Facet KYA as get_quote, and the SAME `aid` — the offer path rejects a quote_token issued to a different agent than the caller.
get_productGet full product detail by product or variant identifier.No findings
Why it is in this group
- The name "get_product" says "get": a word for reading.
Description, as the server wrote it Get full product detail by product or variant identifier.
get_quoteGet the real landed cost of a product from this merchant: goods + shipping + tax for a specific destination, plus a signed `quote_token` the payment path binds to.No findings
Why it is in this group
- The name "get_quote" says "get": a word for reading.
Description, as the server wrote it Get the real landed cost of a product from this merchant: goods + shipping + tax for a specific destination, plus a signed `quote_token` the payment path binds to. Call this before paying — the token is what makes the price the MERCHANT's, not one you name. Physical products REQUIRE a `fulfillment` ship-to; without one you get FULFILLMENT_REQUIRED. An unserviceable destination returns UNDELIVERABLE (the merchant's own shipping zones, which Facet cannot waive). REQUIRES IDENTITY: send a Facet KYA as `Authorization: Bearer <kya>` (ES256 JWT from https://issuer.facet.llc, or another issuer in this Terminal's agents.txt KYA-Issuers).
list_ordersList YOUR order history on this merchant, newest first.No findings
Why it is in this group
- The name "list_orders" says "list": a word for reading.
Description, as the server wrote it List YOUR order history on this merchant, newest first. Scoped to your own agent identity — you never see another agent's orders. REQUIRES IDENTITY: Facet KYA as `Authorization: Bearer <kya>`.
lookup_catalogLook up one or more products or variants by identifier (batch).No findings
Why it is in this group
- The name "lookup_catalog" says "lookup": a word for reading.
Description, as the server wrote it Look up one or more products or variants by identifier (batch).
search_catalogSearch the merchant catalog for products matching a free-text query.No findings
Why it is in this group
- The name "search_catalog" says "search": a word for reading.
Description, as the server wrote it Search the merchant catalog for products matching a free-text query.
wishlist_listList YOUR saved items (wishlist) on this merchant, newest first.No findings
Why it is in this group
- The name "wishlist_list" says "list": a word for reading.
Description, as the server wrote it List YOUR saved items (wishlist) on this merchant, newest first. Scoped to your own agent identity, so you never see another agent's list. REQUIRES IDENTITY: Facet KYA as `Authorization: Bearer <kya>`.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http ucp-shopping https://api.facet.llc/ucp/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__ucp-shopping__search_catalog",
"mcp__ucp-shopping__lookup_catalog",
"mcp__ucp-shopping__get_product",
"mcp__ucp-shopping__discover_businesses",
"mcp__ucp-shopping__discover_products",
"mcp__ucp-shopping__get_quote",
"mcp__ucp-shopping__get_payment_capabilities",
"mcp__ucp-shopping__get_payment_requirements",
"mcp__ucp-shopping__get_order",
"mcp__ucp-shopping__list_orders",
"mcp__ucp-shopping__wishlist_list",
"mcp__ucp-shopping__get_checkout",
"mcp__ucp-shopping__get_cart"
],
"ask": [
"mcp__ucp-shopping__post_delivery_refund",
"mcp__ucp-shopping__wishlist_add",
"mcp__ucp-shopping__create_checkout",
"mcp__ucp-shopping__complete_checkout",
"mcp__ucp-shopping__update_checkout",
"mcp__ucp-shopping__create_cart",
"mcp__ucp-shopping__update_cart"
],
"deny": [
"mcp__ucp-shopping__wishlist_remove",
"mcp__ucp-shopping__cancel_checkout",
"mcp__ucp-shopping__cancel_cart"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as ucp-shopping. Review it before you use it.