Bỏ qua nội dung chính
TÍCH HỢP MCP

Blockchain0x qua MCP.

Cung cấp cho bất kỳ máy chủ MCP nào - Claude Desktop, Cursor, VS Code - các công cụ ví tác nhân với một khối cấu hình. Và khi bạn muốn tính phí cho các công cụ của riêng mình, hãy sử dụng bộ xây dựng requirePayment x402 thực tế.

CÂU TRẢ LỜI NGẮN

Máy chủ @blockchain0x/mcp cung cấp cho một máy chủ MCP năm công cụ ví tác nhân: đọc một ví, liệt kê các ví, kiểm tra một giao dịch, gửi một khoản thanh toán USDC và giải quyết một hóa đơn x402. Chạy nó với npx @blockchain0x/mcp (khóa của bạn ở lại trên máy của bạn) hoặc chỉ định vào URL được lưu trữ. Riêng biệt, gói này xuất khẩu requirePayment để bạn có thể đặt giá cho các công cụ MCP của riêng mình với một thách thức x402 402.

HAI CÔNG VIỆC, MỘT GÓI

Chi tiêu qua MCP. Tính phí qua MCP.

Công việc đầu tiên: cho phép một tác nhân SỬ DỤNG một ví từ bên trong máy chủ của nó. Máy chủ @blockchain0x/mcp là một proxy mỏng, không trạng thái trên SDK @blockchain0x/node. Nó cung cấp năm công cụ ví cho Claude Desktop, Cursor hoặc VS Code, và phạm vi, khoản trợ cấp và giới hạn theo kỳ của khóa API của bạn được thực thi bởi backend giống như bất kỳ cuộc gọi API nào khác. Máy chủ không giữ khóa và không lưu trữ gì cả.

Công việc thứ hai: tính phí cho các tác nhân gọi CÔNG CỤ của BẠN. MCP đã làm cho việc gọi công cụ trở nên dễ dàng, điều này thật tuyệt cho đến khi máy chủ của bạn tiêu tốn chi phí ra ngoài, token và chi phí API bên thứ ba miễn phí. Mô hình 402 Payment Required hoàn toàn phù hợp ở đây. requirePayment tạo ra một thách thức x402 có cấu trúc với một URL thanh toán được lưu trữ; bạn trả lại nó khi một công cụ chưa được thanh toán và cho phép cuộc gọi đi qua khi thanh toán được thực hiện. Các khách hàng nói x402 tự động thanh toán; phần còn lại hiển thị URL cho một con người.

CHẠY MÁY CHỦ

Hai cách để chạy nó. Không cần cài đặt cho cái được lưu trữ.

Chạy nó cục bộ qua stdio với npx (khóa của bạn ở lại trên máy của bạn), hoặc chỉ định bất kỳ máy chủ MCP nào tại URL HTTP Streamable được lưu trữ và truyền khóa dưới dạng mã thông báo Bearer. Cả hai đều thả thẳng vào cấu hình MCP của máy chủ. Node 20+ cho đường dẫn cục bộ.

ĐỊA PHƯƠNG - STDIO (npx)
{
  "mcpServers": {
    "blockchain0x": {
      "command": "npx",
      "args": ["-y", "@blockchain0x/mcp"],
      "env": {
        "BLOCKCHAIN0X_API_KEY": "sk_live_...",
        "BLOCKCHAIN0X_API_BASE_URL": "https://api.blockchain0x.com"
      }
    }
  }
}
ĐƯỢC LƯU TRỮ - HTTP CÓ THỂ PHÁT
{
  "mcpServers": {
    "blockchain0x": {
      "url": "https://mcp.blockchain0x.com/mcp",
      "headers": { "Authorization": "Bearer sk_live_..." }
    }
  }
}

BLOCKCHAIN0X_API_KEY là một khóa sk_test_ testnet hoặc sk_live_ mainnet từ bảng điều khiển của bạn; BLOCKCHAIN0X_API_BASE_URL mặc định là https://api.blockchain0x.com. Máy chủ chuyển tiếp khóa của bạn đến backend và không lưu trữ gì, vì vậy phạm vi và giới hạn trên khóa đó chính xác là những gì đại lý có thể làm. Năm công cụ mà nó cung cấp: get_wallet, list_wallets, get_transaction, send_payment và settle_payment_request.

