This is the buyer side, packaged as MCP tools. If you instead want to put a paywall on your own MCP server so its tools get paid, that’s the seller side — see MCP Integration. See Not this MCP below to be sure you’re on the right page.
How it fits: discover, then pay
The Catalog MCP is the same two-step motion the rest of the Catalog documents, exposed as tools:Discover
list_categories, search_services, and get_service read the Catalog — public, no key. Your agent finds a service and reads its protocol, endpoint, and price.Pay
pay_service hands the call to the Router, which reads the merchant’s 402, pays it from your Delegation, enforces the cap, and relays the vendor’s response.The tool surface
Six tools. Discovery is public; paying and reading your ledger require your API key.Auth & transport
- Transport: Streamable HTTP at
POST /mcp(stateless). Liveness atGET /health; readiness — which checks the Nevermined API is reachable — atGET /ready. - Auth: your Nevermined API key on the HTTP
Authorization: Bearer <key>header.- The three discovery tools are public and need no key.
pay_service,list_payments, andpayment_summaryrequire it. Called without a key, they return anauthentication_requiredresult rather than failing hard.- The key is forwarded to the Nevermined API per request — never stored, never logged. Never send it to the merchant you’re paying; it authenticates you to Nevermined, nothing else.
This is the plain-key front door: payments draw on your own Delegation using your own API key. A no-code / OAuth-connector variant (for hosts like ChatGPT and Claude connectors) is separate and tracked elsewhere.
Quickstart
Connect a host, run a discovery call, then a paid call — end to end. Discovery works with no credentials; paying needs a Nevermined API key and a funded, spend-capped Delegation.1. Connect your host
Point an MCP client at the server URL and set theAuthorization header to your Nevermined API key. Any host that supports remote (HTTP) MCP servers with headers takes this shape:
Stdio-only host? Some hosts speak MCP over stdio, not HTTP. Bridge them with
mcp-remote, which forwards the same URL and header to a local stdio endpoint.2. Get an API key
Create a Nevermined API key from the Nevermined app. Discovery tools don’t need it, butpay_service and the ledger tools do. Older keys are rejected by the Router — see the Router quickstart for how to tell which you have.
The key is sent as a request header, forwarded to the Nevermined API per call, and never stored or logged by the MCP server. Never put it in a tool argument or send it to a merchant.
3. Run a discovery call
Discovery is public — call these before you’ve set any key. Ask your host to run:list_categories— the Catalog’s categories, each with a count.search_serviceswith{ "protocol": "x402" }— listings on the x402 rail. Also filter byquery,category,tag, and page withpage/offset.get_servicewith{ "slug": "<a-slug-from-the-search>" }— one service’s protocol, endpoint, and price label.
4. Prepare to pay
pay_service moves real money, so it needs a funded budget on your account:
1
Create a Delegation
A hard cap and an expiry. Created once and reused. See Create a Delegation.
2
Fund its wallet
Both rails pull from your own custodial wallet, so it must hold the payment asset on the network you’ll pay on. See Fund your wallet.
pay_service uses the accessible Delegation (Active, unexpired, funded) automatically. Pass an explicit delegationId only to override that choice.
5. Make a paid call
Callpay_service with the service slug and the request you want made — path, method (defaults to POST), body, and headers as the vendor needs them:
402 from your Delegation, and relays the vendor’s own response:
Retries are deduped, not double-charged. The
requestId is derived from your key plus the full request, so a host that retries the same call hits the Router’s idempotency guard and gets { "status": "already_paid", "paymentId": "…" } back — the original payment, not a second one. Pass an explicit requestId only when you want to buy again.6. Check what you spent
list_payments— your Router payments, newest first, across every protocol. Filter bydelegationId,from,to.payment_summary— total spend plus a time series over an optionalfrom/towindow.
When a payment is refused
Refusals come back as legible results, not exceptions. The ones to recognize:Not this MCP
Nevermined ships three MCP servers. Make sure you want this one:Next
Catalog: discover
What’s listed, how filtering works, and what “payable” means.
Router: pay
Delegations, the spending cap, the rails, and every refusal code.
Router guardrails
What the Router enforces, what it refuses, and why widening a cap is the wrong reflex.
Payment ledger
Read back everything your agents have spent, across every protocol.