Supported protocols

Every protocol, explained twice.

Agents reach the gateway over four transports — MCP, HTTP, A2A and ACP. Money moves over x402, and AP2 can additionally require proof that a human approved the purchase. Read each one in plain words or in full technical detail.

Every protocol is explained twice — technically and in plain words. Switch them all at once, or flip any block on its own.

At a glance

ProtocolLayerStatusPinned revisionWhere
MCPtransportSupported@modelcontextprotocol/[email protected]/mcp
HTTPtransportSupportednative routes/api/resources/{id}/invoke
A2AtransportExperimentalv1.0.0, JSON-RPC/a2a
ACPcheckout transportExperimental2026-04-17/acp
x402paymentSupportedv2, exact, EVMheaders or _payment
AP2authorizationExperimentalv0.2.0, Direct modeAgent-Authorization or _authorization
UCP · MPPPlannedno code ships

How they fit together

The whole picture

Think of the gateway as a shop front with several doors. HTTP, MCP, A2A and ACP are the doors — different ways for an agent to walk in and ask for something. Whichever door it uses, the same cashier handles the sale: x402 is how the agent pays, and AP2, when you ask for it, is the signed note proving a human approved the purchase. Your backend stays behind the counter and never has to learn any of these protocols.

text
  MCP        HTTP        A2A        ACP             agent transports
   │          │           │          │
   └──────────┴─────┬─────┴──────────┘
                    ▼
            ExecutionPipeline ──────────► your backend API
               │            │
               ▼            ▼
         AP2 mandate    x402 payment
        (who approved)  (who paid, how much, to whom)

MCP

Model Context ProtocolSupportedAgent transport@modelcontextprotocol/[email protected]
What MCP does

MCP is the standard way AI assistants find and use tools. The gateway lists each of your endpoints as a tool, with its price written in the description, so the assistant knows what it costs before it asks. When it calls a paid tool, it first gets the bill instead of the result — it pays, then calls the same tool again with the payment attached.

In this gateway

Endpoint/mcp
TransportStreamable HTTP
Methodstools/list, tools/call
Payment proof_payment
AP2 mandate_authorization
Buyer's receipt_meta["agent-commerce/delivery"]
Concurrency8 tool calls + a queue of 64, then GATEWAY_BUSY
Needs@modelcontextprotocol/sdk

The exchange

curl -s http://localhost:8080/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Not implemented

  • resources
  • prompts
  • sampling
  • completions
  • elicitation
  • roots
  • logging
  • notifications/tools/list_changed
  • tasks

Reference: MCP API · Example: Paid MCP tool


HTTP

Native resource routesSupportedAgent transport
What the HTTP surface does

The most ordinary way in: a normal web request. Anything that can call a URL — a script, a backend, an agent framework — can use your resources without learning an agent protocol. A free resource just answers. A paid one first answers “payment required” with the price, and the caller repeats the same request with the payment in a header.

In this gateway

InvokePOST /api/resources/{id}/invoke
DiscoveryGET /api/resources, GET /.well-known/agent-commerce
Payment proofPAYMENT-SIGNATURE
Settlement resultPAYMENT-RESPONSE
AP2 mandateAgent-Authorization
Authenticationnone — paid resources are protected by payment
Limits256 KB request body, 1 MB backend response

The exchange

POST /api/resources/market_report/invoke HTTP/1.1
content-type: application/json

{}
There is no rate limiting. A free resource is an unauthenticated proxy to your backend, so put quotas at your edge.

Reference: Invoke a resource


A2A

Agent2AgentExperimentalAgent transportv1.0.0 · JSONRPC · SendMessage
What A2A does

A2A is how agents work with other agents. The gateway introduces itself with a public business card — the Agent Card — listing what it can do; each of your resources is one “skill” on it. Another agent sends a single message naming the skill and the input, and gets back a finished task: either the result, or a bill to pay first.

In this gateway

Agent CardGET /.well-known/agent-card.json
EndpointPOST /a2a
Required headerA2A-Version: 1.0
Invocationone message, one data part { resource, input }
Payment / mandateinput._payment, input._authorization
Outcomesterminal tasks only — no task store
Enableprotocols.a2a.enabled: true
Needsnothing installed — the A2A SDK is a test-only dependency

The exchange

SendMessagejson
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "SendMessage",
  "params": {
    "message": {
      "role": "ROLE_USER",
      "messageId": "msg-1",
      "parts": [
        {
          "data": {
            "resource": "market_report",
            "input": { "_payment": "<base64 x402 payload>" }
          },
          "mediaType": "application/json"
        }
      ]
    }
  }
}

Not implemented

  • SendStreamingMessage
  • GetTask
  • ListTasks
  • CancelTask
  • SubscribeToTask
  • push notifications
  • GetExtendedAgentCard
  • HTTP+JSON binding
  • gRPC binding
  • task persistence
  • multi-turn continuation
  • A2A auth schemes

Reference: A2A API


ACP

Agentic Commerce ProtocolExperimentalCheckout transport2026-04-17 · REST
What ACP does

ACP is a standard checkout for agents: open a checkout, change it, look at it, complete the purchase or cancel it. The gateway speaks that standard to agents and passes each step to the checkout you already run. The buyer pays through your own checkout — the gateway does not take a second payment for these calls.

