1. Abstract
Expose a valid Universal Commerce Protocol business profile when this origin supports agentic commerce workflows.
UCP discovery lets agents identify commerce capabilities, service transports, payment handlers, and signing keys without scraping human checkout flows.
2. Classification
- Check ID
- ucp
- Check version
- 1.0.0
- Package path
- lib/checks/ucp/versions/1.0.0
- Category
- Agent Ease of Use
- Subcategory
- Agent Commerce
- Check group
- Commerce Protocols
- Check group ID
- commerce-protocols
- Maturity
- Informational
- Scope
- site
- Check weight
- 1
3. Input And Output Contracts
- Input
- [email protected]
- Output
- [email protected]
- Resources inspected
- /.well-known/ucp, UCP-Agent, Signature-Input, Signature, Content-Digest
4. Scoring Semantics
| Step ID | Title | Weight | Description |
|---|---|---|---|
applicability | Decide whether UCP applies | 0.1 | Detect UCP, agentic-commerce, or /.well-known/ucp profile signals. |
profile-fetch | Fetch UCP profile | 0.15 | Fetch /.well-known/ucp and validate status, content type, and JSON parseability. |
profile-shape | Validate UCP profile shape | 0.2 | Validate top-level ucp metadata, protocol version, services, payment handlers, and supported versions. |
services | Validate UCP services | 0.15 | Validate service namespaces, required fields, transports, endpoints, and schema URLs. |
capabilities | Validate UCP capabilities | 0.15 | Validate capability namespaces, required spec/schema URLs, and extension parent references. |
payment-handlers | Validate UCP payment handlers | 0.1 | Validate payment handler declarations, spec/schema metadata, and available instruments. |
signing-keys | Validate UCP signing keys | 0.05 | Validate public JWK-like signing keys when present. |
security-review | Review UCP metadata safety | 0.1 | Flag secrets, raw payment data, private endpoints, and unsafe URL schemes. |
5. Package Documentation
UCP Check v1.0.0
Status
- Version:
1.0.0 - Check identifier:
ucp - Input contract:
[email protected] - Output contract:
[email protected] - Scope: site-level Universal Commerce Protocol business profile discovery
Abstract
This check validates the public UCP business profile at /.well-known/ucp. It inspects profile shape, services, capabilities, payment handlers, signing keys, and metadata safety. It does not execute checkout, acquire payment credentials, assert a UCP-Agent profile, or verify live HTTP signatures.
Motivation
UCP lets commerce businesses publish machine-readable capabilities and transport bindings for agentic commerce. A valid profile lets agents discover supported services, payment handlers, and verification keys without scraping human checkout flows.
Normative Model
A UCP business profile is JSON served from /.well-known/ucp.
The document should include a top-level ucp object. The profile model includes:
ucp.versionucp.supported_versionsucp.servicesucp.capabilitiesucp.payment_handlers- top-level
signing_keys
The draft profile shape requires ucp.version, ucp.services, and ucp.payment_handlers. ucp.capabilities is optional unless the site claims specific UCP capabilities, extensions, or agentic commerce workflows that should be represented there.
Applicability
The check applies when:
/.well-known/ucpexists.- the page, headers, docs, or metadata mention Universal Commerce Protocol, UCP,
/.well-known/ucp,UCP-Agent, ordev.ucp.*. - the site advertises agentic commerce, autonomous checkout, UCP checkout/cart/catalog/order workflows, or UCP payment handlers.
The check is not applicable when no UCP or agentic-commerce signal is visible. Ordinary human checkout or unrelated payment metadata is not enough by itself.
Pass Criteria
The check passes when:
/.well-known/ucpreturns HTTP 2xx.- the response is JSON-compatible and parseable.
- the profile has a top-level
ucpobject. ucp.versionis present.ucp.servicesis object-shaped.ucp.payment_handlersis object-shaped.- service entries use reverse-domain namespaces.
- service entries declare
version,spec, and recognizedtransport. - REST, MCP, and embedded services declare schema metadata.
- declared URLs use HTTPS.
- capability entries, when present, declare
version,spec, andschema. dev.ucp.*capabilityspecandschemaURLs point toucp.dev.- signing keys, when present, are public JWK-like entries without private material.
- public profile metadata does not expose secrets, raw payment data, or private endpoints.
Warning Criteria
The check warns when:
- UCP-like or agentic-commerce signals exist, but active UCP support is not clearly claimed and
/.well-known/ucpis missing. ucp.capabilitiesis absent even though the site claims specific UCP capabilities, extensions, or agentic commerce workflows.- a service is declared without an endpoint.
- an endpoint has a trailing slash.
- a stable deployment uses
"draft"as the profile version. - payment handler entries omit useful optional metadata such as available instruments or config.
- payment handler
available_instrumentsentries are present but not string or object-shaped declarations. - signing keys are absent while signed webhooks or signed order/payment flows are advertised.
A valid minimal profile is not warned solely because ucp.capabilities is absent.
Failure Criteria
The check fails when:
- active UCP support is explicitly claimed, but
/.well-known/ucpis missing, unreachable, non-JSON, or malformed. - the profile lacks a top-level
ucpobject. ucp.versionis missing.ucp.servicesis missing or not an object.ucp.payment_handlersis missing or not an object.- service entries omit required fields.
- service transports are outside
rest,mcp,a2a, orembedded. - REST, MCP, or embedded service entries omit required schema metadata.
- profile URLs use non-HTTPS schemes.
- capability names do not use reverse-domain naming.
dev.ucp.*capabilityspecorschemaURLs do not point toucp.dev.- public metadata leaks credentials, private keys, raw payment card-like data, bearer tokens, localhost/private-network URLs, or unsafe endpoints.
Evidence Model
Evidence includes:
- applicability signals
/.well-known/ucpstatus, content type, and parse stateucp.version- stable or draft version classification
supported_versionscount and URL validation- service count and transport counts
- service namespace, transport, endpoint, spec, and schema summaries
- capability count and extension counts
- payment handler count, available instrument counts, and declared instrument types
- signing key count and public JWK shape summary
- security flags for secrets, raw payment data, private endpoints, or unsafe URLs
Evidence must not include full profile bodies, payment credentials, raw card data, bearer tokens, private keys, cookies, or full signing key coordinates.
Validation And Scoring Steps
applicability(0.10): detect UCP or agentic-commerce signals.profile-fetch(0.15): fetch/.well-known/ucpand validate status, content type, and JSON parseability.profile-shape(0.20): validate top-levelucp, version, services, payment handlers, and supported versions.services(0.15): validate service namespaces, required fields, transports, endpoints, and schema URLs.capabilities(0.15): validate capability namespaces, required fields, URLs, and extension references.payment-handlers(0.10): validate payment handler metadata and declared available instruments or config.signing-keys(0.05): validate public JWK-like signing keys when present.security-review(0.10): flag credentials, raw payment data, private endpoints, and unsafe URL schemes.
Standard Behavior
If no UCP or agentic-commerce signal is visible, the result is not_applicable.
If UCP-like signals are visible but active UCP support is not clearly claimed and /.well-known/ucp is missing, the result is warning.
If active UCP support is explicitly claimed and /.well-known/ucp is missing, unreachable, non-JSON, or malformed, the result is fail.
If /.well-known/ucp exists and has a valid UCP profile shape, the result passes discovery validation.
If the profile is valid but incomplete for claimed workflows, the result warns.
If the profile is malformed or unsafe, the result fails.
Non-Standard And Real-World Behavior
Stable UCP profiles use date-based versions such as YYYY-MM-DD. Draft deployments may use "draft" while testing draft capabilities.
Deployments may expose only one transport family, such as REST, MCP, A2A, or embedded. A single-transport profile can pass when its declarations are internally consistent.
Some UCP behavior happens during runtime negotiation. This check validates public discovery only.
Payment handler validation is static. It records declared payment forms from available_instruments and handler metadata, but it does not prove the business can complete a live payment or that a handler will authorize a real checkout.
Non-Goals And Limitations
This check does not:
- execute checkout
- acquire or submit payment credentials
- prove live payment acceptance or settlement
- send
UCP-Agent - verify live HTTP signatures
- fetch every schema
- validate every OpenAPI, OpenRPC, A2A, or MCP detail
- validate AP2 mandates or payment provider token formats
- treat ordinary human checkout as UCP support
- treat x402, MPP, ACP, or generic payment metadata as UCP support
References
Source: lib/checks/ucp/versions/1.0.0/docs.md
6. Version Changelog
ucp v1.0.0 Changelog
- Validates
/.well-known/ucpas a UCP business profile with a top-levelucpobject. - Checks profile version, services, payment handlers, optional capabilities, supported versions, and signing keys.
- Treats absent optional capabilities as acceptable unless specific UCP workflows or extensions are claimed.
- Distinguishes UCP evidence from ordinary human checkout and unrelated payment protocol metadata.
- Flags unsafe public profile metadata such as secrets, private endpoints, private key material, and raw payment card-like data.
Source: lib/checks/ucp/versions/1.0.0/changelog.md