BCP

Endpoint conventions

What each endpoint slot in the capabilities and commerce blocks means, what shape its responses take, and what auth and scope conventions apply. The manifest never describes the endpoint's internals - that is the linked protocol's job. It just declares where the endpoint lives and what scopes it exposes.

Updated today

Endpoint slots in the manifest

Every slot's purpose at a glance.

SlotBlockProtocolRequired?
mcpServers[]capabilitiesMCPRecommended
a2aAgentCards[]capabilitiesA2ANo
nlwebEndpointcapabilitiesNLWebNo
openApicapabilitiesOpenAPI 3.xNo
clicapabilities-No
catalogcommerceUCP / Schema.orgOnly for commercial entities
paymentRails[]commerceAP2, ACP, x402Only for commercial entities
incidentWebhookstateWebhookNo
statusPagestate-No
Note
The manifest is a directory. Each slot points at where the actual capability lives. The schema and conventions of the target endpoint are owned by the respective protocol, not by BCP.

MCP servers

The most important slot. Where tools, resources and prompts live.

Why MCP comes first

The chat v2 loop is the most common consumer of BCP manifests. When an Ultron agent reads a peer company's manifest, the first thing it looks for is an MCP server URL it can connect to. That URL becomes the entry point for every subsequent action.

Multiple servers

A company may expose multiple MCP servers, e.g. a public read-only catalog server and an authenticated write server. List them as separate entries inmcpServers. Consumers pick the one whose scopes match what they need.

multi-server examplejson
1{
2 "capabilities": {
3 "mcpServers": [
4 {
5 "url": "https://api.acme.com/mcp/public",
6 "transport": "http",
7 "auth": ["none"],
8 "scopes": ["catalog.read", "pricing.read"],
9 "label": "Public read surface"
10 },
11 {
12 "url": "https://api.acme.com/mcp/private",
13 "transport": "http",
14 "auth": ["oauth2"],
15 "scopes": ["bookings.write", "leads.create", "agreements.sign"],
16 "label": "Authenticated write surface"
17 }
18 ]
19 }
20}

OAuth metadata

When auth includesoauth2, the MCP server must host/.well-known/oauth-authorization-serverper RFC 8414. The BCP manifest does not duplicate that metadata - consumers fetch it from the standard well-known path on the MCP server's host.

A2A agent cards

One URL per agent card. Each card describes one agent.

A BCP manifest describes a company. An A2A agent card describes one agent. When the company runs multiple agents (sales bot, support bot, billing bot), each gets its own agent card and they are all listed ina2aAgentCards.

The agent card URL is alwayshttps://<host>/.well-known/agent.jsonper A2A's RFC 8615 convention. The manifest carries the full URL - consumers do not need to derive it.

a2a examplejson
1{
2 "capabilities": {
3 "a2aAgentCards": [
4 "https://sales.acme.com/.well-known/agent.json",
5 "https://support.acme.com/.well-known/agent.json",
6 "https://billing.acme.com/.well-known/agent.json"
7 ]
8 }
9}

AP2 payments

Where to submit signed payment mandates.

AP2 (Agent Payments Protocol, Google + Mastercard + American Express + Coinbase + PayPal + Adyen + Worldpay) is the broadest payment protocol in the agentic stack. AP2 sits as an extension over A2A and MCP, using three "Mandates" (Intent, Cart, Payment) as W3C Verifiable Credentials. The BCP manifest exposes the AP2 endpoint URL plus the accepted instruments.

ap2 examplejson
1{
2 "commerce": {
3 "paymentRails": [
4 {
5 "protocol": "AP2",
6 "endpoint": "https://api.acme.com/ap2",
7 "instruments": ["card", "ach", "sepa"]
8 },
9 {
10 "protocol": "x402",
11 "endpoint": "https://api.acme.com/x402",
12 "instruments": ["stablecoin:USDC", "stablecoin:EURC"]
13 }
14 ]
15 }
16}
Note
ACP (Agentic Commerce Protocol, OpenAI + Stripe) is also accepted as a payment-rail protocol value. UCP (Universal Commerce Protocol, Shopify + Google) covers a broader discovery-to-post-purchase lifecycle; if the publisher supports UCP, the catalog slot below is where it surfaces.

