Blockchain0x über MCP.
Geben Sie jedem MCP-Host - Claude Desktop, Cursor, VS Code - Agenten-Wallet-Tools mit einem Konfigurationsblock. Und wenn Sie für Ihre eigenen Tools Gebühren erheben möchten, verwenden Sie den echten requirePayment x402-Builder.
Der @blockchain0x/mcp Server bietet einem MCP-Host fünf Agenten-Wallet-Tools: eine Wallet lesen, Wallets auflisten, eine Transaktion überprüfen, eine USDC-Zahlung senden und eine x402-Rechnung begleichen. Führen Sie es mit npx @blockchain0x/mcp aus (Ihr Schlüssel bleibt auf Ihrem Gerät) oder zeigen Sie auf die gehostete URL. Separat exportiert das Paket requirePayment, sodass Sie einen Preis für Ihre eigenen MCP-Tools mit einer x402 402-Herausforderung festlegen können.
Ausgeben über MCP. Berechnen über MCP.
Aufgabe eins: Lassen Sie einen Agenten eine Brieftasche von innerhalb seines Hosts NUTZEN. Der @blockchain0x/mcp-Server ist ein dünner, zustandsloser Proxy über das @blockchain0x/node SDK. Er stellt fünf Brieftaschen-Tools für Claude Desktop, Cursor oder VS Code bereit, und der Umfang, die Zulage und die Obergrenzen pro Zeitraum Ihres API-Schlüssels werden vom Backend genau wie bei jedem anderen API-Aufruf durchgesetzt. Der Server hält keinen Schlüssel und speichert nichts.
Aufgabe zwei: Lassen Sie Agenten für den Aufruf IHRER Tools bezahlen. MCP hat die Tool-Aufruf reibungslos gemacht, was großartig ist, bis Ihr Server Egress, Tokens und Kosten für Drittanbieter-APIs kostenlos verbraucht. Das Muster 402 Payment Required passt hier genau. requirePayment erstellt eine strukturierte x402-Herausforderung mit einer gehosteten Checkout-URL; Sie geben es zurück, wenn ein Tool nicht bezahlt ist, und lassen den Anruf durch, sobald die Zahlung abgeschlossen ist. Clients, die x402 sprechen, zahlen automatisch; der Rest zeigt die URL einem Menschen an.
Zwei Möglichkeiten, es auszuführen. Keine Installation für die gehostete Version.
Führen Sie es lokal über stdio mit npx aus (Ihr Schlüssel bleibt auf Ihrem Computer), oder richten Sie jeden MCP-Host auf die gehostete Streamable HTTP-URL und übergeben Sie den Schlüssel als Bearer-Token. Beide gehen direkt in die MCP-Konfiguration des Hosts. Node 20+ für den lokalen Pfad.
{ "mcpServers": { "blockchain0x": { "command": "npx", "args": ["-y", "@blockchain0x/mcp"], "env": { "BLOCKCHAIN0X_API_KEY": "sk_live_...", "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com" } } } }
{ "mcpServers": { "blockchain0x": { "url": "https://mcp.blockchain0x.com/mcp", "headers": { "Authorization": "Bearer sk_live_..." } } } }
BLOCKCHAIN0X_API_KEY ist ein sk_test_ Testnet- oder sk_live_ Mainnet-Schlüssel von Ihrem Dashboard; BLOCKCHAIN0X_API_BASE_URL hat standardmäßig https://api.blockchain0x.com. Der Server leitet Ihren Schlüssel an das Backend weiter und speichert nichts, sodass der Umfang und die Obergrenzen dieses Schlüssels genau das sind, was der Agent tun kann. Die fünf Werkzeuge, die es bereitstellt: get_wallet, list_wallets, get_transaction, send_payment und settle_payment_request.
Gate ein Tool mit dem echten requirePayment-Builder.
requirePayment ist eine reine Funktion von @blockchain0x/mcp. Sie rufen es auf, wenn ein Tool unbezahlte ist, es mintet eine x402 402-Herausforderung (Preis, Ihre Wallet, eine gehostete Checkout-URL), und Sie geben diesen Body in der Standard-MCP-Fehlerform zurück. Es umschließt Ihren Handler nicht und verfolgt nicht, wer bezahlt hat - dieser Teil gehört Ihnen, was den Helfer klein und ehrlich hält.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { requirePayment } from "@blockchain0x/mcp"; import { z } from "zod"; const server = new McpServer({ name: "docs-search-mcp", version: "1.0.0" }); server.tool( "search_docs", "Semantic search across our private docs", { query: z.string() }, async ({ query }, extra) => { if (!hasPaid(extra)) { // Mint an x402 402 challenge and hand it back to the caller. const { body } = requirePayment({ amountUsdc: "0.10", payTo: "0xYourWallet", hostedUrl: "https://pay.blockchain0x.com/checkout/abc", }); return { content: [{ type: "text", text: JSON.stringify(body) }], isError: true }; } const results = await runVectorSearch(query); return { content: [{ type: "text", text: JSON.stringify(results) }] }; }, );
Wenn der Agent search_docs unpaid aufruft, erhält er den 402-Body. Clients, die x402 sprechen, zahlen automatisch; Claude Desktop und Cursor zeigen die Checkout-URL für einen Menschen an. Sobald die Zahlung abgeschlossen ist, markieren Sie diesen Anrufer als bezahlt (nächster Abschnitt) und der Anruf geht durch. Bevorzugen Sie einen einfachen HTTP-Server gegenüber einem MCP-Server? Der Empfangs-x402-Adapter - createX402Middleware für Express, createX402Plugin für Fastify - erledigt dasselbe Gating auf der Framework-Ebene.
Markieren Sie den Anrufer als bezahlt, wenn der Webhook ankommt.
Wenn eine Zahlung abgeschlossen ist, POSTet Blockchain0x ein signiertes payment.received-Ereignis an Ihre Webhook-URL. Überprüfen Sie es mit webhooks.verify aus dem Node SDK und zeichnen Sie dann auf, dass der Anrufer in welchem Store auch immer, den Sie bereits betreiben, bezahlt hat. Es gibt keinen gelieferten Empfangs-Cache zu konfigurieren - Sie besitzen diesen Teil, was bedeutet, dass es keine Überraschungsinfrastruktur gibt.
import express from "express"; import { webhooks } from "@blockchain0x/node"; const app = express(); // Capture the RAW body. The HMAC is over the exact bytes on the wire. app.use(express.raw({ type: "application/json" })); app.post("/webhooks/payment", (req, res) => { const result = webhooks.verify({ headers: req.headers, rawBody: req.body, // Buffer, raw bytes secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!, }); if (!result.ok) return res.status(400).json({ code: result.code }); if (result.eventType === "payment.received") { // Mark this payer paid however you like - a DB row, a Redis key, your call. markPaid(result.eventId); } res.status(200).send("ok"); });
webhooks.verify führt HMAC-SHA256 in konstanter Zeit aus und gibt eine diskriminierte Vereinigung zurück, sodass Sie auf result.ok ohne try/catch verzweigen. Lesen Sie den rohen Body, nicht eine geparste Kopie, da die Signatur die genauen Bytes abdeckt. Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test; eine Zahlung an Ihre Wallet ist payment.received. Wo Sie 'dieser Anrufer hat bezahlt' speichern - eine Datenbankzeile, ein Redis-Schlüssel, eine In-Memory-Karte für einen einzelnen Prozess - liegt bei Ihnen.
Der Server ist offen und zustandslos. Lesen Sie es.
Der MCP-Server und der requirePayment-Builder sind ein dünner Durchlauf über das Node SDK ohne Datenbank und ohne Volumen, daher gibt es nicht viel zu prüfen - das ist der Punkt. Native MCP OAuth 2.1 ist eine geplante Nachfolge; der eingefügte Schlüsselpfad wird zuerst ausgeliefert, da er das bestehende API-Schlüssel-Vertrauensmodell wiederverwendet.
github.com/tosh-labs/blockchain0x-nodeDie vollständige Liste der Tools, Bereiche und die URLs der gehosteten Umgebungen sind in den Dokumenten dokumentiert. Staging- und Entwicklungsendpunkte existieren neben der Produktion für Tests, bevor Sie einen echten Schlüssel darauf richten.
Fünf MCP-spezifische Fallen, die zu vermeiden sind.
Diese stammen von Betreibern, die bezahlte MCP-Server in der Produktion betreiben. Die meisten beziehen sich auf die Cache-Architektur und das spezifische Fehlerformat des MCP-Protokolls.
requirePayment ist ein Builder, kein Middleware
requirePayment ist eine reine Funktion: Sie rufen es auf, es gibt { status: 402, body } zurück, und Sie geben diesen Body zurück, wenn ein Tool unbezahlte ist. Es umschließt Ihren Handler nicht, es verfolgt nicht, wer bezahlt hat, und es nimmt keine Gründe oder Cache-Fensteroptionen - nur amountUsdc, payTo, hostedUrl und ein optionales Netzwerk und eine Beschreibung. Das Verfolgen des Zahlungsstatus ist Ihre Aufgabe: eine Zeile in Ihrer Datenbank, ein Schlüssel in Ihrem eigenen Redis, was auch immer passt. Blockchain0x liefert den Herausforderungs-Builder und den Abwicklungs-Webhook, nicht einen Quittungs-Cache.
stdio hält Ihren Schlüssel auf Ihrem Gerät
Führen Sie den Server mit npx und BLOCKCHAIN0X_API_KEY in der Umgebung aus, und der Schlüssel verlässt niemals Ihre Box - er wird lokal gelesen, nicht als Netzwerkheader gesendet. Die gehostete URL ist der gegenteilige Handel: Nullinstallation, aber Sie fügen den Schlüssel als Bearer-Token zu mcp.blockchain0x.com ein. Wählen Sie stdio für den eigenen Computer eines Entwicklers, gehostet für ein gemeinsames Deployment.
Nur Dashboard-Oberflächen sind nicht sichtbar
Der Server ist ein dünner, zustandsloser Proxy über @blockchain0x/node. Er bietet genau fünf Tools: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request. Identitätsänderungen, API-Schlüssel und Webhook-CRUD, Abhebungen und Abrechnung sind unter der Authentifizierung des API-Schlüssels hart blockiert, und der Server erreicht sie niemals über das SDK hinaus. Erwarten Sie kein Tool dafür - sie leben designbedingt im Dashboard.
send_payment ist idempotent und versucht nicht erneut
The send_payment tool wraps payments.create: it auto-mints an Idempotency-Key so a retried call collapses to one transfer, and it does not retry on its own. It can also answer 503 until the chain adapter is wired for your network. If the model gets a 503, do not let it hammer the tool - surface the state and move on. amountWei is USDC base units (6 decimals), so 0.01 USDC is the string "10000".
amountUsdc auf requirePayment ist ein 6-dezimales String
requirePayment validates amountUsdc as a USDC decimal with at most six fractional digits, so "0.10" is fine and "0.1234567" throws. payTo and hostedUrl are required; network defaults to mainnet. Keep the hostedUrl pointing at a real checkout you control (the pattern is https://pay.blockchain0x.com/checkout/<id>). A malformed amount fails fast rather than minting a broken challenge.