Salta al contenuto principale
INTEGRAZIONE MCP

Blockchain0x su MCP.

Dai a qualsiasi host MCP - Claude Desktop, Cursor, VS Code - strumenti per il portafoglio agente con un blocco di configurazione. E quando vuoi addebitare i tuoi strumenti, usa il vero costruttore requirePayment x402.

RISPOSTA BREVE

Il server @blockchain0x/mcp fornisce a un host MCP cinque strumenti per wallet di agenti: leggi un wallet, elenca i wallet, controlla una transazione, invia un pagamento USDC e regola una fattura x402. Eseguilo con npx @blockchain0x/mcp (la tua chiave rimane sul tuo computer) o punta all'URL ospitato. Separatamente, il pacchetto esporta requirePayment così puoi mettere un prezzo sui tuoi strumenti MCP con una sfida x402 402.

DUE LAVORI, UN PACCHETTO

Spendi tramite MCP. Addebita tramite MCP.

Primo compito: lascia che un agente UTILIZZI un wallet dall'interno del suo host. Il server @blockchain0x/mcp è un sottile proxy stateless sopra il @blockchain0x/node SDK. Espone cinque strumenti wallet a Claude Desktop, Cursor o VS Code, e l'ambito, l'assegnazione e i limiti per periodo della tua chiave API sono applicati dal backend esattamente come per qualsiasi altra chiamata API. Il server non detiene chiavi e non memorizza nulla.

Secondo compito: addebitare agli agenti l'uso dei TUOI strumenti. MCP ha reso l'invocazione degli strumenti senza attriti, il che è fantastico finché il tuo server non consuma egress, token e costi API di terze parti gratuitamente. Il modello 402 Payment Required si adatta perfettamente qui. requirePayment genera una sfida x402 strutturata con un URL di checkout ospitato; la restituisci quando uno strumento non è pagato e lasci passare la chiamata una volta che il pagamento è regolato. I client che parlano x402 pagano automaticamente; gli altri mostrano l'URL a un umano.

ESEGUI IL SERVER

Due modi per eseguirlo. Nessuna installazione per quello ospitato.

Esegui localmente tramite stdio con npx (la tua chiave rimane sulla tua macchina), oppure punta qualsiasi host MCP all'URL HTTP Streamable ospitato e passa la chiave come token Bearer. Entrambi vanno direttamente nella configurazione MCP dell'host. Node 20+ per il percorso locale.

LOCALE - STDIO (npx)
{
  "mcpServers": {
    "blockchain0x": {
      "command": "npx",
      "args": ["-y", "@blockchain0x/mcp"],
      "env": {
        "BLOCKCHAIN0X_API_KEY": "sk_live_...",
        "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com"
      }
    }
  }
}
HOSTED - STREAMABLE HTTP
{
  "mcpServers": {
    "blockchain0x": {
      "url": "https://mcp.blockchain0x.com/mcp",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

BLOCKCHAIN0X_API_KEY è una chiave sk_test_ testnet o sk_live_ mainnet dal tuo dashboard; BLOCKCHAIN0X_API_BASE_URL predefinito è https://api.blockchain0x.com. Il server inoltra la tua chiave al backend e non memorizza nulla, quindi l'ambito e i limiti su quella chiave sono esattamente ciò che l'agente può fare. I cinque strumenti che espone: get_wallet, list_wallets, get_transaction, send_payment e settle_payment_request.

PREZZO I TUOI STRUMENTI

Limita uno strumento con il vero costruttore requirePayment.

requirePayment è una funzione pura di @blockchain0x/mcp. La chiami quando uno strumento non è pagato, genera una sfida x402 402 (prezzo, il tuo portafoglio, un URL di checkout ospitato) e restituisci quel corpo nella forma di errore standard MCP. Non avvolge il tuo gestore e non tiene traccia di chi ha pagato - quella parte è tua, il che mantiene l'aiuto piccolo e onesto.

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) }] };
  },
);

Quando l'agente chiama search_docs non pagato, riceve il corpo 402. I clienti che parlano x402 lo pagano automaticamente; Claude Desktop e Cursor mostrano l'URL di checkout per un umano. Una volta che il pagamento si è concluso, segni che quel chiamante ha pagato (sezione successiva) e la chiamata va a buon fine. Preferisci un server HTTP semplice rispetto a uno MCP? L'adattatore x402 lato ricevente - createX402Middleware per Express, createX402Plugin per Fastify - fa lo stesso gating a livello di framework.

CONFERMA IL PAGAMENTO

Segna il chiamante come pagato quando il webhook arriva.

Quando un pagamento si stabilisce, Blockchain0x POSTa un evento firmato payment.received al tuo URL webhook. Verificalo con webhooks.verify dal Node SDK, poi registra che il chiamante ha pagato in qualsiasi store tu stia già utilizzando. Non c'è una cache di ricevute inclusa da configurare - possiedi quella parte, il che significa nessuna infrastruttura a sorpresa.

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 esegue HMAC-SHA256 in tempo costante e restituisce un'unione discriminata, quindi ramifichi su result.ok senza try/catch. Leggi il corpo grezzo, non una copia analizzata, perché la firma copre i byte esatti. Gli eventi inviati sono payment.received, payment.sent, wallet.deployed e webhook.test; un pagamento al tuo portafoglio è payment.received. Dove persisti 'questo chiamante ha pagato' - una riga nel tuo database, una chiave in Redis, una mappa in memoria per un singolo processo - è una tua scelta.

