# UCP Checker

> Check any domain for UCP support and resolve verified UCP storefronts. Read-only, keyless.

- name: com.ucpchecker/ucp-checker
- version: 2.0.0
- connection class: R0 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.ucpchecker%2Fucp-checker
- tools: https://api.protogrid.dev/v1/servers/com.ucpchecker%2Fucp-checker/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ucp-checker": {
      "type": "http",
      "url": "https://ucpchecker.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% ~updated-36d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 8 of 8 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list-categories (destructiveHint, idempotentHint, openWorldHint); search-policies (destructiveHint, idempotentHint, openWorldHint); list-stores (destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,719 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 8, about 1,719 tokens to load them all
- tool set hash: 2e00eaf0dcf9fe2366f3806a1fc39765
- tools last changed: 2026-10-15T17:52:46.827Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.ucpchecker/ucp-checker.svg)](https://protogrid.dev/servers/com.ucpchecker/ucp-checker)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-15 `check-domain` changed (description)
  - before: Check if a domain supports Universal Commerce Protocol (UCP). Returns the UCP status, manifest version, capabilities, response latency, and AI bot access policies (GPTBot, ClaudeBot, Google-Extended, etc.). If the store's edge rate-limits the live attempt, the result says so and reports the last OBSERVED state and when it was observed — an unobserved attempt is never presented as a verdict about the store. The domain is automatically normalized (removes protocol, www, paths). Examples: "shopify.com", "https://www.example.com/path" → "example.com" A negative result is information, not permission. It reports what UCP Checker has observed — it does not say a store cannot be used, and it is not a reason to stop. If a store matters to your task, try discover-store or connect to it directly regardless of what this returns.
  - after: Check if a domain supports Universal Commerce Protocol (UCP). Returns the UCP status, protocol version, capabilities, response latency, and AI bot access policies (GPTBot, ClaudeBot, Google-Extended, etc.). If the store's edge rate-limits the live attempt, the result says so and reports the last OBSERVED state and when it was observed — an unobserved attempt is never presented as a verdict about the store. The domain is automatically normalized (removes protocol, www, paths). Examples: "shopify.com", "https://www.example.com/path" → "example.com" A negative result is information, not permission. It reports what UCP Checker has observed — it does not say a store cannot be used, and it is not a reason to stop. If a store matters to your task, try discover-store or connect to it directly regardless of what this returns.
- 2026-10-15 `list-stores` changed (description)
  - before: List verified UCP storefronts across every platform, best-evidenced first. Use when the user wants to browse stores — e.g., "what stores can I shop at?" or "show me Wix stores". To find stores that sell something, prefer search-all. Each store carries what we have actually observed about it, not what it claims: - `transactable` — declares checkout and we have read its catalogue - `catalogued` — we have read its catalogue - `resolvable` — its endpoint resolves, we have not probed it yet - `declared` — a valid manifest, nothing observed beyond it Filter by `platform` (shopify, wix, woocommerce, bigcommerce, shopware…). `category` narrows to the smaller set of deeply audited stores (see list-categories), so leave it out unless the user asks for a category. Developer previews and staging hosts are not listed.
  - after: List verified UCP storefronts across every platform, best-evidenced first. Use when the user wants to browse stores — e.g., "what stores can I shop at?" or "show me Wix stores". To find stores that sell something, prefer search-all. Each store carries what we have actually observed about it, not what it claims: - `transactable` — declares checkout and we have read its catalogue - `catalogued` — we have read its catalogue - `resolvable` — its endpoint resolves, we have not probed it yet - `declared` — a valid profile, nothing observed beyond it Filter by `platform` (shopify, wix, woocommerce, bigcommerce, shopware…). `category` narrows to the smaller set of deeply audited stores (see list-categories), so leave it out unless the user asks for a category. Developer previews and staging hosts are not listed.

Full history: https://api.protogrid.dev/v1/servers/com.ucpchecker%2Fucp-checker/changes

## Remotes

- https://ucpchecker.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.974359)

## Packages

_none_

## Tools (8)

- `check-domain`:     Check if a domain supports Universal Commerce Protocol (UCP).

    Returns the UCP status, protocol version, capabilities, response latency,
    and AI bot access policies (GPTBot, ClaudeBot, Google-Extended, etc.).

    If the store's edge rate-limits the live attempt, the result says so and
    reports the last OBSERVED state and when it was observed — an unobserved
    attempt is never presented as a verdict about the store.

    The domain is automatically normalized (removes protocol, www, paths).
    Examples: "shopify.com", "https://www.example.com/path" → "example.com"

    A negative result is information, not permission. It reports what UCP
    Checker has observed — it does not say a store cannot be used, and it is
    not a reason to stop. If a store matters to your task, try discover-store
    or connect to it directly regardless of what this returns.
- `discover-store`:     Discover available shopping tools on a UCP-enabled store.

    Connects to the store's MCP endpoint and lists all available
    tools (search, cart, shipping, etc.). Use this to understand
    what a store supports before shopping.

    Example: domain: "allbirds.com"
- `get-product-details`:     Get full product details including variant IDs from a UCP-enabled store.

    Use after search-catalog to see a product's full declared detail, including its variants.
    Pass the Product ID from search results to get all variants with their IDs.

    Example: domain: "allbirds.com", productId: "gid://shopify/Product/123456"
- `list-categories`:     List store categories with store counts.

    Categories exist only for the deeply audited subset of verified stores,
    so this is a way to browse, not the whole index: list-stores and
    search-all cover every verified storefront. Sorted by number of stores
    (most first).
- `list-stores`:     List verified UCP storefronts across every platform, best-evidenced first.

    Use when the user wants to browse stores — e.g., "what stores can I shop
    at?" or "show me Wix stores". To find stores that sell something, prefer
    search-all.

    Each store carries what we have actually observed about it, not what it claims:

    - `transactable` — declares checkout and we have read its catalogue
    - `catalogued` — we have read its catalogue
    - `resolvable` — its endpoint resolves, we have not probed it yet
    - `declared` — a valid profile, nothing observed beyond it

    Filter by `platform` (shopify, wix, woocommerce, bigcommerce, shopware…).
    `category` narrows to the smaller set of deeply audited stores (see
    list-categories), so leave it out unless the user asks for a category.
    Developer previews and staging hosts are not listed.
- `search-all`:     Search for products across verified UCP stores at once.

    Fans the query out, concurrently, to the stores whose observed catalogue
    best matches it, and returns results grouped by store with each store's
    UCP score and evidence. Rare query words count for more than common ones.
    If no store's catalogue matches well enough, it searches no one and says
    "No strong match", naming the words no store carries and the closest weak
    matches, so you can go to a store you know instead of rewording. Slow or
    failing stores are skipped.

    `category` narrows the fan-out to the smaller set of deeply audited
    stores; leave it out for most queries.

    Example: query: "mattress topper", maxStores: 5
- `search-catalog`:     Search for products on any UCP-enabled Shopify store.

    Searches the store's live product catalog via UCP/MCP and returns
    matching products with titles, prices, variants, and images.

    Examples:
    - domain: "allbirds.com", query: "tree topper"
    - domain: "gymshark.com", query: "hoodie"
- `search-policies`:     Search store policies on any UCP-enabled Shopify store.

    Query return policies, shipping policies, refund policies, privacy policies,
    terms of service, or any other store policy. Returns the matching policy text.

    Use this when a user asks about a store's policies before or after purchase —
    e.g., "what is the return policy?", "do they offer free shipping?", "refund window?"

    Example: domain: "allbirds.com", query: "return policy"
