跳转到主要内容
MCP集成

Blockchain0x 通过 MCP.

给任何MCP主机 - Claude Desktop、Cursor、VS Code - 一个配置块的代理钱包工具。当您想为自己的工具收费时,使用真实的requirePayment x402构建器。

简短答案

@blockchain0x/mcp 服务器为 MCP 主机提供五个代理钱包工具:读取钱包、列出钱包、检查交易、发送 USDC 支付和结算 x402 发票。使用 npx @blockchain0x/mcp 运行它(您的密钥保留在您的机器上)或指向托管的 URL。单独地,该包导出 requirePayment,因此您可以用 x402 402 挑战为自己的 MCP 工具定价。

两个工作,一个套餐

通过 MCP 支出。通过 MCP 收费。

第一项工作:让代理在其主机内部使用钱包。@blockchain0x/mcp服务器是@blockchain0x/node SDK的一个薄的无状态代理。它向Claude Desktop、Cursor或VS Code公开五个钱包工具,并且您的API密钥的范围、津贴和每个周期的上限由后端强制执行,正如其他API调用一样。服务器不持有密钥,也不存储任何内容。

第二项工作:向代理收费以调用您的工具。MCP使工具调用无摩擦,这很好,直到您的服务器免费消耗出口、令牌和第三方API费用。402支付要求模式正好适用。requirePayment生成一个带有托管结账URL的结构化x402挑战;当工具未支付时,您返回它,并在支付结算后让调用通过。支持x402的客户端自动支付;其余的则将URL呈现给人类。

运行服务器

有两种运行方式。托管的一个无需安装。

通过 stdio 使用 npx 在本地运行它(您的密钥保留在您的机器上),或将任何 MCP 主机指向托管的 Streamable HTTP URL,并将密钥作为 Bearer 令牌传递。两者都直接进入主机的 MCP 配置。使用 Node 20+ 进行本地路径。

