> ## Documentation Index
> Fetch the complete documentation index at: https://storekit.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# UCP Discovery

> The Universal Commerce Protocol profile a storekit ordering host publishes at /.well-known/ucp: the venues it sells for, their MCP endpoints, and the cart capability those endpoints implement.

**Who this is for:** a commerce platform or agent host that connects customers to merchants.

A [UCP](https://ucp.dev/2026-08-25/specification/overview/) client reads a profile before it connects to anything: which services a business speaks, over which transport, at which endpoint, and which capabilities those endpoints implement. A storekit ordering host publishes that profile, and the endpoints it names are the customer-facing [MCP endpoints](/docs/developers/agents/ordering/mcp-endpoint).

## Paths

| Path                                             | Answers with                                                  |
| ------------------------------------------------ | ------------------------------------------------------------- |
| `GET https://{host}/.well-known/ucp`             | Every venue the host sells for, each as its own service entry |
| `GET https://{host}/{venueSlug}/.well-known/ucp` | That one venue                                                |

One host sells for many venues and each has its own MCP endpoint, so the host profile lists them — capped at 25, like every other agent-facing list — and an agent already talking about a venue reads the venue path instead. Which venues appear comes from the host itself, so a brand on its own domain advertises that brand's locations and nothing else.

Responses are JSON, cached for 15 minutes and open to any origin. A host with no venues, or a venue slug that does not resolve, is a `404`: no profile beats a profile with no endpoint in it.

## Profile

```json theme={null}
{
  "ucp": {
    "version": "2026-08-25",
    "services": {
      "dev.ucp.shopping": [
        {
          "id": "gordon-ramsay-plane-food-1",
          "version": "2026-08-25",
          "spec": "https://ucp.dev/2026-08-25/specification/overview",
          "transport": "mcp",
          "endpoint": "https://order.storekit.com/gordon-ramsay-plane-food-1/api/mcp",
          "schema": "https://ucp.dev/2026-08-25/services/shopping/mcp.openrpc.json"
        }
      ]
    },
    "capabilities": {
      "dev.ucp.shopping.cart": [
        {
          "version": "2026-08-25",
          "spec": "https://ucp.dev/2026-08-25/specification/shopping/cart",
          "schema": "https://ucp.dev/2026-08-25/schemas/shopping/cart.json"
        }
      ]
    },
    "payment_handlers": {}
  }
}
```

| Field                                   | Meaning                                                                                                                                                                                                                    |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `services["dev.ucp.shopping"]`          | One entry per venue. Entries differ only by `endpoint`, and each `id` is the venue slug the rest of the API speaks.                                                                                                        |
| `transport`                             | `mcp` only. It is the only transport the host serves; UCP's in-page transport is the embedded iframe protocol, which these pages do not listen for.                                                                        |
| `schema`                                | The binding a client validates calls against, on both the service entry and the capability.                                                                                                                                |
| `capabilities["dev.ucp.shopping.cart"]` | The four cart tools on the declared endpoint: `create_cart`, `get_cart`, `update_cart`, `cancel_cart`.                                                                                                                     |
| `payment_handlers`                      | Declared empty on purpose. Payment is settled on the venue's own page, so there is no handler for a platform to tokenize against — an empty object says "none offered" where a missing key reads as an unfinished profile. |

Each declared endpoint answers a `GET` probe with `200`, and the ordering host's `robots.txt` names the agent crawlers so the well-known path is unambiguously allowed to them.


## Related topics

- [Ordering Agents Overview](/docs/developers/agents/ordering/overview.md)
- [MCP Endpoint](/docs/developers/agents/ordering/mcp-endpoint.md)
- [Developer Introduction](/docs/developers/introduction.md)
- [Event Tracking](/docs/privacy-security/event-tracking.md)
- [Capturing Guest Data](/docs/guides/guest-data/overview.md)
