Skip to main content
Who this is for: an assistant or agent app acting for the customer, outside their browser. Every storekit ordering host is also a remote MCP server. An assistant that is nowhere near the customer’s browser — ChatGPT, Claude, an agent app, an IDE — can connect to it, read a venue’s menu, quote a price and build a cart the customer then opens to pay.

Endpoints

There are two scopes, and both are reached on the store’s own ordering host: {host} is the domain the store’s ordering pages are served from, such as order.storekit.com. Both endpoints are scoped by that host, so a brand on its own domain can only ever answer for its own venues. Use the brand endpoint when the customer has not said which branch they want: find_venues returns the slug every other tool then takes as its venue argument. Use the venue endpoint when the location is already settled. A GET or HEAD on either endpoint returns 200 and a line saying what the endpoint is, so a client can probe it before opening a session.

Protocol

JSON-RPC 2.0 over HTTP, one message per POST. The methods implemented are initialize, ping, tools/list and tools/call; MCP revisions 2025-06-18, 2025-03-26 and 2024-11-05 are all answered in the revision the client asks for.
Every result is JSON in a text content block, repeated as structuredContent for clients that read it. The endpoint is stateless: initialize returns no session id and nothing is remembered between requests, so a conversation carries the venue slug and the cart id rather than a session. Errors split by who can act on them. A malformed argument is a JSON-RPC -32602 naming the parameter; anything the assistant could recover from — no such category, no match, a venue that stopped accepting orders — comes back as a tool result with isError: true whose text says what to do next.

Read Tools

On the brand endpoint every tool except find_venues takes an extra venue argument, and a slug that does not belong to that brand is refused with the brand’s own list rather than answered from another brand’s menu. Reads carry readOnlyHint, so a client can call them without asking the customer first. Prices are formatted strings in the venue’s currency, descriptions are stripped and truncated, and every list is capped.
Fulfillment methods are reported from what the venue payload proves: Delivery, Pickup and InStore. Catering is not offered over MCP.

Cart Tools

The cart capability follows the UCP cart MCP binding exactly, so a UCP client needs no mapping table. What the binding means in practice:
  • Every call carries meta["ucp-agent"] with your agent profile. A call without it is rejected.
  • The cart id is a top-level id, never nested inside cart.
  • Amounts are integer minor units (450 is £4.50).
  • A business problem is a successful result carrying messages[] — a line that stopped being sellable is reported there rather than vanishing.
  • Lines are named by item id with options in brackets, BURGER(CHEESE;BACON:2), the same grammar the basket prefill links use.
A cart holds intent, not prices: every operation re-resolves and re-prices it against the menu as it is right now, so a stored cart cannot quote a figure the venue page would contradict. Carts expire 24 hours after their last write, and nothing customer-scoped is stored in one.
A cart is not an order, and these tools speak only for the customer’s side. Nothing here reads a store’s order queue, edits a menu or changes a setting. The tools return a continue_url the customer opens to review the cart and pay on the venue’s page — there is no checkout, payment or discount tool, and no order is placed until they finish there.

UCP discovery

The profile that advertises these endpoints and the cart capability.

WebMCP tools

The separate tool set an agent calls inside the customer’s browser.