Skip to main content
Glama

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

server.py

FastAPI-Endpoint (POST /mcp/tools/vendor_audit) geschützt durch x402ResourceServer + das EVM-exact-Schema, mit einem Preis von $0.01 USDC auf Base Sepolia

gen_wallets.py

Erzeugt zwei Wegwerf-EOAs – eine Empfängeradresse und eine Zahlungsadresse. Kein Guthaben, nur Testnetz, diese Schlüssel nie wiederverwenden.

client_probe.py

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

captured_responses/

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 terminal

Was 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_responsecreate_payment_payloadencode_payment_signature_header), direkt auf, was für eine Demo weniger bewegliche Teile bedeutet und identische Wire-Ausgabe erzeugt.

Sicherheitshinweise

  • gen_wallets.py erzeugt Schlüssel mit eth_account.Account.create() — kryptografisch zufällig, nie finanziert, berührt in dieser Demo niemals das Mainnet.

  • wallets.json ist in Git ignoriert. wallets.example.json zeigt 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.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    B
    quality
    D
    maintenance
    Production-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
  • A
    license
    Not graded
    quality
    A
    maintenance
    L402 + 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.
    371
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Minimal 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
  • A
    license
    A
    quality
    D
    maintenance
    An 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.
    3
    5
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/Thinkflow-ro/x402-mcp-demo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server