mcp-x402-pay について
mcp-x402-pay は、エージェントが x402 で保護されたリソースを探して支払うための MCP サーバーです。EVM と Solana の決済に対応し、ローカルで署名するほか、支払い先のホストや金額を制限できます。
主な機能
- 01支払い後にx402保護URLを取得・再試行
- 02リソースと価格の検索
- 03呼び出しごとの秘密鍵によるローカル署名
- 04決済ネットワーク、金額、ホストの制限
- 05EVMとSolanaの決済対応
活用シーン
- 01x402カタログで有料APIを探す
- 02402 Payment Requiredを返すURLの呼び出し
MCP 対応
stdio 経由で MCP クライアントに x402_pay と x402_discover ツールを公開します。x402_pay は保護されたリクエストを再試行する前に、決済を承認してローカルで署名します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
3掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 取得するリソースの URL(有料の場合があります) |
| body | string | いいえ | リクエスト本文(文字列。必要に応じて headers で content-type を設定してください) |
| apiKey | string | いいえ | X402_BUYER 機能を備えた CryptoAPIs API キー(buyer /authorize の呼び出しにのみ使用)。未指定の場合は CRYPTOAPIS_API_KEY 環境変数にフォールバックします。一度設定すれば、このパラメーターは省略できます。 |
| method | enum | いいえ | HTTP メソッド(デフォルト GET)GET | POST | PUT | PATCH | DELETE |
| headers | object | いいえ | 追加のリクエストヘッダー |
| tronKey | string | いいえ | Tron の秘密鍵(16 進数)。未指定の場合は、X402_TRON_KEY、次に privateKey/X402_PRIVATE_KEY(同じ secp256k1 曲線)にフォールバックします。 |
| utxoWif | string | いいえ | WIF 形式の UTXO 秘密鍵。utxo-transaction の支払いに署名します(bitcoin/ltc/doge/dash/bch/zcash)。未指定の場合は X402_UTXO_WIF にフォールバックします。 |
| xrpSeed | string | いいえ | XRP のシークレット/シード(base58、例:s...)。xrp-transaction の支払いに署名します。未指定の場合は X402_XRP_SEED にフォールバックします。 |
| kaspaKey | string | いいえ | Kaspa の秘密鍵(16 進数、32 バイト)。kaspa-transaction の支払いに署名します。未指定の場合は X402_KASPA_KEY にフォールバックします。 |
| walletId | string | いいえ | CryptoAPIs の buyer-service ウォレット RECORD ID(POST /wallets が返す ID)。オンチェーンアドレスではありません。アドレスを渡すと wallet_not_found が返されます。未指定の場合は X402_WALLET_ID 環境変数にフォールバックします。先に作成してください(blockchain+network ごとに 1 回):https://ai.cryptoapis.io/x402/buyer/wallets に POST し、{blockchain, network(eip155:8453 や solana:<genesisHash> などの CAIP-2 ID。単なる名前は不可), address(公開アドレス。Solana/Kaspa では必須)} を指定すると、walletId が返されます。 |
| maxAmount | string | いいえ | 任意の安全上限。必要な原子単位の金額がこの値を超える場合、支払いを拒否します。 |
| svmSecret | string | いいえ | Solana の秘密鍵(base58 エンコードされた 64 バイトの鍵ペアシークレット)。svm-transaction の支払いに署名します。未指定の場合は X402_SVM_SECRET にフォールバックします。 |
| privateKey | string | いいえ | EVM の秘密鍵(16 進数。0x は任意)。eip712(EVM)の支払いに署名し、デフォルトでは Tron にも使用します。未指定の場合は X402_PRIVATE_KEY にフォールバックします。セキュリティ:信頼できるローカル環境でのみ使用してください。 |
| allowedHosts | array | いいえ | 支払いを許可するホストを制限します。例:["api.acme.com"](先頭のドットはサブドメインに一致します:".acme.com")。リスト外の url は、ネットワーク呼び出しの前に拒否されます。未指定の場合は X402_ALLOWED_HOSTS 環境変数(カンマ区切り)にフォールバックします。モデルの影響を受けないよう、この環境変数に許可リストを設定してください。これにより、プロンプトインジェクションされた url による許可リストの拡張を防げます。 |
| buyerBaseUrl | string | いいえ | buyer サービスのベース URL を上書きします(デフォルト:https://ai.cryptoapis.io/x402/buyer) |
| allowedNetworks | array | いいえ | 支払いを許可する CAIP-2 ネットワークを制限します(例:["eip155:8453"]) |
詳細
@cryptoapis-io/mcp-x402-pay
これは x402 の購入者側です — エージェントがリソースの料金を支払うために使うツールです。API に料金を請求するマーチャントには、MCP ツールではなくミドルウェア SDK(
@cryptoapis-io/x402-merchant-sdk)を使用します。
AI エージェントが x402 で保護された HTTP エンドポイントを見つけて支払うための MCP サーバーです。
x402_pay— URL を取得し、サーバーが402 Payment Requiredを返した場合は、CryptoAPIs 購入者サービスを通じて支払いを承認し、ローカルで署名して再試行し、支払い済みのレスポンスを返します。x402_discover— ファシリテーターの x402 リソースと価格のカタログを閲覧できます。これにより、エージェントは渡された API を呼び出すだけでなく、有料 API を見つけることができます。
ノンカストディアル: 秘密鍵はリクエストごとに渡され、プロセスの外に出ることはありません(HTTP サーバーはなく、stdio のみです)。
現在の対応状況: EVM(eip712、例:Base USDC)と Solana に対応しています。Tron、Bitcoin/UTXO、XRP、Kaspa は近日対応予定です。配線は済んでいますが、まだ有効化されていません。これらで支払うと、family_not_yet_supported(「近日対応予定」)という明確な結果が返されます。
実行
node dist/cli.js # stdio MCP server (no --api-key at startup; keys are per-tool-call)
前提条件 — エージェントの walletId
x402_pay は CryptoAPIs のエージェントウォレット(walletId)から支払います。支払いの前に、ブロックチェーンとネットワークの組み合わせごとに一度だけ作成してください — 購入者 API への POST を1回行うと ID が返されます(ノンカストディアル:登録するのは公開アドレスのみです)。
curl -X POST https://ai.cryptoapis.io/x402/buyer/wallets \
-H "x-api-key: $CRYPTOAPIS_API_KEY" -H "content-type: application/json" \
-d '{"blockchain":"base","network":"eip155:8453","address":"0xYourAddress"}'
# → { "walletId": "…" }
network はCAIP-2 ID(eip155:8453、solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp など)でなければなりません。単なる名前は使用できません。また、address(どのチェーンでも使用可能。Solana/Kaspa では必須)または xpub(xpub 対応チェーン)のいずれか一方を指定してください。不正な本文には、明確な 400 malformed_request が返されます。返された ID を X402_WALLET_ID に設定するか、walletId を渡してください。
ツール:x402_pay
| 入力 | 必須 | 説明 |
|---|---|---|
url | ✓ | (ペイウォールで保護されている可能性がある)リソース |
apiKey | ✓ | CryptoAPIs キー(X402_BUYER 機能)— 購入者の /authorize の呼び出しにのみ使用 |
walletId | ✓ | POST /wallets で取得したウォレットレコード ID(レジストリの _id)— オンチェーンアドレスではありません(アドレスを指定すると wallet_not_found が返されます) |
privateKey | ✓ | ウォレットの EVM キー — ローカルで署名され、どこにも送信されません |
method/body/headers | 実行するリクエスト | |
allowedNetworks | 支払い可能な CAIP-2 ネットワークを制限 | |
maxAmount | 安全上限 — 必要な最小単位額が上限を超える場合は拒否 | |
allowedHosts | 支払い可能なサイトを制限します。例:["api.acme.com"](先頭にドットを付けるとサブドメインも対象)。リスト外の URL は、ネットワーク呼び出しの前に拒否されます。X402_ALLOWED_HOSTS(カンマ区切り)にフォールバックします — 許可リストをモデルがアクセスできない場所に保つため、ここに固定してください |
{ status, paid, body, settlement? } を返します。許容できる支払い方法がない 402、または maxAmount を超える場合は、reason とともに paid:false を返します — 署名も支払いも行われません。
ツール:x402_discover
x402 の「Bazaar」— 登録済みの x402 リソースと各リソースの料金を閲覧します (仕様 §8)。
| 入力 | 必須 | 説明 |
|---|---|---|
type | リソースタイプで絞り込みます。例:"http" | |
limit | ページサイズ。1~100(デフォルトは 20) | |
offset | ページ送りでスキップする行数(デフォルトは 0) | |
facilitatorBaseUrl | ファシリテーターを上書きします(QA/ローカル) |
{ resources: [{ resource, type, x402Version, accepts, lastUpdated, metadata? }], pagination } を返します。
公開 — API キーもウォレットも不要で、支出もありません。そのため、常に安全に呼び出せます。accepts[].amount は最小単位(USDC は小数点以下 6 桁:"10000" = $0.01)であることに注意してください。ユーザーに価格を提示する前に換算してください。選択した resource を x402_pay に渡すと、実際に購入できます。
フロー
fetch(url)を実行します。402 以外の場合は、そのまま返します。- 402 の場合は、
acceptsの項目を選択し(許可リストを考慮)、購入者の/authorizeを通じて認証し、署名用アーティファクトを取得します。 - ローカルで署名します(
@cryptoapis-io/mcp-signerのevm_signtyped-data)。次に、x402PaymentPayloadを作成します (ワイヤースキームは常にexactで、ファミリーはnetworkに含まれます)。 - base64 の
X-PAYMENTヘッダーを付けて再試行し、支払い済みレスポンスと決済結果のX-PAYMENT-RESPONSEを返します。
セキュリティ
秘密鍵はツールのパラメーターであり、MCP クライアントによってログに記録されたり、会話履歴に保存されたりする可能性があります。信頼できるローカル環境でのみ使用してください。これは @cryptoapis-io/mcp-signer と同様です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。