10 मिनिटांत तुमचा MCP सर्व्हर मनीटायझ करा.
Install @blockchain0x/mcp, आणि एका प्रीमियम साधनात requirePayment कॉल करा जेव्हा कॉलरने पैसे दिलेले नसतील - हे एक x402 402 आव्हान तयार करते ज्यात एक होस्टेड चेकआउट URL असतो, जो तुम्ही परत करता. एकदा payment.received वेबहुक निपटारा पुष्टी करतो, तुम्ही तुमच्या स्वतःच्या स्टोअरमध्ये कॉलरला पैसे दिलेले म्हणून चिन्हांकित करता आणि साधन चालते. मोफत साधने मोफत राहतात. साध्या HTTP सर्व्हरसाठी, रिसीव-साइड x402 अडॅप्टर त्याच कामाचे कार्य करते.
तुम्ही सुरू करण्यापूर्वी.
- Node किंवा Python मध्ये अधिकृत Model Context Protocol SDK वापरणारा एक कार्यरत MCP सर्व्हर. जर तुमच्याकडे एक अद्याप नसेल, तर प्रथम उपधारक टेम्पलेटसह एक स्कॅफोल्ड करा.
- एक Blockchain0x खाते आणि एक एजंट प्रोफाइल (5-मिनिट सेटअपसाठी add-payments-to-agent मार्गदर्शक पहा).
- एक API की (या मार्गदर्शकासाठी
sk_test_वापरा). - कोणत्या व्यक्तीने पैसे दिले आहेत हे लक्षात ठेवण्यासाठी एक लहान स्टोअर (एक डेटाबेस पंक्ती किंवा Redis की) - तुमचा कोड याचा मालक आहे, जो पेमेंट वेबहुकद्वारे अपडेट केला जातो.
- आपण कोणत्या साधनांसाठी शुल्क आकारायचे आहे आणि प्रत्येक कॉलसाठी किंमत याबद्दल स्पष्ट समज. डिझाइन पॅटर्नसाठी सशुल्क MCP साधन शब्दकोश नोंद पहा.
पॅकेज स्थापित करा.
@blockchain0x/mcp exports requirePayment, a pure function that mints an x402 402 challenge for a tool. It is npm (TypeScript) only. If you run a plain HTTP server instead of an MCP one, install the receive-side x402 adapter and gate routes with it.
# Gate your own MCP tools with the requirePayment 402 builder:
npm install @blockchain0x/mcp
# Or gate a plain HTTP server with the receive-side x402 adapter + SDK:
npm install @blockchain0x/x402 @blockchain0x/noderequirePayment सह एक साधन गेट करा.
Inside the tool, check your own paid-state for the caller. If they have not paid, call requirePayment and return the resulting 402 body; if they have, run the work. requirePayment is a pure builder - it does not wrap the handler and does not track payment, so the gating policy stays in your code.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { requirePayment } from "@blockchain0x/mcp";
import { z } from "zod";
const server = new McpServer({ name: "premium-data-mcp", version: "1.0.0" });
server.tool(
"get_quote_realtime",
"Real-time quote (paid)",
{ ticker: z.string() },
async ({ ticker }, extra) => {
if (!hasPaid(extra)) {
// Pure function: mint an x402 402 challenge and hand the body back.
const { body } = requirePayment({
amountUsdc: "0.005",
payTo: "0xYourWallet",
hostedUrl: "https://pay.blockchain0x.com/checkout/abc",
});
return { content: [{ type: "text", text: JSON.stringify(body) }], isError: true };
}
const quote = await fetchLiveQuote(ticker);
return { content: [{ type: "text", text: JSON.stringify(quote) }] };
},
);import express from "express";
import { createX402Middleware } from "@blockchain0x/x402/server/express";
import { createClient } from "@blockchain0x/node";
const sdk = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! });
const app = express();
// Not an MCP server? Gate a plain HTTP route the same way. The middleware
// answers unpaid requests with a 402 and lets paid ones through.
// Configure the price and recipient per the x402 docs.
app.use("/quote", createX402Middleware({ sdk }));402 बॉडी requirePayment एक न भरलेल्या कॉलरकडे परत करते:
// requirePayment returns { status: 402, body }. The body an unpaid caller sees:
{
"error": "payment_required",
"amountUsdc": "0.005",
"payTo": "0xYourWallet",
"hostedUrl": "https://pay.blockchain0x.com/checkout/abc",
"network": "mainnet"
}भुगतानाची पुष्टी करा, नंतर कोणत्या व्यक्तीने पैसे दिले हे लक्षात ठेवा.
When a caller pays the checkout, Blockchain0x POSTs a signed payment.received event to your webhook. Verify it with webhooks.verify from @blockchain0x/node, then write the paid state to a store you control - a database row, a Redis key, your call. That store is what the tool checks in Step 2. There is no shipped receipt cache; you own where paid-state lives and how long it lasts.
import express from "express";
import { webhooks } from "@blockchain0x/node";
const app = express();
app.use(express.raw({ type: "application/json" }));
app.post("/webhooks/payment", (req, res) => {
const result = webhooks.verify({
headers: req.headers,
rawBody: req.body, // RAW bytes
secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
});
if (!result.ok) return res.status(400).json({ code: result.code });
if (result.eventType === "payment.received") {
// Remember the payer however you like - a DB row, a Redis key, your call.
markPaid(result.eventId);
}
res.status(200).send("ok");
});एक पेमेंट किती काळ प्रवेश देते हे तुमचे निर्णय आहे - एकल कॉल, एक सत्र, एक तास. तुमच्या साधनाचे मूल्य कसे ठरवायचे यानुसार पैसे दिलेल्या स्थितीच्या कीवर एक समाप्ती सेट करा. सामान्य सत्र एक पेमेंट पुन्हा वापरते, इतके लांब की दुरुपयोग मर्यादित आहे.
तैनात करा आणि सत्यापित करा.
सर्व्हर शिप करा. मोफत साधनांनी त्यांचा परिणाम त्वरित परत करावा; गेटेड साधनांनी ताज्या क्लायंटकडून पहिल्या कॉलवर 402 शरीर परत करावे, नंतर त्या कॉलरला पैसे दिले म्हणून चिन्हांकित केल्यानंतर चालवा. लाइव्ह होण्यापूर्वी Base Sepolia विरुद्ध sk_test_ कीवर दोन्ही मार्ग सत्यापित करा.
पहिल्या दिवशी पाहण्यासाठी दोन सिग्नल: परत केलेल्या 402 च्या संख्येची (तुमचा टॉप-ऑफ-फनल) आणि 402 नंतर यशस्वी साधन चालण्याची संख्या (तुमचा रूपांतरण). जर रूपांतरण अपेक्षेपेक्षा खूप कमी असेल, तर किंमत कदाचित चुकीची आहे. तुमच्या पेड-स्टेट स्टोअरच्या हिट दरावर देखील लक्ष ठेवा - जर ते शून्याच्या जवळ असेल, तर तुमचा प्रवेश विंडो खूप छोटा आहे आणि भरणा करणाऱ्या कॉलर्सना पुन्हा भरण्यास सांगितले जात आहे.
पाच गोष्टी ज्या पहिल्यांदा MCP कमाई करणाऱ्यांना त्रास देतात.
अनपेक्षितपणे फ्री साधने गेट करणे
प्रत्येक साधन 'फक्त परिस्थितीत' गेट करणे मोहक आहे. करू नका. सशुल्क MCP सर्व्हरचे संपूर्ण मूल्य म्हणजे मोफत साधने सशुल्क साधनांसोबत एकाच सर्व्हरवर सह-अस्तित्वात असतात, त्यामुळे क्लायंट मोफत शोध आणि मेटाडेटा साधने वापरू शकतो. फक्त त्या साधनांसाठी 402 तयार करा जे प्रत्यक्षात प्रीमियम संसाधने वापरतात; उर्वरित साध्या परिणामांप्रमाणे सोडा.
requirePayment एक बिल्डर आहे, मिडलवेअर नाही
requirePayment एक शुद्ध कार्य आहे: तुम्ही तेव्हा कॉल करता जेव्हा एक टूल भरणा केलेले नसते, तेव्हा ते { status: 402, body } परत करते, आणि तुम्ही शरीर परत करता. हे तुमच्या हँडलरला लपवित नाही आणि कोणत्या व्यक्तीने भरणा केला हे ट्रॅक करत नाही. हे amountUsdc, payTo, hostedUrl, आणि एक वैकल्पिक नेटवर्क आणि वर्णन घेते - काहीही नाही. कॉल करणाऱ्याने भरणा केला आहे का हे तुमच्या स्वतःच्या स्टोअरवर चालवलेले एक चेक आहे.
पाठवलेला रसीद कॅश नाही.
Blockchain0x 402 बिल्डर आणि सेटलमेंट वेबहुक पाठवते, रसीद-स्टोर सहाय्यक नाही. तुम्ही ठरवता की 'हा कॉलर पैसे दिले' कुठे आहे - एक डेटाबेस पंक्ती, एक Redis की, एक एकल प्रक्रियेसाठी इन-मेमरी नकाशा - आणि तुम्ही ते बदलता जेव्हा payment.received वेबहुक येतो. त्यामुळे धोरण (पैसे किती काळ प्रवेश देते) पूर्णपणे तुमच्या हातात राहते.
क्लायंटने असलेली रसीद विश्वास ठेवणे
कॉलरला पैसे दिले असल्याचे सांगू देऊ नका. सत्याचा स्रोत म्हणजे payment.received वेबहुक, जो तुमच्या वेबहुक गुप्ततेच्या विरुद्ध webhooks.verify (किंवा दस्तऐवजीकरण केलेला HMAC) सह सत्यापित केला जातो. एक सत्यापित इव्हेंटनंतरच भरणार्याला पैसे दिले म्हणून चिन्हांकित करा, आणि त्या सर्व्हर-साइड स्थितीवर टूल गेट करा - कधीही क्लायंटने पाठवलेल्या गोष्टीवर नाही.
पेड-टूल लेटन्सीवर कोणतीही मेट्रिक्स नाही
क्लायंट आणि साधन कार्यान्वयन यामध्ये एक पेमेंट स्टेप ठेवणे कॉलरला पहिल्या कॉलवर पैसे देण्यासाठी आणि सेट करण्यासाठी लागणारा वेळ वाढवते, नंतर तुम्ही त्यांना पैसे दिले म्हणून चिन्हांकित केल्यावर जवळजवळ शून्य होते. ग्राहक तक्रार करताना 'साधन मंद आहे' आणि 'पेमेंट मंद आहे' हे सांगण्यासाठी दोन्ही शाखांना उपकरणे ठेवा. मेट्रिकशिवाय तुम्ही बॉटलनेकमध्ये चुकीचे निदान कराल.
एकदा सशुल्क ट्रॅफिक वाहतूक होत आहे.
Monetization झाल्यावर सर्वाधिक उपयुक्त पुढचे टप्पे म्हणजे विश्वासार्ह webhook handling (जेणेकरून payment events चुकणार नाहीत), spend controls (जेणेकरून तुम्ही बांधलेला आणि इतर agents ना पैसे देणारा MCP server मर्यादेत राहील), आणि testnet-first flow (जेणेकरून खरे पैसे न खर्च करता pricing बदल ship करता येतील).
डेव्हलपर्स सर्वात जास्त विचारतात त्या वेबहुक पॅटर्न
प्रॉम्प्ट इंजेक्शन सहन करणारे एजंट खर्च नियंत्रण सेट करा
खऱ्या पैशांशिवाय एजंट पेमेंट्सची चाचणी करा
पूर्ण API संदर्भ docs.blockchain0x.com येथे आहे. संबंधित उत्पादन पृष्ठ: MCP एकत्रीकरण.