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 কনফিগারেশনে সোজা প্রবাহিত হয়। স্থানীয় পথের জন্য নোড 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_ টেস্টনেট বা 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 ত্রুটি আকারে ফেরত দেন। এটি আপনার হ্যান্ডলারকে মোড়ানো করে না এবং এটি ট্র্যাক করে না যে কে পেমেন্ট করেছে - সেই অংশটি আপনার, যা সহায়কটিকে ছোট এবং সৎ রাখে।
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 পৃষ্ঠায়। একবার পেমেন্ট সেটেল হলে আপনি সেই কলারকে পেইড চিহ্নিত করেন (পরবর্তী বিভাগ) এবং কলটি চলে যায়। MCP এর পরিবর্তে একটি সাধারণ HTTP সার্ভার পছন্দ করেন? রিসিভ-সাইড x402 অ্যাডাপ্টার - createX402Middleware Express-এর জন্য, createX402Plugin Fastify-এর জন্য - ফ্রেমওয়ার্ক স্তরে একই গেটিং করে।
ওয়েবহুকটি আসলে কলকারীকে পেইড চিহ্নিত করুন।
যখন একটি পেমেন্ট সেটেল হয়, Blockchain0x আপনার ওয়েবহুক URL-এ একটি স্বাক্ষরিত payment.received ইভেন্ট POST করে। এটি যাচাইকরণ করুন 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 ছাড়াই। কাঁচা শরীরটি পড়ুন, একটি বিশ্লেষিত কপি নয়, কারণ স্বাক্ষর সঠিক বাইটগুলি কভার করে। প্রেরিত ইভেন্টগুলি হল payment.received, payment.sent, wallet.deployed, এবং webhook.test; আপনার ওয়ালেটে একটি পেমেন্ট হল payment.received। 'এই কলার পেমেন্ট করেছে' আপনি কোথায় স্থায়ী করেন - একটি ডেটাবেস সারি, একটি Redis কী, একটি একক প্রক্রিয়ার জন্য একটি ইন-মেমরি ম্যাপ - এটি আপনার কল।
সার্ভারটি খোলা এবং স্টেটলেস। এটি পড়ুন।
MCP সার্ভার এবং requirePayment নির্মাতা Node SDK এর উপর একটি পাতলা পাস-থ্রু, কোন ডেটাবেস এবং কোন ভলিউম ছাড়াই, তাই অডিট করার জন্য তেমন কিছু নেই - যা মূল বিষয়। নেটিভ MCP OAuth 2.1 একটি পরিকল্পিত পরবর্তী পদক্ষেপ; পেস্টেড-কী পথটি প্রথমে শিপ হয় কারণ এটি বিদ্যমান API-কী ট্রাস্ট মডেল পুনরায় ব্যবহার করে।
github.com/tosh-labs/blockchain0x-nodeপূর্ণ টুলের তালিকা, স্কোপ এবং হোস্টেড পরিবেশের URL ডকস এ নথিভুক্ত। পরীক্ষার জন্য উৎপাদনের পাশাপাশি স্টেজিং এবং ডেভ হোস্টেড এন্ডপয়েন্টগুলি বিদ্যমান রয়েছে, আগে আপনি একটি বাস্তব কী সেট করেন।
পাঁচটি MCP-নির্দিষ্ট ফাঁদ এড়ানো উচিত।
এগুলি উৎপাদনে অর্থপ্রদানকৃত MCP সার্ভার চালানো অপারেটরদের কাছ থেকে আসে। বেশিরভাগ ক্যাশ আর্কিটেকচার এবং MCP প্রোটোকলের নির্দিষ্ট ত্রুটি ফরম্যাটের সাথে সম্পর্কিত।
requirePayment একটি নির্মাতা, মিডলওয়্যার নয়
requirePayment একটি বিশুদ্ধ ফাংশন: আপনি এটি কল করেন, এটি { status: 402, body } ফেরত দেয়, এবং আপনি যখন একটি টুল অ-পেইড হয় তখন সেই শরীরটি ফেরত দেন। এটি আপনার হ্যান্ডলারকে মোড়ানো করে না, এটি ট্র্যাক করে না যে কে পেমেন্ট করেছে, এবং এটি কোন কারণ বা ক্যাশ-উইন্ডো অপশন নেয় না - কেবল amountUsdc, payTo, hostedUrl, এবং একটি ঐচ্ছিক নেটওয়ার্ক এবং বর্ণনা। পেমেন্টের অবস্থান ট্র্যাক করা আপনার কাজ: আপনার ডেটাবেসে একটি সারি, আপনার নিজস্ব Redis-এ একটি কী, যা কিছুই ফিট করে। Blockchain0x চ্যালেঞ্জ নির্মাতা এবং নিষ্পত্তি ওয়েবহুক পাঠায়, একটি রসিদ ক্যাশ নয়।
stdio আপনার কী আপনার মেশিনে রাখে
npx এবং BLOCKCHAIN0X_API_KEY পরিবেশে দিয়ে সার্ভারটি চালান, এবং কীটি কখনও আপনার বাক্স ছাড়ে না - এটি স্থানীয়ভাবে পড়া হয়, নেটওয়ার্ক হেডার হিসাবে পাঠানো হয় না। হোস্ট করা URL বিপরীত বাণিজ্য: শূন্য ইনস্টল, কিন্তু আপনি কীটি mcp.blockchain0x.com এ একটি Bearer টোকেন হিসাবে পেস্ট করেন। একটি ডেভেলপারের নিজের যন্ত্রের জন্য stdio বেছে নিন, একটি শেয়ার্ড ডিপ্লয়মেন্টের জন্য হোস্ট করা।
ড্যাশবোর্ড-শুধুমাত্র পৃষ্ঠাগুলি প্রকাশিত হয় না
সার্ভারটি @blockchain0x/node-এর উপর একটি পাতলা, স্টেটলেস প্রোক্সি। এটি ঠিক পাঁচটি টুল প্রকাশ করে: get_wallet, list_wallets, get_transaction, send_payment, settle_payment_request। পরিচয় পরিবর্তন, API-কী এবং ওয়েবহুক CRUD, প্রত্যাহার, এবং বিলিং API-কী প্রমাণীকরণের অধীনে কঠোরভাবে ব্লক করা হয়েছে এবং সার্ভার কখনও SDK-এর বাইরে পৌঁছায় না। সেগুলির জন্য একটি টুলের আশা করবেন না - এগুলি ডিজাইনের দ্বারা ড্যাশবোর্ডে থাকে।
send_payment idempotent এবং পুনরায় চেষ্টা করে না
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".
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.