Zum Hauptinhalt springen
MCP-INTEGRATION

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.

KURZE ANTWORT

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.

ZWEI JOBS, EIN PAKET

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.

SERVER STARTEN

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.

LOKAL - STDIO (npx)
{
  "mcpServers": {
    "blockchain0x": {
      "command": "npx",
      "args": ["-y", "@blockchain0x/mcp"],
      "env": {
        "BLOCKCHAIN0X_API_KEY": "sk_live_...",
        "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com"
      }
    }
  }
}
GEHOSTET - STREAMBARES HTTP
{
  "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.

PREISEN SIE IHRE EIGENEN WERKZEUGE

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.

SERVER.TS
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.

ZAHLUNG BESTÄTIGEN

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.

WEBHOOK.TS
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.

QUELLE UND DOKUMENTE

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-node

Die 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.

HÄUFIGE FALLSTRICK

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.

PITFALL 1

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.

PITFALL 2

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.

PITFALL 3

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.

PITFALL 4

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".

PITFALL 5

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.

HÄUFIG GESTELLTE FRAGEN

Drei MCP-spezifische Fragen.

Funktioniert das direkt mit Claude Desktop, Cursor und VS Code?

Ja. Sie sind Standard-MCP-Hosts. Fügen Sie den blockchain0x-Server zur MCP-Konfiguration des Hosts hinzu - den stdio-Block (npx + Ihren Schlüssel in env) oder den gehosteten Block (die mcp.blockchain0x.com-URL + einen Bearer-Schlüssel) - und die fünf Wallet-Tools erscheinen für den Agenten. Von dort aus kann der Agent eine Wallet lesen, eine Transaktion überprüfen, eine USDC-Zahlung senden oder eine x402-Rechnung begleichen, alles im Rahmen, der Zulassung und der Obergrenzen, die Ihr API-Schlüssel bereits durchsetzt.

Was kann der Agent tatsächlich tun, sobald der Server verbunden ist?

Fünf Dinge, die den fünf Tools entsprechen: get_wallet und list_wallets lesen Wallet-Metadaten, get_transaction fragt den Status und den Hash einer Transaktion ab, send_payment führt eine ausgehende USDC-Zahlung durch, und settle_payment_request begleicht eine x402-Rechnung mit On-Chain-Beweis. Das ist die gesamte Oberfläche. Der Server ist ein zustandsloser Proxy: er hält keinen Schlüssel, speichert nichts und kann nicht auf die nur im Dashboard verfügbaren Operationen zugreifen, sodass ein Agent keine Schlüssel rotieren, die Identität ändern oder darüber abheben kann.

Wie berechne ich Agenten, um meine EIGENEN MCP-Tools aufzurufen?

Verwenden Sie den echten requirePayment-Helfer, der von @blockchain0x/mcp exportiert wird. Rufen Sie requirePayment({ amountUsdc, payTo, hostedUrl }) innerhalb Ihres Tools auf, wenn der Anrufer nicht bezahlt hat, und geben Sie den resultierenden 402-Body zurück - er ist drahtkompatibel mit @blockchain0x/x402. Sie verfolgen, wer bezahlt hat (ein Webhook bei payment.received plus Ihr eigenes Store), und lassen den Anruf durch, sobald sie bezahlt haben. Für einen einfachen HTTP-Server anstelle eines MCP-Servers erledigt der Empfangs-x402-Adapter (createX402Middleware für Express, createX402Plugin für Fastify) die gleiche Aufgabe auf der Framework-Ebene.

Geben Sie Ihrem Agenten eine Wallet über MCP.

Ein Konfigurationsblock, um die Brieftaschenwerkzeuge zu verbinden. Der echte requirePayment-Baustein, wenn Sie für Ihre eigenen Gebühren erheben möchten. Kostenlos zum Start.