本地 - STDIO (npx)
{
  "mcpServers": {
    "blockchain0x": {
      "command": "npx",
      "args": ["-y", "@blockchain0x/mcp"],
      "env": {
        "BLOCKCHAIN0X_API_KEY": "sk_live_...",
        "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com"
      }
    }
  }
}
托管 - 可流式传输HTTP
{
  "mcpServers": {
    "blockchain0x": {
      "url": "https://mcp.blockchain0x.com/mcp",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

BLOCKCHAIN0X_API_KEY是来自您仪表板的sk_test_测试网或sk_live_主网密钥;BLOCKCHAIN0X_API_BASE_URL默认为https://api.blockchain0x.com。服务器将您的密钥转发到后端并不存储任何内容,因此该密钥的范围和上限正是代理可以执行的操作。它暴露的五个工具是:get_wallet、list_wallets、get_transaction、send_payment和settle_payment_request。

为你的工具定价

使用真实的requirePayment构建器限制工具。

requirePayment 是来自 @blockchain0x/mcp 的纯函数。当工具未付费时调用它,它铸造一个 x402 402 挑战(价格、您的钱包、托管结账 URL),您将该主体以标准 MCP 错误形状返回。它不会包装您的处理程序,也不会跟踪谁付款 - 那部分是您的,这使得助手保持小巧和诚实。

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

当代理调用未支付的 search_docs 时,它会收到 402 主体。支持 x402 的客户端会自动支付;Claude Desktop 和 Cursor 显示人类的结账 URL。一旦支付结算,您标记该呼叫者已付款(下一部分),调用就会通过。更喜欢普通 HTTP 服务器而不是 MCP 服务器?接收端的 x402 适配器 - createX402Middleware 用于 Express,createX402Plugin 用于 Fastify - 在框架层执行相同的限制。

确认支付

当webhook到达时标记调用者为已支付。

当支付结算时,Blockchain0x 会将签名的 payment.received 事件 POST 到您的 webhook URL。使用 Node SDK 中的 webhooks.verify 进行验证,然后在您已有的存储中记录呼叫者已付款。没有提供的收据缓存可供配置 - 您拥有这一部分,这意味着没有意外的基础设施。

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 以恒定时间执行 HMAC-SHA256,并返回一个区分的联合,因此您可以在 result.ok 上分支,而无需 try/catch。读取原始主体,而不是解析的副本,因为签名覆盖确切的字节。发货的事件包括 payment.received、payment.sent、wallet.deployed 和 webhook.test;支付到您的钱包是 payment.received。您持久化 '此调用者已付款' 的位置 - 数据库中的一行、Redis 中的一个键、单个进程的内存映射 - 由您决定。

源代码和文档

服务器是开放的且无状态的。阅读它。

MCP server 和 requirePayment builder 只是对 Node SDK 的薄封装,没有 database 也没有 volumes,因此可审计内容不多 - 这正是设计目标。原生 MCP OAuth 2.1 是后续规划;粘贴 key 的路径会先上线,因为它复用了现有的 API-key trust model。

github.com/tosh-labs/blockchain0x-node

完整的 tool list、scopes 和 hosted environment URLs 已记录在 the docs 中。staging 和 dev hosted endpoints 与 production 并存,便于你在接入真实 key 前进行测试。

常见陷阱

五个需要避免的 MCP 特定陷阱。

这些来自在生产中运行付费MCP服务器的操作员。大多数与缓存架构和MCP协议的特定错误格式有关。

PITFALL 1

requirePayment 是构建器,而不是中间件

requirePayment 是一个纯函数:您调用它,它返回 { status: 402, body },当工具未付费时您将该主体返回。它不会包装您的处理程序,也不会跟踪谁付款,并且不接受原因或缓存窗口选项 - 仅 amountUsdc、payTo、hostedUrl 和一个可选的网络和描述。跟踪支付状态是您的工作:数据库中的一行、您自己的 Redis 中的一个键、适合的任何东西。Blockchain0x 提供挑战构建器和结算 webhook,而不是收据缓存。

PITFALL 2

stdio 将您的密钥保留在您的机器上

使用 npx 和环境中的 BLOCKCHAIN0X_API_KEY 运行服务器,密钥永远不会离开您的机器 - 它是在本地读取的,而不是作为网络头发送的。托管的 URL 是相反的交易:零安装,但您将密钥作为 Bearer 令牌粘贴到 mcp.blockchain0x.com。选择 stdio 作为开发者自己的机器,托管用于共享部署。

PITFALL 3

仅仪表板的表面未公开

服务器是一个薄的无状态代理,位于 @blockchain0x/node 之上。它提供正好五个工具:get_wallet、list_wallets、get_transaction、send_payment、settle_payment_request。身份更改、API 密钥和 webhook CRUD、提款和账单在 API 密钥身份验证下被严格阻止,服务器永远不会超出 SDK 到达它们。不要指望有工具来处理这些 - 它们是设计上存在于仪表板中的。

PITFALL 4

send_payment 是幂等的,不会重试

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

requirePayment 上的 amountUsdc 是一个 6 位小数的字符串

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.

常见问题

三个MCP特定问题。

这是否可以开箱即用地与 Claude Desktop、Cursor 和 VS Code 一起使用?

是的。它们是标准的 MCP 主机。将 blockchain0x 服务器添加到主机的 MCP 配置中 - stdio 块(npx + 您的密钥在环境中)或托管块(mcp.blockchain0x.com URL + Bearer 密钥) - 然后这五个钱包工具就会出现在代理面前。从那里,代理可以读取钱包、检查交易、发送 USDC 支付或结算 x402 发票,所有这些都在您的 API 密钥已经强制执行的范围、津贴和上限内。

一旦服务器连接,代理实际上可以做什么?

五件事,与五个工具相匹配:get_wallet 和 list_wallets 读取钱包元数据,get_transaction 查询交易的状态和哈希,send_payment 进行出站 USDC 支付,settle_payment_request 结算带有链上证明的 x402 发票。这就是整个表面。服务器是无状态代理:它不持有密钥,不存储任何内容,无法访问仅限仪表板的操作,因此代理无法旋转密钥、改变身份或通过它进行提款。

我如何向代理收费以调用我自己的MCP工具?

使用 @blockchain0x/mcp 导出的真实 requirePayment 辅助函数。当调用者尚未付款时,在您的工具内部调用 requirePayment({ amountUsdc, payTo, hostedUrl }),并返回生成的 402 主体 - 它与 @blockchain0x/x402 兼容。您跟踪谁已付款(payment.received 的 webhook 加上您自己的存储),并在他们付款后让调用通过。对于普通 HTTP 服务器而不是 MCP 服务器,接收端 x402 适配器(为 Express 创建 createX402Middleware,为 Fastify 创建 createX402Plugin)在框架层执行相同的工作。

通过MCP给您的代理一个钱包。

一个配置块连接钱包工具。当你想要为自己的工具收费时,真正的requirePayment构建器。免费开始。