ĐỊNH GIÁ CÔNG CỤ CỦA BẠN

Kiểm soát một công cụ với bộ xây dựng requirePayment thực tế.

requirePayment là một hàm thuần túy từ @blockchain0x/mcp. Bạn gọi nó khi một công cụ chưa được thanh toán, nó tạo ra một thử thách x402 402 (giá, ví của bạn, một URL thanh toán được lưu trữ), và bạn trả lại thân đó theo hình dạng lỗi MCP tiêu chuẩn. Nó không bọc bộ xử lý của bạn và không theo dõi ai đã thanh toán - phần đó là của bạn, điều này giữ cho trợ lý nhỏ gọn và trung thực.

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

Khi agent gọi search_docs mà chưa thanh toán, nó sẽ nhận body 402. Các client hỗ trợ x402 sẽ thanh toán tự động; Claude Desktop và Cursor hiển thị checkout URL cho người dùng. Khi thanh toán được xác nhận, bạn đánh dấu bên gọi đã trả tiền (xem phần tiếp theo) và lệnh sẽ đi qua. Muốn dùng plain HTTP server thay vì MCP? Bộ chuyển tiếp x402 phía nhận - createX402Middleware cho Express, createX402Plugin cho Fastify - thực hiện cùng cơ chế chặn ở lớp framework.

XÁC NHẬN THANH TOÁN

Đánh dấu người gọi đã thanh toán khi webhook đến.

Khi một khoản thanh toán được xác nhận, Blockchain0x sẽ POST một sự kiện payment.received đã ký đến webhook URL của bạn. Xác minh bằng webhooks.verify từ Node SDK, sau đó ghi nhận rằng bên gọi đã thanh toán trong bất kỳ kho lưu trữ nào bạn đang dùng. Không có receipt cache đi kèm để cấu hình - phần đó do bạn tự quản, nghĩa là không có hạ tầng phát sinh bất ngờ.

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 thực hiện HMAC-SHA256 trong thời gian không đổi và trả về một liên minh phân biệt, vì vậy bạn phân nhánh trên result.ok mà không cần try/catch. Đọc thân thô, không phải bản sao đã phân tích, vì chữ ký bao trùm các byte chính xác. Các sự kiện được gửi là payment.received, payment.sent, wallet.deployed, và webhook.test; một khoản thanh toán vào ví của bạn là payment.received. Nơi bạn duy trì 'người gọi này đã thanh toán' - một hàng trong cơ sở dữ liệu, một khóa Redis, một bản đồ trong bộ nhớ cho một quy trình đơn - là tùy thuộc vào bạn.

NGUỒN VÀ TÀI LIỆU

Máy chủ là mở và không trạng thái. Đọc nó.

Máy chủ MCP và builder requirePayment chỉ là lớp chuyển tiếp mỏng trên Node SDK, không có cơ sở dữ liệu và không có volume, nên gần như không có nhiều thứ để kiểm tra - đó chính là điểm mấu chốt. MCP OAuth 2.1 gốc là bước tiếp theo đã lên kế hoạch; luồng dán key sẽ ra mắt trước vì nó tái sử dụng mô hình tin cậy API key hiện có.

github.com/tosh-labs/blockchain0x-node

Danh sách đầy đủ các tool, các scope và URL của môi trường hosted được tài liệu hóa tại the docs. Các endpoint hosted cho staging và dev tồn tại song song với production để bạn kiểm thử trước khi dùng key thật.

CÁC CẠNH TRÁNH THƯỜNG GẶP

Năm cạm bẫy cụ thể về MCP cần tránh.

Những điều này đến từ các nhà điều hành đang chạy các máy chủ MCP trả phí trong sản xuất. Hầu hết liên quan đến kiến trúc bộ nhớ đệm và định dạng lỗi cụ thể của giao thức MCP.

PITFALL 1

requirePayment là một trình xây dựng, không phải middleware

requirePayment là một hàm thuần túy: bạn gọi nó, nó trả về { status: 402, body }, và bạn trả lại thân đó khi một công cụ chưa được thanh toán. Nó không bọc bộ xử lý của bạn, nó không theo dõi ai đã thanh toán, và nó không nhận lý do hoặc tùy chọn cửa sổ bộ nhớ đệm - chỉ amountUsdc, payTo, hostedUrl, và một mạng lưới và mô tả tùy chọn. Theo dõi trạng thái thanh toán là công việc của bạn: một hàng trong cơ sở dữ liệu của bạn, một khóa trong Redis của riêng bạn, bất cứ điều gì phù hợp. Blockchain0x cung cấp trình xây dựng thử thách và webhook thanh toán, không phải bộ nhớ đệm biên nhận.

