UCP Checker
UCP Score

UCP Score for decentralegends.com

Ready for UCP agents

86 out of 100, grade A: ready for UCP agents. The missing 14 points are spread across Discovery and Conformance and Capabilities.

Discovery 85Conformance 83Capabilities 90release 2026-01-23

How the score is made

three areas, weighted
Discovery 30%
Can a UCP agent find and read the profile: HTTPS, an answer at /.well-known/ucp, robots.txt allowing it, and five files outside UCP (llms.txt, sitemap, Open Graph, Organization schema, viewport).
85−4.5 pts
Conformance 40%
Does the profile follow the spec: valid against its release (counted three times), a dated release, keys published, few warnings, spec and schema links that resolve.
83−6.8 pts
Capabilities 30%
What an agent can do here: how many capabilities, checkout, at least one service, payment handlers, and services that answer our check.
90−3 pts
A85–100Ready for UCP agents
B70–84Nearly there
C50–69Partly ready
D30–49Hard for UCP agents
F0–29Not ready

Raise the score

fixes that move the number
part of +7
1Flatten payment.handlers to ucp.payment_handlers
Payment handlers are nested under a root "payment" object.
Older Shopify-managed profiles used payment.handlers. Spec v2026-04-08 canonicalized to ucp.payment_handlers.
Conformance · effort low
{
  "ucp": {
    "payment_handlers": {
      "com.example.pay": [...]
    }
  }
}
part of +7
2Name capabilities the way the spec does
A capability is not named in the spec's dotted form (e.g. dev.ucp.shopping.checkout).
Capabilities are named like reversed web addresses so that names never collide: "checkout" is ambiguous; "dev.ucp.shopping.checkout" is not.
Conformance · effort low
"capabilities": {
  "dev.ucp.shopping.checkout": [...]
}
part of +7
3Name payment handlers the way the spec does
A payment handler is not named in the spec's dotted form (e.g. com.google.pay).
Handlers are named like reversed web addresses (com.google.pay, com.stripe.terminal) so every store declaring the same payment method names it the same way, and an agent can recognise it.
Conformance · effort low
"payment_handlers": {
  "com.google.pay": [...]
}
part of +7
4Publish the public keys agents use to check your messages
Your UCP profile lists no public keys, so an agent cannot confirm that a message really came from your store.
Agents use these keys to check that checkout messages really came from you. A store that takes payment through the agent needs them. A store that sends the buyer to its own checkout page can manage without them for now.
Conformance · effort medium
{
  "keys": [
    {
      "kty": "EC",
      "crv": "P-256",
      "x": "<base64url x>",
      "y": "<base64url y>",
      "kid": "store-2026-10",
      "use": "sig",
      "alg": "ES256"
    }
  ],
  "ucp": { ... }
}

Create a P-256 (ES256) key pair: ES256 is the one algorithm every UCP agent must be able to check. Add the public key to a "keys" list at the top level of your UCP profile, as in the example, with its own "kid", and keep the private key on your server. The spec recommends a new key every 90 days: publish the new one next to the old, sign with it, and remove the old key a week later.

part of +5
5Publish Organization schema (JSON-LD) on the homepage
No Organization-typed JSON-LD detected on your homepage.
Organization schema gives agents a structured representation of your brand identity: name, logo, social profiles, contact info, founding date. Agents use this to verify you are who you claim to be and to link your profile data to a recognizable entity.
Discovery · effort medium
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "OnlineStore",
  "name": "Yourstore",
  "url": "https://yourstore.com",
  "logo": "https://yourstore.com/logo.png",
  "sameAs": [
    "https://twitter.com/yourstore",
    "https://www.instagram.com/yourstore"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-800-000-0000",
    "contactType": "Customer Service"
  }
}
</script>

Drop into <head> or end of <body>. Use OnlineStore (more specific) when the entire site is an ecommerce store; Organization is the generic fallback.

part of +7
6Move to the latest UCP protocol version
Your profile declares a valid but older protocol version. A newer one is published.
Older versions stay valid (agents use the version you declare), but newer abilities (embedded checkout, agent payment mandates, linked customer accounts, card authentication, payment terms and store location lookup) only work against the latest version. The profile itself barely changes: the signing keys move to a root-level "keys" list, and the rest of the update is in what capabilities can say.
Conformance · effort low
"ucp": {
  "version": "2026-08-25",
  ...
},
"keys": [ ... ]   // beside "ucp", not inside it

Set the version to 2026-08-25 and publish your public keys as a root-level "keys" list. The older "signing_keys" field is still accepted, but "keys" is the one every verifier reads.

part of +5
7Publish a sitemap.xml
No sitemap.xml detected at the root of your domain.
Sitemaps tell agents and crawlers which pages on your store are canonical and how often they change. Without one, agents fall back to following internal links, which is slower and less complete, especially for catalog pages buried behind faceted nav.
Discovery · effort low
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://yourstore.com/</loc>
    <changefreq>daily</changefreq>
  </url>
  <url>
    <loc>https://yourstore.com/products</loc>
    <changefreq>daily</changefreq>
  </url>
  <!-- one <url> entry per indexable page -->
</urlset>

Most ecommerce platforms generate sitemap.xml automatically. If yours does not, generate one and serve it at /sitemap.xml.