In this gateway

DiscoveryGET /.well-known/acp.json (public)
Checkout/acp/checkout_sessions…
AuthenticationAuthorization: Bearer
VersionAPI-Version: 2026-04-17
Idempotencystored answer on retry, 409 in flight, 422 on a different body
Servicescheckout
Enableprotocols.acp.enabled: true

The exchange

Create a checkout sessionbash
curl -s http://localhost:8080/acp/checkout_sessions \
  -H "Authorization: Bearer $ACP_BEARER_TOKEN" \
  -H "API-Version: 2026-04-17" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"line_items":[{"id":"item_123"}],"currency":"usd","capabilities":{}}'

Not implemented

  • carts
  • feed
  • orders
  • delegate_payment
  • delegate_authentication
  • ACP MCP binding
  • webhooks
  • client role
  • Signature verification
  • extensions
  • other API versions

Reference: ACP API · Example: ACP checkout


x402

HTTP 402 paymentsSupportedPayment railv2 · exact · EVM · EIP-3009
What x402 does

x402 puts the web's long-unused “402 Payment Required” answer to work. When an agent asks for something paid, the gateway replies with a price tag: how much, in which token, to which wallet. The agent signs a permission slip for exactly that amount to exactly your wallet and sends the request again with the slip attached. The money goes from the buyer straight to you — the gateway can check the slip, but it cannot redirect it.

In this gateway

Networkseip155:84532 (Base Sepolia, local), eip155:8453 (Base)
AssetUSDC, or MockUSDC on the local chain
Challenge402 + PAYMENT-REQUIRED, or the MCP envelope
ProofPAYMENT-SIGNATURE or _payment
Facilitatorlocal (dev chain only) or remote with none / bearer / cdp auth
Custodynone — buyer pays payTo directly
Needs@x402/[email protected] @x402/[email protected] viem

The exchange

 agent                      gateway                        facilitator / chain
   │ request, no proof        │                                  │
   ├─────────────────────────►│ price → PaymentRequirements      │
   │◄─────────────────────────┤ 402 + PAYMENT-REQUIRED           │
   │ sign EIP-3009:           │                                  │
   │ amount → payTo           │                                  │
   │ retry + proof            │                                  │
   ├─────────────────────────►│ verify, reserve replayKey        │
   │                          ├─────────────────────────────────►│ transferWithAuthorization
   │                          │◄─────────────────────────────────┤ tx hash
   │◄─────────────────────────┤ result + PAYMENT-RESPONSE        │

Not implemented

  • Solana / SVM
  • deferred scheme
  • upto scheme
  • Permit2
  • multi-asset routing
  • dynamic pricing

Guides: Accept payments · Handle a payment · Networks & facilitators


AP2

Agent Payments ProtocolExperimentalAuthorizationv0.2.0 · Direct mode · b4587ac
What AP2 does

AP2 answers a different question: did a person actually approve this purchase? Before the payment goes through, the agent shows a signed note from the buyer's side saying “yes — buy exactly this, at this price, from this shop”. The gateway checks the signature and that the note matches the purchase, and each note works only once. It never pays for anything by itself: the payment still has to happen.

In this gateway

CarrierAgent-Authorization (HTTP, ≤ 8192 bytes), _authorization (MCP, A2A)
Envelope{ "method": "ap2", "payload": "<SD-JWT>" }
Truststatic public keys; no JWKS, jku or x5u
Require itauthorization: { required: [ap2] }
Errors403 required / invalid, 409 replayed, 503 provider unavailable
Signing helpercreateCheckoutJwt (merchant side)
Needsjose @sd-jwt/core canonicalize

The exchange

{ "method": "ap2", "payload": "<the SD-JWT presentation>" }

Not implemented

  • autonomous mode
  • open mandates
  • intent / cart mandates
  • constraint evaluation
  • cnf-bound keys
  • JWKS / jku / x5u
  • algorithms other than ES256
  • mandate issuance
  • Checkout Receipts
  • AP2 over ACP

Guide: AP2 mandates


Planned: UCP · MPP

UCP and MPPPlannedRoadmap

Both are on the roadmap, and neither ships in this release. “Planned” means exactly that: no partial adapter, no endpoint and no diagnostic pretending otherwise. doctor reports MPP as planned - not implemented in this release, and expose: [ucp] fails config validation.

UCPPlanned transport. New protocols land only after the adapter model survives real use.
MPPPlanned payment rail, reported by doctor as not implemented.

Status and versions

StatusMeaning
SupportedShips, is the stable surface of this release, and is covered end to end by the test suite.
ExperimentalShips, is tested against the protocol's own official artifacts, serves a narrow named subset — and is off by default.
PlannedNo code ships.

Every adapter reports its supportedSpec, capabilities, unsupported list and status at runtime. If this page and the gateway ever disagree, the gateway is the truth.

curl -s http://localhost:8080/.well-known/agent-commerce

Next on the roadmap

A doctor GitHub Action · UCP · MPP · autonomous-mode AP2 (open mandates, agent key binding, constraint evaluation) · more of ACP (carts, feed, delegated payment) · Shopify and WooCommerce examples · PostgreSQL · richer observability.