UCP profile builder and validator
Write the profile an agent reads at /.well-known/ucp and see whether the schema accepts it.
A UCP profile builder, checked against the 2026-08-25 schema in this page
Filled in with an invented store to start. Change the addresses and choices to yours; the profile and its checks update as you type.
Where agents reach you
Leave an address empty if you do not offer that service.
Capabilities your store offers agents
Payment handler
Signing keys
Pick “Paste a public key” to type one here.
Sources: UCP 2026-08-25: specification overview, UCP 2026-08-25: profile.json, Google Pay: UCP payment handler 2026-01-11 and RFC 8037, Appendix A (example Ed25519 key)
ucp.json65 lines, served at /.well-known/ucp
{
"ucp": {
"version": "2026-08-25",
"services": {
"dev.ucp.shopping": [
{
"version": "2026-08-25",
"spec": "https://ucp.dev/2026-08-25/specification/overview/",
"transport": "mcp",
"endpoint": "https://northwind-linen.example.com/api/ucp/mcp",
"schema": "https://ucp.dev/2026-08-25/services/shopping/mcp.openrpc.json"
}
]
},
"capabilities": {
"dev.ucp.shopping.checkout": [
{
"version": "2026-08-25",
"spec": "https://ucp.dev/2026-08-25/specification/shopping/checkout/",
"schema": "https://ucp.dev/2026-08-25/schemas/shopping/checkout.json"
}
],
"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"
}
],
"dev.ucp.shopping.catalog.search": [
{
"version": "2026-08-25",
"spec": "https://ucp.dev/2026-08-25/specification/shopping/catalog/",
"schema": "https://ucp.dev/2026-08-25/schemas/shopping/catalog_search.json"
}
],
"dev.ucp.shopping.catalog.lookup": [
{
"version": "2026-08-25",
"spec": "https://ucp.dev/2026-08-25/specification/shopping/catalog/",
"schema": "https://ucp.dev/2026-08-25/schemas/shopping/catalog_lookup.json"
}
]
},
"payment_handlers": {
"com.google.pay": [
{
"id": "gpay",
"version": "2026-01-11",
"spec": "https://pay.google.com/gp/p/ucp/2026-01-11/",
"schema": "https://pay.google.com/gp/p/ucp/2026-01-11/schemas/config.json"
}
]
}
},
"keys": [
{
"kid": "kPrK_qmxVWaYVA9wwBF6Iuo3vVzz7TxHCTwXBygrS4k",
"kty": "OKP",
"crv": "Ed25519",
"alg": "EdDSA",
"x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"
}
]
}Against the UCP 2026-08-25 business profile schemaVALID
No errors.
What our UCP checks would say (ours)
- Passes: DISC-018 PASS valid, with no warnings
- Passes: DISC-019 PASS 2026-08-25 is a known release
- Passes: DISC-020 PASS 1 service entry, well formed
- Passes: DISC-021 PASS 83 checkout, catalog, cart declared; missing order
- Passes: TRX-011 PASS 1 payment handler, with an id and a version
- Passes: TRX-012 PASS 1 well-formed public key
Before you publish0 of 1 met
- Worth fixing: Google Pay’s own schema requires a config (api_version, api_version_minor, merchant_info, allowed_payment_methods) from your Google Pay setup; add it before you publish
Check the rest of your store.
Free, no account, about five minutes.
What the builder does
Enter your MCP server or REST API address, pick the capabilities your store offers agents and a payment handler, and the builder writes a UCP profile for /.well-known/ucp. It checks the draft against the UCP 2026-08-25 business profile schema in this page, with the same schema files our scan uses, so a draft that is valid here is valid to our schema check too. Beside the schema result it shows what our UCP checks would say. The addresses it starts with belong to an invented store; replace them with yours.
What a profile needs
The spec requires three members: ucp.version, ucp.services and ucp.payment_handlers, and the services and payment handler lists must be there even when they are empty. Capabilities are optional, though a store profile without one tells an agent very little. An MCP or REST endpoint needs an https address and should have no trailing slash. Signing keys, if you publish them, go in a top-level keys array. A Google Pay handler also needs config fields from your Google Pay setup, which the builder leaves to you.
How to serve it
Serve the file over HTTPS at /.well-known/ucp, with no redirect and a Cache-Control header that is public with a max-age of at least 60 seconds. The spec tells agents not to follow redirects, so a profile behind one is, to a strict agent, no profile at all. On Shopify the platform publishes a profile for you. Elsewhere you write the file, host it, and keep it in step with what your store really offers, which is less fun than writing it but matters more.
Limits
The builder knows the 2026-08-25 schema only, so it does not judge a profile written for an older release, such as the 2026-04-08 one the WooCommerce AI plugin advertises. It cannot see your server either: the guide has a check for the headers you send and a robots.txt test for the profile’s path. The builder and the schema check run in your browser, and nothing you type is sent.
Frequently asked questions
Where does a UCP profile go?
At /.well-known/ucp on your store’s domain, served over HTTPS with no redirect.
Does Shopify publish a UCP profile for me?
Yes. Shopify storefronts advertise UCP version 2026-08-25 in their profiles at /.well-known/ucp. On Shopify, what stays yours is making sure robots.txt lets agents reach it.
Which members does a UCP profile require?
ucp.version, ucp.services and ucp.payment_handlers. The services and payment handler registries must be present even when they are empty.
Is the profile I build sent anywhere?
No. The builder and the schema check run in your browser.
The full guide
How to publish a UCP profile, step by step
What goes in a UCP profile at /.well-known/ucp, how to serve it and let agents reach it, with a builder that checks your draft against the 2026-08-25 schema.