x402-mcp-demo
x402-mcp-demo
Ein MCP-Server, dessen Tool-Aufrufe über x402 gemessen und abgerechnet werden, plus ein Paying-Proxy-Referenzclient, der es jedem Standard-MCP-Client ermöglicht, das kostenpflichtige Tool zu nutzen, ohne von x402 zu wissen. Die Abrechnung erfolgt in echtem Testnetz-USDC auf Base Sepolia und landet auf einem Catena-Sandbox-Konto.
flowchart LR
CL["Standard MCP client<br/>Claude Code, Inspector"] -->|stdio JSON-RPC| PX["Paying proxy<br/>holds the wallet, spend cap"]
PX -->|Streamable HTTP + x402| SV["Paid MCP server<br/>gate in front of the handler"]
SV -->|verify then settle| F[Facilitator]
F -->|USDC| CA[(Catena sandbox account)]
classDef pay stroke-width:2px
class PX,SV paySo funktioniert es
Die x402-Challenge befindet sich auf der HTTP-Ebene des MCP Streamable HTTP-Transports, unterhalb des JSON-RPC-Rahmens, sodass das MCP-Protokoll selbst unberührt bleibt und Standard-Clients kompatibel bleiben.
initialize,tools/listund das kostenlosepricing-Tool kosten nichts.tools/callaufpremium_market_signalzieht eine 402 mit einer x402 v2-Challenge (genaues Schema). Der Proxy bezahlt sie, der Facilitator führt die Abrechnung auf das konfiguriertepayTodurch, und erst dann wird ein erfolgreiches Tool-Ergebnis zurückgegeben. Die Reihenfolge der Middleware ist die Invariante: unbezahlte Aufrufe erreichen nie den Tool-Handler; MCP HTTP 4xx bricht die Abrechnung ab.Der Proxy lehnt einen bezahlten Aufruf VOR der Bezahlung ab, wenn sein laufender Gesamtbetrag
PROXY_SPEND_CAP_USDüberschreiten würde. Das Limit ist Konfiguration, wird niemals aus Tool-Argumenten abgeleitet, sodass ein prompt-injizierter Tool-Aufruf es nicht erhöhen kann.
Die aufrufweise Abfolge, einschließlich wo die Abrechnung abgebrochen wird, finden Sie in docs/architecture.md.
Related MCP server: x402 MCP Proxy
Einrichtung
Erfordert Node >= 22.13 (siehe .nvmrc) und pnpm.
corepack enable
pnpm install
cp .env.example .env
# SELLER_PAY_TO_ADDRESS: your Catena sandbox account's base-sepolia USDC
# deposit address, from app.catena.com
# BUYER_EVM_PRIVATE_KEY: a testnet wallet the proxy pays from. Fund it with
# Base Sepolia USDC at https://faucet.circle.com (select Base Sepolia).
# USDC only; no ETH is needed, transfers are gasless EIP-3009.Beide Einstiegspunkte beenden mit Exit-Code 2, wenn die Konfiguration fehlt oder ungültig ist, und mit 1, wenn eine benötigte Abhängigkeit nicht erreichbar ist (der Facilitator für den Server, der vorgelagerte MCP-Server für den Proxy).
Demo: Der gesamte Kreislauf in einem Befehl
pnpm demoStartet den kostenpflichtigen Server gegen den öffentlichen x402-Facilitator, treibt einen Standard-MCP-Client durch den Paying Proxy und gibt Folgendes aus: kostenlose Erkennung, dann den bezahlten Tool-Aufruf, der $0,001 Testnetz-USDC auf die Catena-Einzahlungsadresse abrechnet.
Sehen Sie die 402 selbst
Führen Sie pnpm server in einem Terminal aus und fragen Sie dann nach dem kostenpflichtigen Tool, ohne zu bezahlen. Der Server antwortet auf /healthz mit seinem Preis und dem Namen des kostenpflichtigen Tools, was der Proxy auch beim Start abfragt:
curl -s http://localhost:4040/healthz{"status":"ok","paidTool":"premium_market_signal","price":"$0.001"}Die Challenge selbst wird im PAYMENT-REQUIRED-Antwort-Header übertragen, nicht im Body (der Body ist {}), daher dekodieren Sie den Header, um sie zu lesen:
curl -si -X POST http://localhost:4040/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"premium_market_signal","arguments":{"topic":"usdc"}}}' \
| grep -i '^payment-required:' | tr -d '\r' | cut -d' ' -f2 | base64 -d{"x402Version":2,"error":"Payment required","resource":{"url":"http://localhost:4040/mcp","description":"One invocation of the premium_market_signal MCP tool","mimeType":""},"accepts":[{"scheme":"exact","network":"eip155:84532","amount":"1000","asset":"0x036CbD53842c5426634e7929541eC2318f3dCF7e","payTo":"0x000000000000000000000000000000000000dEaD","maxTimeoutSeconds":300,"extra":{"name":"USDC","version":"2"}}]}Entfernen Sie | grep ..., um die Statuszeile zu sehen: HTTP/1.1 402 Payment Required. Das Tool wurde nie ausgeführt, also wurde nichts abgerechnet.
Verwendung mit Claude Code (Standard-Client)
Führen Sie den kostenpflichtigen Server in einem Terminal aus (pnpm server), registrieren Sie dann den Proxy als normalen stdio MCP-Server in .mcp.json:
{
"mcpServers": {
"paid-market-signal": {
"command": "pnpm",
"args": ["--dir", "/path/to/x402-mcp-demo", "proxy"]
}
}
}Der Proxy liest BUYER_EVM_PRIVATE_KEY und UPSTREAM_MCP_URL aus der eigenen .env dieses Repos, sodass kein Geheimnis in .mcp.json gelangt. (.mcp.json ist hier ohnehin gitignoriert; behalten Sie das so bei, wenn Sie dieses Setup kopieren.)
Claude Code listet beide Tools auf und ruft sie normal auf; der Proxy bezahlt die 402 im Hintergrund. MCP Inspector funktioniert auf die gleiche Weise: npx @modelcontextprotocol/inspector pnpm proxy.
Tests
pnpm test führt die Server- und Proxy-Suiten gegen einen prozessinternen Server mit einem aufzeichnenden Fake-Facilitator aus: kein Netzwerk, kein Geld. Jede Geldpfad-Invariante hat einen Test, der fehlschlägt, wenn sie verletzt wird.
Invariante | Test |
Erkennung und kostenlose Tools kosten nichts | Bedient initialize, tools/list und kostenlose Tools ohne Bezahlung |
Ein unbezahlter Aufruf eines kostenpflichtigen Tools erhält eine 402, bevor er ausgeführt wird | Lehnt einen unbezahlten Aufruf eines kostenpflichtigen Tools mit einer 402-Challenge ab, bevor das Tool ausgeführt wird |
Ein bezahlter Aufruf wird genau einmal abgerechnet | Führt das kostenpflichtige Tool einmal aus, wenn der Client bezahlt, und die Erkennung bleibt danach kostenlos |
Die Erkennung bleibt auch durch den Proxy kostenlos | Hält kostenlose Oberflächen durch den Proxy kostenlos |
Ein Standard-Client bezahlt, ohne von x402 zu wissen | Bezahlt das kostenpflichtige Tool transparent und gibt sein Ergebnis zurück |
Ein JSON-RPC-Batch wird abgelehnt, niemals pro Element geprüft | Lehnt JSON-RPC-Batch-Anfragen komplett ab (fail closed) |
MCP HTTP 4xx bricht die Abrechnung ab | Führt keine Abrechnung durch, wenn ein bezahlter Aufruf MCP HTTP 4xx zurückgibt |
Eine Benachrichtigung (ohne id) wird nie berechnet | Berechnet keinen benachrichtigungsförmigen paid tools/call (ohne id) |
Ein nicht parsbarer Body wird abgelehnt, nicht bepreist | Lehnt einen paid tools/call, der als text/plain gesendet wurde, ungeparst und unberechnet ab |
Eine vorgelagerte Ausführung pro bezahltem Aufruf | Sendet einen bezahlten Aufruf zweimal (402 dann bezahlter Wiederholungsversuch) und rechnet einmal ab |
Nur USDC im festgelegten Netzwerk wird jemals signiert | Lehnt eine richtlinienwidrige Challenge (falsches Netzwerk, falscher Asset) unsigniert ab |
Das Ausgabenlimit greift vor jeder Zahlung | Lehnt einen Aufruf, der das Ausgabenlimit überschreitet, vor jeder Zahlung ab |
Gleichzeitige Aufrufe können nicht beide unter das Limit fallen | Begrenzt gleichzeitige bezahlte Aufrufe: nur einer von zwei wird unter einem Ein-Aufruf-Limit abgerechnet |
Umfang
Nur öffentliche Oberflächen: das MCP TypeScript SDK, die öffentlichen x402-Pakete und der Facilitator sowie ein Catena-Sandbox-Konto als Empfängerseite. Versionen und Grenzen: docs/architecture.md.
Lizenz
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that enables AI agents to access paid AI inference and web tools via HTTP 402 micropayments in USDC on Base, using the agent's wallet as identity.14524MIT
- Alicense-qualityDmaintenanceA local MCP proxy that connects to remote MCP servers and automatically handles x402 payments, signing USDC on-chain when a tool returns HTTP 402.71MIT
- FlicenseAqualityBmaintenanceMCP server for a live x402 payment gateway on Base (USDC). Lets AI agents discover, preview for free, then pay per call — with prepaid gasless payments, signed receipts, and delta delivery.7
- Alicense-qualityCmaintenanceMCP server that provides AI agents with pay-per-call access to a suite of tools (honeypot check, token market, DeFi yields, etc.) via USDC on Base using the x402 protocol.23MIT
Related MCP Connectors
Monetize any MCP server: x402 paywall, pay-per-call billing in USDC on Base, agent marketplace.
Agent-commerce MCP server for x402/USDC payments and affiliate splits on Base.
Agent x402 Paywall MCP — Coinbase HTTP 402 protocol + on-chain settlement. Agents pay per-call
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/catena-oss/x402-mcp-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server