10分であなたのMCPサーバーをマネタイズ。
AIエージェントがあなたのMCPサーバーにUSDCで1回ごとに支払うことを許可します。署名されたWebhookと監査ログ付き。x402互換。ドロップインミドルウェア。
あなたはMCPサーバーを構築しました。何千人ものクライアントがそれを無料で使用しています。
あなたはClaude Desktop、Cursor、およびClineクライアントがその機能を必要としていたため、MCPサーバーを出荷しました。噂が広まりました。あなたは今、会ったことのないAIエージェントから1日あたり数千の有料ツールの呼び出しを提供しています。あなたの出口請求は現実です。基盤となるサービスのAPIキーは現実です。あなたのメンテナンスタイムは現実です。収益はゼロです。
あなたには3つの選択肢があります。無料のままにしてインフラにお金を燃やすか、手動のAPIキーの背後にゲートを設けるか(サインアップフォームの摩擦でエージェントトラフィックの95%を失います)。または、AIエージェントが実際に完了できる支払いレイヤーを追加します - これはまさに402 Payment Required + USDCが構築された目的です。
Blockchain0xはオプション3です。あなたのMCPサーバーは私たちのAPIを指しています。AIクライアントが有料ツールを呼び出すと、応答はホストされた支払いURLを持つ402です。クライアント(またはその人間の監督者)はUSDCで支払います。あなたのWebhookが発火します。そのクライアントからの次の呼び出しは成功します。全体の形はx402と呼ばれ、これはCoinbaseがこの正確なパターンのために公開したプロトコルです。
402 Payment Requiredがプログラム的なチェックアウトになる方法。
HTTPステータスコード402は、仕様が最初に書かれて以来存在していますが、標準的な実装はありませんでした。Coinbaseのx402プロトコルがついにそれを提供します。形はシンプルです:あなたのツールは402チャレンジを返します(支払い方法を説明する構造化されたJSONボディ);クライアントは支払い、再試行します;呼び出しは成功します。@blockchain0x/mcpからのrequirePaymentは、そのチャレンジボディを構築します。
{
"error": "payment_required",
"amountUsdc": "0.02",
"payTo": "0xYourMcpAgentAddress",
"hostedUrl": "https://pay.blockchain0x.com/checkout/docs-search",
"network": "mainnet",
"description": "docs search"
}4つの状態
- 未払いの呼び出し: AIクライアントが有料ツールを呼び出します。あなたのハンドラーは自分の支払い状態を確認し、支払者が支払い済みとしてマークされていないことを見つけ、requirePaymentからの402チャレンジボディをツールエラーとして返します。
- 支払い: クライアントはhostedUrlに従ってホストされたチェックアウトに進み、Base上でUSDCの送金を完了します(x402対応ウォレットを介してプログラム的に、またはQRコードを介して手動で)。
- Webhook: Blockchain0xはチェーン確認から数秒以内にpayment.receivedをあなたのエンドポイントに送信します。あなたはそれをwebhooks.verifyで確認し、支払者を自分のストアで支払い済みとして記録します。
- 再試行: クライアントは元のMCPツール呼び出しを再試行します。あなたのハンドラーは、支払者が支払い済みとしてマークされているのを確認し、ツールを実行し、実際の結果を返します。
すべての支払いはあなたのBlockchain0xダッシュボードに記録され、すべてのpayment.receivedウェブフックはあなた自身のログに記録されます。支払い状態とウェブフックハンドラを所有しているため、ツールごとおよび支払者ごとの収益分析は、すでに保存しているデータから得られます。
完全な動作例。
requirePaymentは@blockchain0x/mcpから402チャレンジを構築し、webhooks.verifyは@blockchain0x/nodeから確認を検証します。あなたはその間の2つの小さな部分を所有しています:ツール内の有料状態チェックと、支払者を支払い済みとしてマークするWebhookハンドラーです。以下は、1つの有料ツールとそのWebhookエンドポイントを公開する完全なMCPサーバーです。
import express from "express";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { requirePayment } from "@blockchain0x/mcp";
import { webhooks } from "@blockchain0x/node";
const server = new McpServer({ name: "docs-search", version: "1.0.0" });
// You decide who counts as paid. Back this with Redis/Postgres in production.
const paid = new Set<string>();
server.tool(
"search_docs",
"Semantic search across our docs",
{ query: { type: "string" }, payer: { type: "string" } },
async ({ query, payer }) => {
if (!paid.has(`search_docs:${payer}`)) {
// Not paid yet: build an x402-compatible 402 challenge and return its
// body as a tool error. requirePayment is a challenge builder - it does
// not gate the call for you; this check is yours.
const { body } = requirePayment({
amountUsdc: "0.02",
payTo: "0xYourMcpAgentAddress",
hostedUrl: "https://pay.blockchain0x.com/checkout/docs-search",
description: "docs search",
});
return { content: [{ type: "text", text: JSON.stringify(body) }], isError: true };
}
const results = await runVectorSearch(query);
return { content: [{ type: "text", text: JSON.stringify(results) }] };
},
);
// Your webhook endpoint marks a payer as paid once the checkout settles.
const app = express();
app.post("/webhooks/blockchain0x", express.raw({ type: "*/*" }), (req, res) => {
const r = webhooks.verify({ headers: req.headers, rawBody: req.body, secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET! });
if (!r.ok) return res.status(400).json({ code: r.code });
if (r.eventType === "payment.received") {
// Resolve (tool, payer) from the reference you encoded in hostedUrl, then:
paid.add("search_docs:0xPayer");
}
res.json({ received: true });
});セットアップ手順
- 1Blockchain0xエージェントウォレットを作成する あなたのMCPサーバー用に、APIおよびWebhookアクセスを含むプランで。payToとして使用するウォレットアドレスをメモしてください。
- 2パッケージをインストールする:
npm install @blockchain0x/mcp @blockchain0x/node - 3環境変数を設定してください: BLOCKCHAIN0X_API_KEY (MCP server が Authorization: Bearer として送信します) と BLOCKCHAIN0X_WEBHOOK_SECRET (dashboard の署名用シークレットで、webhooks.verify が照合します)。
- 4有料ツールをゲートする 自分の支払い状態を確認し、呼び出し元が支払っていない場合はrequirePaymentチャレンジボディを返します。無料ツールはゲートしないでください。
- 5Webhookエンドポイントを設定する Blockchain0xダッシュボードで(例:/webhooks/blockchain0x)、次にwebhooks.verifyで各配信を確認し、payment.receivedで支払者を支払い済みとしてマークします。
- 6デプロイ。 あなたの有料ツールに最初にアクセスしたAIクライアントは402を受け取り、支払い、次の呼び出しが成功します。支払いは10秒以内にダッシュボードに表示されます。
あなたはまた、npx @blockchain0x/mcp(stdio)またはmcp.blockchain0x.comのホストされたストリーミングHTTPコンテナでBlockchain0x MCPサーバーを実行できます。Webhookペイロードの形状を含む完全なセットアップは、ドキュメントにあります。
ハンドラー内で最も重要な決定。
支払い状態を所有しているため、支払いがどのくらいの期間カウントされるかを決定します。クライアントがツールの支払いをした後、一定の期間マークを付けて支払い済みのままにし、そのウィンドウ内で新しい支払いなしに呼び出しを通過させます。ウィンドウを短く設定すると、すべての呼び出しで支払いの摩擦をクライアントに課すことになります。ウィンドウを長く設定すると、1回の安価な支払いの後に高価な操作を提供することになります。Redis/PostgresキーのTTLは、それを実装する最も簡単な方法です。
推奨するウィンドウ
| ツールの種類 | ウィンドウ | なぜ |
|---|---|---|
| 安価なルックアップ ($0.01-$0.05) | 60秒 | セッションを明かさずに自然なリトライやフォローアップコールを吸収します。 |
| 中価格帯の推論 ($0.10-$1) | 30秒 | コールごとの支払いは正しい形です; 短いキャッシュが一時的なエラーの再試行を処理します。 |
| 高価な長文コンテキスト ($1-$10) | 0秒(キャッシュなし) | 各呼び出しは独自の有料イベントです。キャッシュはありません。 |
| サブスクリプションスタイルのツール | 24時間 | ウィンドウ内で無制限の呼び出しのために1日1回支払います。摩擦が少ないクライアントあたりの収益が高くなります。 |
支払い状態を(支払者ウォレット、ツール)ペアごとにキー付けします。例のsearch_docs:0xPayerのように。異なる2つのクライアントが同じツールにアクセスし、それぞれが別々に支払います。同じクライアントが2つの異なるツールにアクセスし、2つの別々の支払いが必要です。より広範囲にスコープを設定することもできます(すべてのツールに対して支払者ごとに);支払者ごと、ツールごとの粒度が価格設定を公平に感じさせます。
MCPサーバーに適した4つの価格形状。
料金はあなたの判断です - ミドルウェア内の各ツールの金額を設定します。以下は、最も一般的に見られる4つのパターンと、それに適合するツールの形状です。
コールごとのマイクロ価格設定
$0.01 - $0.05 / コール検索、照会、分類、フォーマット変換 - 大量の安価な操作。
クライアントにとっての摩擦が最も少ない; コストが使用に正確に一致します。
最高の取引オーバーヘッド; 高い呼び出しボリュームでのみ機能します。
コールごとの中価格設定
$0.10 - $1.00 / コールLLM推論、生成、コンテンツ制作、各呼び出しが実際の作業を行うもの。
バランスが取れた - 1回の呼び出しあたりの明確な価値、管理可能なトランザクション数。
呼び出しごとの摩擦が高い; クライアントは時々この価格帯でのサブスクリプションを好みます。
コールごとの高価格設定
$1 - $10 / コール長文生成、文書処理、マルチステップオーケストレーション、高額なサードパーティAPIラッピング。
コールごとのマージンは意味があります; 失敗した支払いは許容可能な損失です。
クライアントはこの価格で厳しく交渉します; 返金リクエストを期待してください。
サブスクリプションウィンドウ
$5 - $50 / 24時間ウィンドウ(または月あたり$X)セッション内で多くの呼び出しを行い、1回ごとの支払いの摩擦を許容しないクライアント。
クライアントごとの収益が高い; 呼び出しごとのオーバーヘッドが少ない。
発見性が低い; クライアントは前払いが必要です。ハイブリッド価格のために、通常はコールごとに組み合わせられます。
多くのオペレーターはパターンを混ぜます:呼び出しごとのマイクロ価格で安価なツール、呼び出しごとの高価格で高価なツール、さらに重いユーザーのための24時間のサブスクリプションウィンドウ。すべてのツールを同じMCPサーバーで実行することを妨げるものはありません。各ツールはrequirePayment内の独自のamountUsdcを設定し、ハンドラー内の独自の支払いウィンドウを設定します。
プロはほぼすべてのMCPサーバーに適したプランです。
MCPサーバーオペレーターはほぼ常にProから始まります。なぜならAPI書き込みアクセスとWebhookが初日から必要だからです:無料は読み取り専用で、有料ツールはpayment.received Webhookを受信して検証する必要があります。正確なエージェントごとのコストと取引手数料の階層がどこにあるかは料金ページを参照してください。短いバージョンは、実際の有料ボリュームを処理しているサーバーは、Proが自分自身のコストをカバーするポイントを超えているということです。
- Free: APIとダッシュボードの試用に便利です。本番の有料ツールには不向きです(読み取り専用、webhooksなし)。
- Pro: 実運用のMCP server向けの標準プラン。APIへのフルアクセス、webhooks、エクスポートに対応。
- Business: コンプライアンスのために監査ログが必要な場合、または複数クライアント向けに MCP サーバーを運用し、エージェントごとのチーム席共有が必要な場合。