UCP Score for shop.bulletproof.com
91 out of 100, grade A: ready for UCP agents. The missing 9 points are spread across Discovery and Conformance. One spec break on the status page isn't counted in the score.
Discovery 80Conformance 93Capabilities 100release 2026-08-25
{
"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.
<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.
<?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.
<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.
<meta name="viewport" content="width=device-width, initial-scale=1">
One line inside <head>. Modern frontend frameworks add this automatically; its absence usually means a hand-rolled or legacy template.
HTTPS, UCP profile reachable, AI bot access, llms.txtShow
- 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
Profile passes schema validation, Protocol version present and well-formed, No validation warnings, Spec & schema URLs resolve (29)Show
- Profile passes schema validation · No structural errors
- Protocol version present and well-formed · Version: 2026-08-25
- No validation warnings · No outstanding validation issues
- Spec & schema URLs resolve (29) · All 29 URLs resolved.
Capabilities declared, Checkout capability, Transports declared, Payment handlers, MCP transport reachableShow
- Capabilities declared · 5 of 6 capability families detected: Checkout, Identity Linking, Cart Management, Order Management, Catalog. A family counts once however many namespaces or extensions declare it.
- Checkout capability · dev.ucp.shopping.checkout detected
- Transports declared · MCP, Embedded
- Payment handlers · 3 handlers registered
- MCP transport reachable · tools/list returned a JSON-RPC response in 178ms
The score measures what the profile declares across the three areas above. These break a rule in the spec that agents follow, so they can stop an agent before the score matters.