part of +5
8Add Open Graph meta tags to the homepage
OG tags missing or incomplete on your homepage.
OG tags give agents and link unfurlers (Slack, iMessage, ChatGPT) a clean title, description, and image to represent your store. Without them, shares show garbled fallback text.
Discovery · effort low
<meta property="og:title" content="Yourstore | short tagline">
<meta property="og:type" content="website">
<meta property="og:url" content="https://yourstore.com/">
<meta property="og:description" content="One-sentence description of what you sell.">
<meta property="og:image" content="https://yourstore.com/og-cover.jpg">
<meta property="og:site_name" content="Yourstore">

Add inside <head>. og:title and og:type are the minimum; og:url, og:description, and og:image are strongly recommended.

part of +7
9Publish handler request schema
A payment handler is missing its "schema" URL.
Schema URL points to the JSON Schema for token requests. Agents validate request shape before submitting.
Conformance · effort medium
"schema": "https://yourstore.com/.well-known/ucp/schemas/payment.json"

Every check

12 passed · 7 to fix
Agent Discovery · 5 of 8
5 OK
HTTPS, UCP profile reachable, AI bot access, llms.txt, Mobile viewport metaShow
  • HTTPS · Profile URL uses https://
  • UCP profile reachable · HTTP 200
  • AI bot access · robots.txt allows /.well-known/ucp
  • llms.txt · Found at /llms.txt
  • Mobile viewport meta · <meta name="viewport"> present
Problem
sitemap.xml
HTTP 404 at /sitemap.xml. Fix 7 above.
Discovery
Problem
Open Graph tags
Missing or incomplete on homepage. Fix 8 above.
Discovery
Problem
Organization schema (JSON-LD)
Missing or incomplete on homepage. Fix 5 above.
Discovery
UCP Conformance · 3 of 5
3 OK
Profile passes schema validation, Protocol version present and well-formed, Spec/schema URL resolvesShow
  • Profile passes schema validation · No structural errors
  • Protocol version present and well-formed · Version: 2026-01-23
  • Spec/schema URL resolves · All 1 URLs resolved.
To fix
Public keys published
No keys list at the top level of the profile. Fix 4 above.
Conformance
Problem
No validation warnings
8 warnings.
Conformance
Capability Coverage · 4 of 6
4 OK
Capabilities declared, Checkout capability, Transports declared, A2A transport reachableShow
  • Capabilities declared · 3 of 6 capability families detected: Checkout, Order Management, Catalog. A family counts once however many namespaces or extensions declare it.
  • Checkout capability · dev.ucp.shopping.checkout detected
  • Transports declared · REST, A2A
  • A2A transport reachable · Reachable in 1155ms (HTTP 200)
To fix
Payment handlers
2 handlers declared, not named the way the spec expects (e.g. com.google.pay), so agents cannot look them up.
Capabilities
To fix
REST transport reachable
Host responded with HTTP 404 — endpoint reachable but path may be method-restricted.
Capabilities

Files for agents

outside UCP · not part of the UCP Score

Files decentralegends.com publishes for agents beyond its UCP profile, from our weekly look. Only what we found is listed.

Found
A2A agent card /.well-known/agent-card.json
Describes the store's own agent, for agent-to-agent calls.
9 Oct
/.well-known/agent-card.json as served 2.5 KB
{"capabilities":{"extendedAgentCard":false,"extensions":[{"description":"Business Storekeeper agent supporting pinned UCP shopping data.","params":{"capabilities":{"dev.ucp.shopping.catalog":[{"version":"2026-01-23"}],"dev.ucp.shopping.checkout":[{"version":"2026-01-23"}],"dev.ucp.shopping.order":[{"version":"2026-01-23"}]}},"required":true,"uri":"https://ucp.dev/2026-01-23/specification/reference"}],"pushNotifications":false,"streaming":false},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["application/json","text/plain"],"description":"A session-scoped commerce agent for catalog, cart, checkout, order, and policy tasks.","documentationUrl":"https://decentralegends.com/llms.txt","name":"Decentra Legends Storekeeper","provider":{"organization":"Decentra Legends","url":"https://decentralegends.com"},"securitySchemes":{"shoppingSession":{"apiKeySecurityScheme":{"description":"Optional for the first valid send-message request, which returns this opaque guest credential. Required on all later A2A requests.","location":"header","name":"x-shopping-session-token"}}},"skills":[{"description":"Search products with signed and return-policy facts, choose exact variants, manage one cart, prepare checkout, read orders, and request a human handoff. Payment handlers and their binding-specific instrument schemas are advertised in UCP discovery. For the internal staging handler, use its ACP delegated-payment URL, then follow https://decentralegends.com/ucp/schemas/staging-card-a2a-instrument.json and send complete_checkout with credential type PAYMENT_GATEWAY and the returned vt_dl_ token in a UCP payment part. The Visa Acceptance handler instead accepts its advertised standard network-token instrument through the same complete_checkout action. ACP instrument schemas do not apply to A2A. Keep the same shopping-session token and A2A context ID.","examples":["Search for a San Francisco jersey","Show my cart","Add this exact size and color","Complete checkout with a delegated staging-payment token"],"id":"storekeeper-commerce","inputModes":["text/plain","application/json"],"name":"Storekeeper commerce","outputModes":["application/json","text/plain"],"tags":["commerce","catalog","cart","checkout","payment","orders","ucp"]}],"supportedInterfaces":[{"protocolBinding":"HTTP+JSON","protocolVersion":"1.0","url":"https://decentralegends.com/a2a"},{"protocolBinding":"JSONRPC","protocolVersion":"0.3","url":"https://decentralegends.com/a2a/jsonrpc"}],"version":"1.0.0"}
Speed among Custom stores
The profile answered in 288 ms, faster than 64% of the Custom stores we check.