SORGENTE E DOCUMENTI

Il server è aperto e senza stato. Leggilo.

Il server MCP e il builder requirePayment sono un sottile pass-through sopra il Node SDK, senza database e senza volumi, quindi non c'è molto da verificare - ed è proprio questo il punto. Il supporto nativo a MCP OAuth 2.1 è previsto come evoluzione successiva; il flusso con chiave incollata viene rilasciato per primo perché riutilizza il modello di trust delle API key esistente.

github.com/tosh-labs/blockchain0x-node

L'elenco completo degli strumenti, gli scope e gli URL degli ambienti hosted sono documentati in the docs. Gli endpoint hosted di staging e dev esistono insieme alla produzione per i test prima di puntare una chiave reale.

ERRORI COMUNI

Cinque trappole specifiche di MCP da evitare.

Questi provengono da operatori che gestiscono server MCP a pagamento in produzione. La maggior parte riguarda l'architettura della cache e il formato di errore specifico del protocollo MCP.

PITFALL 1

requirePayment è un costruttore, non middleware

requirePayment è una funzione pura: la chiami, restituisce { status: 402, body }, e restituisci quel corpo quando uno strumento non è pagato. Non avvolge il tuo gestore, non tiene traccia di chi ha pagato, e non prende opzioni di motivo o finestra di cache - solo amountUsdc, payTo, hostedUrl e una rete e descrizione opzionali. Tenere traccia dello stato di pagamento è tuo compito: una riga nel tuo database, una chiave nel tuo Redis, qualunque cosa si adatti. Blockchain0x fornisce il costruttore della sfida e il webhook di regolamento, non una cache delle ricevute.

PITFALL 2

stdio mantiene la tua chiave sulla tua macchina

Esegui il server con npx e BLOCKCHAIN0X_API_KEY nell'ambiente, e la chiave non lascia mai la tua macchina - viene letta localmente, non inviata come intestazione di rete. L'URL ospitato è il commercio opposto: zero installazione, ma incolli la chiave come token Bearer a mcp.blockchain0x.com. Scegli stdio per la macchina di un sviluppatore, ospitato per un'implementazione condivisa.

PITFALL 3

Le superfici solo da dashboard non sono esposte

Il server è un proxy sottile e senza stato su @blockchain0x/node. Espone esattamente cinque strumenti: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request. Le modifiche all'identità, CRUD di API-key e webhook, prelievi e fatturazione sono bloccati sotto l'autenticazione API-key e il server non accede mai oltre l'SDK. Non aspettarti uno strumento per quelli - vivono nel dashboard per design.

PITFALL 4

send_payment è idempotente e non ripete

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 su requirePayment è una stringa a 6 decimali

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.

DOMANDE FREQUENTI

Tre domande specifiche su MCP.

Funziona con Claude Desktop, Cursor e VS Code direttamente?

Sì. Sono host MCP standard. Aggiungi il server blockchain0x alla configurazione MCP dell'host - il blocco stdio (npx + la tua chiave in env) o il blocco ospitato (l'URL mcp.blockchain0x.com + una chiave Bearer) - e i cinque strumenti wallet appaiono all'agente. Da lì l'agente può leggere un wallet, controllare una transazione, inviare un pagamento USDC o regolare una fattura x402, tutto entro l'ambito, l'assegnazione e i limiti già imposti dalla tua chiave API.

Cosa può effettivamente fare l'agente una volta che il server è connesso?

Cinque cose, corrispondenti ai cinque strumenti: get_wallet e list_wallets leggono i metadati del portafoglio, get_transaction interroga lo stato e l'hash di una transazione, send_payment effettua un pagamento USDC in uscita e settle_payment_request regola una fattura x402 con prova on-chain. Questa è l'intera superficie. Il server è un proxy senza stato: non detiene chiavi, non memorizza nulla e non può accedere alle operazioni solo da dashboard, quindi un agente non può ruotare chiavi, cambiare identità o ritirarsi attraverso di esso.

Come posso addebitare agli agenti l'uso dei miei strumenti MCP?

Usa il vero helper requirePayment esportato da @blockchain0x/mcp. Chiama requirePayment({ amountUsdc, payTo, hostedUrl }) all'interno del tuo strumento quando il chiamante non ha pagato e restituisci il corpo 402 risultante - è compatibile con @blockchain0x/x402. Tieni traccia di chi ha pagato (un webhook su payment.received più il tuo store) e lascia passare la chiamata una volta che hanno pagato. Per un server HTTP normale piuttosto che uno MCP, l'adattatore x402 lato ricevente (createX402Middleware per Express, createX402Plugin per Fastify) svolge lo stesso lavoro a livello di framework.

Dai al tuo agente un wallet tramite MCP.

Un blocco di configurazione per collegare gli strumenti wallet. Il vero costruttore requirePayment quando vuoi addebitare per il tuo. Gratis per iniziare.