PITFALL 2

stdio giữ khóa của bạn trên máy của bạn

Chạy máy chủ với npx và BLOCKCHAIN0X_API_KEY trong môi trường, và khóa không bao giờ rời khỏi hộp của bạn - nó được đọc cục bộ, không được gửi dưới dạng tiêu đề mạng. URL được lưu trữ là giao dịch ngược lại: không cài đặt, nhưng bạn dán khóa dưới dạng mã thông báo Bearer vào mcp.blockchain0x.com. Chọn stdio cho máy của nhà phát triển, được lưu trữ cho một triển khai chia sẻ.

PITFALL 3

Các bề mặt chỉ có bảng điều khiển không được hiển thị

Máy chủ là một proxy mỏng, không trạng thái trên @blockchain0x/node. Nó cung cấp chính xác năm công cụ: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request. Thay đổi danh tính, CRUD API-key và webhook, rút tiền và thanh toán đều bị chặn cứng dưới xác thực API-key và máy chủ không bao giờ truy cập qua SDK đến chúng. Đừng mong đợi một công cụ cho những điều đó - chúng sống trong bảng điều khiển theo thiết kế.

PITFALL 4

send_payment là idempotent và không tự động thử lại

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 trong requirePayment là một chuỗi có 6 chữ số thập phân

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.

CÂU HỎI THƯỜNG GẶP

Ba câu hỏi cụ thể về MCP.

Điều này có hoạt động với Claude Desktop, Cursor và VS Code ngay lập tức không?

Có. Chúng là các MCP host tiêu chuẩn. Thêm blockchain0x server vào cấu hình MCP của host - khối stdio (npx + key của bạn trong env) hoặc khối hosted (URL mcp.blockchain0x.com + Bearer key) - và năm wallet tools sẽ xuất hiện với agent. Từ đó agent có thể đọc wallet, kiểm tra giao dịch, gửi thanh toán USDC, hoặc tất toán hóa đơn x402, tất cả đều trong phạm vi, allowance và các cap mà API key của bạn đã thực thi.

Đại lý thực sự có thể làm gì khi máy chủ được kết nối?

Năm điều, tương ứng với năm công cụ: get_wallet và list_wallets đọc siêu dữ liệu ví, get_transaction kiểm tra trạng thái và băm của một giao dịch, send_payment thực hiện một khoản thanh toán USDC ra ngoài, và settle_payment_request thanh toán một hóa đơn x402 với bằng chứng trên chuỗi. Đó là toàn bộ bề mặt. Máy chủ là một proxy không trạng thái: nó không giữ khóa, không lưu trữ gì và không thể truy cập các hoạt động chỉ có trong bảng điều khiển, vì vậy một tác nhân không thể xoay vòng khóa, thay đổi danh tính hoặc rút tiền thông qua nó.

Làm thế nào để tôi tính phí cho các tác nhân gọi công cụ MCP CỦA TÔI?

Sử dụng trợ giúp requirePayment thực sự được xuất khẩu bởi @blockchain0x/mcp. Gọi requirePayment({ amountUsdc, payTo, hostedUrl }) bên trong công cụ của bạn khi người gọi chưa thanh toán, và trả về thân 402 kết quả - nó tương thích với @blockchain0x/x402. Bạn theo dõi ai đã thanh toán (một webhook trên payment.received cộng với cửa hàng của riêng bạn), và bạn cho phép cuộc gọi thông qua khi họ đã thanh toán. Đối với một máy chủ HTTP thông thường thay vì một máy chủ MCP, bộ chuyển đổi x402 phía nhận (createX402Middleware cho Express, createX402Plugin cho Fastify) thực hiện cùng một công việc ở lớp khung.

Cung cấp cho tác nhân của bạn một ví qua MCP.

Một khối cấu hình để kết nối các công cụ ví. Trình xây dựng requirePayment thực sự khi bạn muốn tính phí cho riêng mình. Miễn phí để bắt đầu.