Blockchain0x ผ่าน MCP.
ให้โฮสต์ MCP ใด ๆ - Claude Desktop, Cursor, VS Code - เครื่องมือกระเป๋าเงินเอเจนต์ด้วยบล็อกการกำหนดค่าหนึ่ง. และเมื่อคุณต้องการเรียกเก็บเงินสำหรับเครื่องมือของคุณเอง, ใช้ตัวสร้าง requirePayment x402 ที่แท้จริง.
เซิร์ฟเวอร์ @blockchain0x/mcp ให้โฮสต์ MCP ห้าชุดเครื่องมือกระเป๋าเงินตัวแทน: อ่านกระเป๋าเงิน, รายการกระเป๋าเงิน, ตรวจสอบธุรกรรม, ส่งการชำระเงิน USDC และชำระใบแจ้งหนี้ x402 รันด้วย npx @blockchain0x/mcp (กุญแจของคุณจะอยู่ในเครื่องของคุณ) หรือชี้ไปที่ URL ที่โฮสต์ แพ็คเกจนี้ยังส่งออก requirePayment เพื่อให้คุณสามารถตั้งราคาเครื่องมือ MCP ของคุณเองด้วยความท้าทาย x402 402
ใช้จ่ายผ่าน MCP เรียกเก็บเงินผ่าน MCP
งานแรก: ให้ตัวแทนใช้กระเป๋าเงินจากภายในโฮสต์ของมัน เซิร์ฟเวอร์ @blockchain0x/mcp เป็นพร็อกซีที่บางเบาและไม่มีสถานะเหนือ SDK @blockchain0x/node มันเปิดเผยเครื่องมือกระเป๋าเงินห้าอย่างให้กับ Claude Desktop, Cursor หรือ VS Code และขอบเขต, การอนุญาต และขีดจำกัดต่อช่วงเวลาของคีย์ API ของคุณจะถูกบังคับใช้โดยแบ็กเอนด์เช่นเดียวกับการเรียก API อื่นๆ เซิร์ฟเวอร์ไม่มีคีย์และไม่เก็บข้อมูลอะไรเลย
งานที่สอง: เรียกเก็บค่าธรรมเนียมจากตัวแทนเพื่อเรียกเครื่องมือของคุณ MCP ทำให้การเรียกใช้งานเครื่องมือไม่มีความยุ่งยาก ซึ่งเป็นสิ่งที่ดีจนกระทั่งเซิร์ฟเวอร์ของคุณใช้ค่าใช้จ่ายในการออก, โทเค็น และค่าใช้จ่าย API ของบุคคลที่สามฟรี รูปแบบ 402 Payment Required เหมาะสมที่นี่ requirePayment สร้างความท้าทาย x402 ที่มีโครงสร้างพร้อม URL การชำระเงินที่โฮสต์ คุณส่งคืนเมื่อเครื่องมือไม่ได้ชำระเงินและปล่อยให้การเรียกผ่านไปเมื่อการชำระเงินเสร็จสิ้น ลูกค้าที่พูด x402 จะชำระเงินโดยอัตโนมัติ; ที่เหลือจะแสดง URL ให้กับมนุษย์
สองวิธีในการเรียกใช้งาน ไม่มีการติดตั้งสำหรับโฮสต์
รันมันในเครื่องผ่าน stdio ด้วย npx (คีย์ของคุณอยู่ในเครื่องของคุณ), หรือชี้ไปที่โฮสต์ MCP ใดๆ ที่ URL HTTP ที่สามารถสตรีมได้และส่งคีย์เป็น Bearer token ทั้งสองจะถูกนำไปยังการกำหนดค่า MCP ของโฮสต์ Node 20+ สำหรับเส้นทางในเครื่อง.
{ "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 คือคีย์ sk_test_ testnet หรือ sk_live_ mainnet จากแดชบอร์ดของคุณ; 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 มาตรฐาน มันไม่ห่อหุ้มตัวจัดการของคุณและไม่ติดตามว่าใครจ่าย - ส่วนนี้เป็นของคุณ ซึ่งทำให้ตัวช่วยมีขนาดเล็กและซื่อสัตย์
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 unpaid มันจะได้รับเนื้อหา 402 ลูกค้าที่พูด x402 จะชำระเงินโดยอัตโนมัติ; Claude Desktop และ Cursor แสดง URL การชำระเงินสำหรับมนุษย์ เมื่อการชำระเงินถูกชำระ คุณทำเครื่องหมายว่าผู้โทรนั้นได้ชำระเงิน (ส่วนถัดไป) และการโทรจะผ่านไป ชอบเซิร์ฟเวอร์ HTTP ธรรมดามากกว่า MCP? ตัวแปลง x402 ด้านรับ - createX402Middleware สำหรับ Express, createX402Plugin สำหรับ Fastify - ทำการควบคุมเดียวกันที่ชั้นเฟรมเวิร์ก
ทำเครื่องหมายว่าผู้โทรได้ชำระเงินเมื่อ webhook มาถึง
เมื่อการชำระเงินถูกชำระ Blockchain0x POST เหตุการณ์ payment.received ที่ลงนามไปยัง URL webhook ของคุณ ตรวจสอบด้วย webhooks.verify จาก Node SDK จากนั้นบันทึกว่าผู้โทรได้ชำระเงินในร้านค้าที่คุณดำเนินการอยู่แล้ว ไม่มีการจัดส่งแคชใบเสร็จให้กำหนดค่า - คุณเป็นเจ้าของส่วนนี้ ซึ่งหมายความว่าไม่มีโครงสร้างพื้นฐานที่ไม่คาดคิด
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 อ่าน body ดิบ ไม่ใช่สำเนาที่ถูกวิเคราะห์ เพราะลายเซ็นครอบคลุมไบต์ที่แน่นอน เหตุการณ์ที่ส่งมาคือ payment.received, payment.sent, wallet.deployed และ webhook.test; การชำระเงินไปยังกระเป๋าเงินของคุณคือ payment.received ที่คุณเก็บ 'ผู้โทรนี้ได้ชำระเงิน' - แถวในฐานข้อมูล คีย์ Redis แผนที่ในหน่วยความจำสำหรับกระบวนการเดียว - เป็นการเรียกของคุณ.
เซิร์ฟเวอร์เปิดและไม่มีสถานะ อ่านมัน.
MCP server และตัวสร้าง requirePayment เป็นเพียง pass-through แบบบาง ๆ บน Node SDK โดยไม่มีฐานข้อมูลและไม่มี volumes ดังนั้นจึงแทบไม่มีอะไรให้ audit - ซึ่งนั่นคือประเด็น Native MCP OAuth 2.1 เป็นงานถัดไปที่วางแผนไว้; เส้นทางแบบวางคีย์ลงไปก่อนจะเปิดใช้งานก่อน เพราะมันใช้ trust model ของ API key เดิมซ้ำ
github.com/tosh-labs/blockchain0x-nodeรายการเครื่องมือทั้งหมด scopes และ URL ของ hosted environment ถูกอธิบายไว้ที่ the docs. มี hosted endpoints สำหรับ staging และ dev ควบคู่กับ production ให้ทดสอบก่อนที่คุณจะชี้คีย์จริงไปใช้งาน
ห้าหมายที่เฉพาะเจาะจงเกี่ยวกับ MCP ที่ควรหลีกเลี่ยง
สิ่งเหล่านี้มาจากผู้ดำเนินการที่ทำงานเซิร์ฟเวอร์ MCP ที่ต้องชำระเงินในสภาพแวดล้อมการผลิต ส่วนใหญ่เกี่ยวข้องกับสถาปัตยกรรมแคชและรูปแบบข้อผิดพลาดเฉพาะของโปรโตคอล MCP
requirePayment เป็นผู้สร้าง ไม่ใช่ middleware
requirePayment เป็นฟังก์ชันที่บริสุทธิ์: คุณเรียกมัน มันจะส่งกลับ { status: 402, body } และคุณส่งคืน body นั้นเมื่อเครื่องมือไม่ได้ชำระเงิน มันไม่ห่อหุ้มตัวจัดการของคุณ มันไม่ติดตามว่าใครจ่าย และมันไม่รับเหตุผลหรือทางเลือกในการแคช - เพียงแค่ amountUsdc, payTo, hostedUrl และเครือข่ายและคำอธิบายที่เลือกได้ การติดตามสถานะการชำระเงินเป็นงานของคุณ: แถวในฐานข้อมูลของคุณ คีย์ใน Redis ของคุณเอง อะไรก็ได้ที่เหมาะสม Blockchain0x ส่งมอบตัวสร้างความท้าทายและ webhook การตั้งถิ่นฐาน ไม่ใช่แคชใบเสร็จ.
stdio เก็บกุญแจของคุณไว้ในเครื่องของคุณ
รันเซิร์ฟเวอร์ด้วย npx และ BLOCKCHAIN0X_API_KEY ในสภาพแวดล้อม และคีย์จะไม่ออกจากกล่องของคุณ - จะถูกอ่านในเครื่อง ไม่ได้ส่งเป็นเฮดเดอร์เครือข่าย URL ที่โฮสต์เป็นการแลกเปลี่ยนที่ตรงกันข้าม: ไม่มีการติดตั้ง แต่คุณวางคีย์เป็น Bearer token ที่ mcp.blockchain0x.com เลือก stdio สำหรับเครื่องของนักพัฒนา, โฮสต์สำหรับการใช้งานร่วมกัน.
พื้นผิวเฉพาะแดชบอร์ดจะไม่ถูกเปิดเผย
เซิร์ฟเวอร์เป็นพร็อกซีที่บางเบาและไม่มีสถานะเหนือ @blockchain0x/node มันแสดงเครื่องมือห้าชนิด: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request การเปลี่ยนแปลงตัวตน CRUD ของ API-key และ webhook การถอนเงิน และการเรียกเก็บเงินจะถูกบล็อกอย่างเข้มงวดภายใต้การรับรอง API-key และเซิร์ฟเวอร์จะไม่เข้าถึง SDK เพื่อพวกเขา อย่าคาดหวังเครื่องมือสำหรับสิ่งเหล่านั้น - พวกเขาอยู่ในแดชบอร์ดตามการออกแบบ.
send_payment เป็นอิดempotent และไม่ทำการลองใหม่
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 บน requirePayment เป็นสตริงที่มี 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.