x402 MCP Demo
x402-MCP-Tool-Demo — eine echte 402, eine echte Ablehnung und eine echte Abrechnung
Eine minimale Demo des x402-Zahlungsprotokolls schützt einen MCP-artigen Tool-Endpoint, ausgeführt mit dem echten x402==2.16.0-Python-Paket und seinem standardmäßigen öffentlichen Facilitator (https://x402.org/facilitator) auf dem Base-Sepolia-Testnetz. Hier ist nichts handgeschriebenes Protokoll-JSON — jede Antwort in captured_responses/ stammt unverändert aus der Bibliothek.
Begleitend zu: So stellen Sie ein MCP-Tool in Rechnung: Ein funktionierender x402-Endpoint in unter einer Stunde.
Was es hier gibt
Datei | Funktion |
| FastAPI-Endpoint ( |
| Erzeugt zwei Wegwerf-EOAs – eine Empfängeradresse und eine Zahlungsadresse. Kein Guthaben, nur Testnetz, diese Schlüssel nie wiederverwenden. |
| Agiert als zahlender Agent: Holt die echte 402, signiert eine echte Zahlungs-Payload mit dem Konto ohne Guthaben und zeigt die echte Ablehnung des Facilitators |
| Die drei Antworttexte, die dabei entstanden sind, unverändert – die 402-Anforderung, die Ablehnung wegen unzureichenden Guthabens und die erfolgreiche 200 |
Related MCP server: 402-mcp
Ausführen
pip install -r requirements.txt
python gen_wallets.py # writes wallets.json (gitignored) -- two fresh, empty keys
python server.py # starts on 127.0.0.1:8402
python client_probe.py # in a second terminalWas Sie sehen werden
Runde 1 – keine Zahlung. Eine 402 mit einem payment-required-Header (Base64-JSON): Schema, Netzwerk, Asset-Vertrag, Betrag in der kleinsten Einheit des Tokens und die zu zahlende Adresse.
Runde 2 – eine echte signierte Zahlung, kein Guthaben. Der Client erstellt und signiert eine tatsächliche EIP-3009-Autorisierung mit dem Wegwerf-Schlüssel, hängt sie als X-PAYMENT an, und der Facilitator prüft sie gegen den echten Base-Sepolia-Chain-State. Die Antwort lautet:
{ "error": "invalid_exact_evm_insufficient_balance" }Diese Zeichenfolge ist der echte Fehlercode des Facilitators, keine Vermutung — sie erhalten ihn, wenn das Protokoll genau wie vorgesehen funktioniert und der Zahlende schlicht kein Geld hat.
Runde 3 – finanziert und tatsächlich abgerechnet. Die agent_address wurde mit 20 Testnet-USDC aus dem öffentlichen Faucet von Circle finanziert, danach wurde client_probe.py erneut gegen denselben Server ausgeführt. Diesmal liefert Runde 2 eine 200:
{
"url": "https://example.com/mcp",
"recommendation": "expose as a priced x402 tool at $0.01/call",
"paid": true
}mit einem payment-response-Header, der sich wie folgt dekodieren lässt:
{ "success": true, "payer": "0x3214cB6C...E0E9", "transaction": "0x9530b663...0dd86", "network": "eip155:84532" }Dieser Transaktions-Hash ist echt und unabhängig überprüfbar —
auf Base Sepolia Blockscout ansehen:
Status ok, an den USDC-Vertrag gesendet, Methode transferWithAuthorization — exakt das EIP-3009-Gasless-Transfer-Muster, das der Zahlende signiert hat. Jeder kann das überprüfen, ohne dieser README zu vertrauen.
Warum der manuelle Roundtrip in client_probe.py
x402 2.16.0 enthält PaymentRoundTripper, aber das ist ein Callback (handle_response(...)), der in einen eigenen httpx/requests-Transport eingebunden werden soll — es ist kein eigenständiger Transport zum direkten Einsetzen, trotz des Docstrings. client_probe.py ruft dieselben drei Primitiven, die es intern aufruft (get_payment_required_response → create_payment_payload → encode_payment_signature_header), direkt auf, was für eine Demo weniger bewegliche Teile bedeutet und identische Wire-Ausgabe erzeugt.
Sicherheitshinweise
gen_wallets.pyerzeugt Schlüssel miteth_account.Account.create()— kryptografisch zufällig, nie finanziert, berührt in dieser Demo niemals das Mainnet.wallets.jsonist in Git ignoriert.wallets.example.jsonzeigt die Struktur mit einer bekannten Burn-Adresse, sodass das Repo aus einem frischen Klon ohne Geheimnisse in der Git-Historie ausführbar ist.Die Facilitator-URL, das Netzwerk und der Asset-Vertrag sind die eigenen Testnet-Standardwerte der Bibliothek — hier spricht nichts mit dem Base-Mainnet oder bewegt echten Wert.
This server cannot be deployed
Maintenance
Related MCP Connectors
Pay-per-action access to APIs and MCP tools over Lightning L402 and Base USDC x402.
Monetize any MCP server: x402 paywall, pay-per-call billing in USDC on Base, agent marketplace.
Test any x402 paid URL without paying: 402, PAYMENT-REQUIRED, USDC, amounts, payTo, EIP-712, CORS.
Agent x402 Paywall MCP — Coinbase HTTP 402 protocol + on-chain settlement. Agents pay per-call
Related MCP Servers
- FlicenseBqualityDmaintenanceProduction-ready MCP server template for consuming X402-protected APIs with gasless micropayments. Enables AI agents like Claude to make micropayment-based API calls seamlessly using EIP-712 signatures and USDC transfers.3-
- AlicenseAqualityBmaintenanceL402 + x402 client MCP. AI agents discover, pay for, and consume any payment-gated API autonomously. Supports Lightning (NWC), Cashu ecash, stablecoins, and human-in-the-loop payments.14302 npmMIT
- AlicenseNot gradedqualityDmaintenanceMinimal MCP server demonstrating L402 pay-per-call with Depth-of-Identity reputation gating, providing a bitcoin data tool that fetches BTC price and mempool fees.MIT
- AlicenseAqualityDmaintenanceAn MCP server that lets your AI coding agent (Claude Code, OpenClaw, Codex, Cursor, etc.) discover and pay on-chain agents registered on ERC-8004, using Coinbase's official x402 protocol. No smart account. No bundler. No relay. Just your EOA, an HTTPS request, and an automatic 402 → sign → retry flow.35MIT