Catalog (UCP)

A queryable product / service catalog endpoint.

The catalog endpoint returns a UCP-compatible product feed or Schema.org-typed product list. Used by agents to answer questions like "what do you sell" or "what tier should I buy for 5 users". The endpoint should support filtered queries; the exact query language is delegated to UCP.

catalog examplejson
1{
2 "commerce": {
3 "catalog": "https://api.acme.com/catalog",
4 "pricing": "https://acme.com/pricing",
5 "currencies": ["USD", "EUR"]
6 }
7}

NLWeb /ask

Natural-language query over the company's structured data.

NLWeb (Microsoft, R.V. Guha) exposes a single/ask endpoint that accepts a natural-language query and returns Schema.org-typed JSON. When a publisher operates a NLWeb instance, the BCP manifest links to it so consumers can use it for conversational queries without learning the publisher's internal API.

nlweb examplejson
1{
2 "capabilities": {
3 "nlwebEndpoint": "https://acme.com/api/ask"
4 }
5}
Note
NLWeb instances also expose an /mcpendpoint per their README. If a publisher runs NLWeb, they can either link to it from thenlwebEndpoint slot or from themcpServers array. Both are valid; the slots overlap by design because some consumers prefer one transport over the other.

OpenAPI

Traditional REST API spec, for consumers that prefer it.

OpenAPI 3.x is still the most widely understood machine- readable API description. The manifest can link to an OpenAPI spec for consumers that want to generate clients, test endpoints, or fall back from MCP / A2A to plain REST.

openapi examplejson
1{
2 "capabilities": {
3 "openApi": "https://api.acme.com/openapi.json"
4 }
5}

CLI install

Optional, but useful for developer-friendly publishers.

Some companies want their CLI to be discoverable from a BCP manifest. Thecli object declares the install command and the executable name; that is enough for a developer agent to fetch and run.

cli examplejson
1{
2 "capabilities": {
3 "cli": {
4 "install": "npm install -g @acme/cli",
5 "command": "acme",
6 "homepage": "https://acme.com/cli"
7 }
8 }
9}

Contact and booking endpoints

Where to send the human-style asks.

Not every action is a programmatic transaction. A consumer agent might want to submit a contact-form lead, request a sales call, or book a slot on a public calendar. These actions are surfaced as MCP tools under the public MCP server, with conventional scopes (see below) so consumers can find them deterministically.

At a glance
Lead submission
Scope leads.create on the public MCP server.
Sales call booking
Scope bookings.create on the public MCP server.
Contact form
Scope contact.send on the public MCP server.
Direct mail
Email address in state.supportContact.email. Plain SMTP target, no protocol.

Scope vocabulary

Conventional scope names every BCP-compliant MCP server should support.

BCP defines a small vocabulary of conventional scopes so consumer agents can search a target manifest'spolicy.allowActions list with deterministic strings. Publishers may add custom scopes beyond this list; consumers ignore scopes they do not recognise.

ScopeMeansRead or write
catalog.readRead product / service catalogread
pricing.readRead pricing tiers and pricesread
docs.readRead public documentationread
leads.createSubmit a new lead to the company's CRMwrite
leads.readRead leads the agent has previously created (auth required)read
bookings.createBook a slot on the company's calendarwrite
bookings.cancelCancel a previously-created bookingwrite
contact.sendSend a message via the company's contact formwrite
agreements.signCounter-sign agreements (auth required)write
billing.readRead billing state for the agent's own accountread
billing.writeModify billing statewrite
webhooks.subscribeSubscribe to eventswrite
Tip
The scope vocabulary is intentionally small. If a publisher needs a scope not listed here, they namespace it (acme.specialAction). The unprefixed names above are reserved for the spec.