verify402 について
verify402は、AIエージェント向けに、取引や支払いへの署名前の無料事前確認と、呼び出しごとに課金されるオンチェーン確認を提供するMCPサーバーです。理由と証拠を添えて結果を返し、ブリッジ自体は取引への署名や送信を行いません。
主な機能
- 01無料のフェイルクローズ型事前確認
- 02支払い要求と取引データの検査
- 03裁定機会、トークンの売却可能性、見積もりの検証
- 04スワップ経路と取引深度の確認
- 05x402による呼び出し単位の支払い
活用シーン
- 01暗号資産取引への署名前の要求確認
- 02現実的な規模でのトークン売却可能性の評価
- 03複数市場間の裁定機会の検証
- 04見積もりの妥当性と取引への影響の比較
MCP 対応
MCPサーバーはstdio経由で、無料の事前確認ツールと、呼び出しごとに課金される5種類のオンチェーン確認ツールを提供します。有料呼び出しにはx402を使用し、公開デモではBase Sepoliaテストネットを利用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y verify402-mcpVERIFY402_URLverify402 base URLEVM_PRIVATE_KEYシークレットPrivate key for a dedicated hot wallet. Omit for the free preflight_gate only. [email protected] (this published release) defaults paid calls to Base Sepolia testnet (eip155:84532) for the public demo. Base mainnet (eip155:8453) is an explicit opt-in for a separate deployment and is not enabled by this release. Fund only Base Sepolia testnet USDC for the demo. Never use a main wallet.VERIFY402_NETWORKSComma-separated EVM payment networks for paid calls. Default Base Sepolia testnet (eip155:84532); set eip155:8453 explicitly for Base mainnet. The supported network-to-canonical-asset map is constrained to Base Sepolia and Base mainnet.MAX_PAYMENT_USDHard cap on one x402 payment in USD (default 0.25). Enforced before signing.MAX_DAILY_USDOptional cap for total spend per UTC day across restarts.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
1掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| to | string | いいえ | トランザクションの宛先(kind=transaction の場合は必須) |
| data | string | いいえ | トランザクションの 0x calldata |
| from | string | いいえ | 署名するウォレット。指定を強く推奨します。シミュレーションと残高チェックが有効になります。 |
| kind | enum | はい | payment = x402 402 チャレンジ;transaction = チェーン上のトランザクションpayment | transaction |
| value | string | いいえ | wei 単位のネイティブ通貨額(10 進数の文字列) |
| policy | object | いいえ | オペレーターポリシー。構造チェックのみ行う場合は省略してください。 |
| policy.allowedTo | array | いいえ | トランザクション対象の許可リスト |
| policy.maxValueEth | number | いいえ | ネイティブ通貨の金額がこの ETH 量を超える場合は拒否します |
| policy.maxValueWei | string | いいえ | ネイティブ通貨の金額がこの wei 量を超える場合は拒否します |
| policy.allowedPayTo | array | いいえ | 支払い先の許可リスト |
| policy.maxAmountUsd | number | いいえ | この USD 額を超える支払いは拒否します |
| policy.allowedAssets | array | いいえ | 支払いアセットの許可リスト |
| policy.allowedNetworks | array | いいえ | CAIP-2 ネットワークの許可リスト |
| policy.allowedSpenders | array | いいえ | 承認先 spender の許可リスト |
| policy.expectedResource | string | いいえ | エージェントが支払いを予定しているリソースの正確な URL |
| policy.maxTimeoutSeconds | number | いいえ | タイムアウトがより長いチャレンジは拒否します |
| policy.allowedFacilitators | array | いいえ | x402 facilitator の許可リスト |
| policy.forbidUnlimitedApproval | boolean | いいえ | 無制限の approve を BLOCK にします |
| chainId | number | いいえ | EVM チェーン ID:1 は Ethereum、42161 は Arbitrum、8453 は Base です。支払い時にネットワークを照合します。 |
| payment | object | いいえ | kind=payment の場合に必須です |
| payment.asset | string | はい | トークンアドレスまたはミントアドレス。例:そのネットワーク上の canonical USDC |
| payment.extra | object | いいえ | x402 の追加フィールド:validAfter / validBefore / facilitator |
| payment.extra.validAfter | number | いいえ | |
| payment.extra.facilitator | string | いいえ | |
| payment.extra.validBefore | number | いいえ | |
| payment.payTo | string | はい | 402 チャレンジの受取人アドレス |
| payment.amount | string | はい | アセットの最小単位による RAW 金額。文字列で指定します |
| payment.scheme | string | いいえ | x402 スキーム。通常は "exact" です |
| payment.network | string | はい | CAIP-2 ネットワーク。例:"eip155:8453" または "solana:..." |
| payment.resource | string | いいえ | 支払い対象のリソース URL |
| payment.maxTimeoutSeconds | number | いいえ | 402 チャレンジの maxTimeoutSeconds |
| ttlSeconds | number | いいえ | レシートの有効期間(秒)、15-300(デフォルトは 90) |
詳細
verify402-mcp
verify402 向け MCP サーバーです。エージェントが支払いまたはチェーントランザクションに署名する前に実行する、無料でフェイルクローズ方式の事前チェックゲートと、x402 経由で呼び出しごとに支払うオンチェーンチェック 5 種類を提供します。
Claude Desktop、Cursor、OpenCode、および stdio に対応する任意の MCP クライアントで動作します。無料のゲートにウォレットは不要です。公開デモの有料ツールは、Base Sepolia テストネットの USDC(eip155:84532)を入金した専用のホットウォレットを使用します。分析ではメインネットのチェーンデータを読み取りますが、デモでメインネットの支払いが決済されることはありません。ブリッジがトレードに署名したり、送信したりすることはありません。
公開パッケージに関する注意:
[email protected]は npm に公開されており、公開デモでは有料呼び出しのデフォルトとして Base Sepolia テストネット(eip155:84532)を使用します。Base メインネット(eip155:8453)は、別のデプロイでVERIFY402_NETWORKSを明示的に有効化する必要があり、このリリースでは有効になっていません。以前公開された1.0.8、1.0.6、1.0.5、1.0.4の各パッケージは変更できません。また、1.0.4はデフォルトで Base メインネットを使用していました。これらを再公開したり、上書きしたりしないでください。
ツール
| ツール | 料金 | 回答する内容 |
|---|---|---|
preflight_gate | 無料 | 「この支払いリクエストまたはトランザクションに署名すべきですか?」— 理由と checked/notChecked、有効期間の短いレシートを添えて PASS/CAUTION/BLOCK を返します |
verify_arbitrage | $0.05 | 「この取引所間のアービトラージ機会は、今この時点で実在しますか?」 |
check_token_safety | $0.10 | 「このトークンは現実的な規模で売却できますか。また、往復取引のコストはいくらですか?」— 根拠とともに TRUST/CAUTION/AVOID を返します。コード監査ではありません |
get_best_route | $0.03 | 「このスワップでチェーン上では実際にいくら支払うことになりますか?」— 最良のルートと、見積もり対象となったすべての取引所を返します |
verify_quote_fairness | $0.05 | 「ブローカー/ボットからこの価格を提示されました。妥当ですか?」— fair/overpaying/too_good_to_be_true を返します |
get_trade_depth | $0.05 | 「往復取引で利益が食いつぶされる前に、ここでどれだけの規模を取引できますか?」— 規模ごとのインパクト、往復取引コスト、取引可能量を返します |
preflight_gate は最初に使うゲートです。暗号資産のトランザクションまたは x402 の支払いリクエストに署名する前に呼び出してください。sign_allowed が false の場合は、署名しないでください。requires_ack が true の場合は、その理由をオペレーターに提示してください。レシートは期限切れになります(デフォルトは 90 秒)。再利用せず、もう一度呼び出してください。
支払いインテントでは、policy.allowedResourceHosts により payment.resource 内のホストを制限します。一致するホストは PASS になり、許可されていないホストは BLOCK になります。allowedResourceHosts と expectedResource のどちらも指定されていない場合、それ以外は有効なリソースでも CAUTION resource_identity_unverified となり、resource identity が notChecked に含まれます。ブリッジはこのポリシーをサーバーに転送し、サーバーが適用します。
呼び出し側が任意で指定できる以下の 2 種類のチェックは、そのまま転送されます。
payment.idempotencyKeyとpolicy.obligation.settledKeysを指定すると、呼び出し側ですでに決済済みのキーが拒否されます。policy.obligation.spentUsdとgrantUsdを指定すると、累積支出額が許可額を超えた場合に拒否されます。ブリッジはこの状態を永続化しません。policy.sellerPayoutWalletsは、呼び出し側が指定する支払い先の許可リストです。一致しない場合は BLOCK になりますが、一致しても出所の証明にはならず、payee_payout_bindingが追加されることもありません。policy.sellerPayoutManifestを指定すると、呼び出し側が固定した HTTPS オリジンから、売り手署名済みのマニフェストが 402 の外で取得されます。検証済みのマニフェストのpayToリストが一致した場合に限り、payee_payout_bindingが追加されます。レスポンスには、ソース、オリジン、署名者、有効期限、マニフェストのハッシュを含むpayeeBindingが含まれます。
このレイヤーでのゲートの判定は助言にとどまります。ブリッジはエージェントのトランザクションキーを保持せず、判定を無視するエージェントを止めることはできません。適用の責任は署名を行うエグゼキューターにあります。レシートを検証してから署名してください。検証済みのレシートがない場合は署名ツールを呼び出さない、デフォルト拒否のリファレンス実装については、examples/preflight-guard.mjs を参照してください。
配布と実行
パッケージは npm で verify402-mcp として正式に公開されており、公式の Model Context Protocol Registry に登録されています。
npx で直接実行します(stdio トランスポート)。
npx -y verify402-mcp --help
グローバルにインストールすることもできます。
npm install -g verify402-mcp
verify402-mcp --help
または、ソースから実行します。
git clone https://github.com/a32116150-ctrl/verify402
cd verify402/mcp-bridge
npm ci
node index.mjs --help
AI エージェントとの連携(ステップバイステップ)
ステップ 1:無料モード(設定不要、ウォレット不要)
AI エージェントに無料の preflight_gate(署名前にトランザクションの calldata、支払いチャレンジ、受取人/金額、承認、ブロックの鮮度を確認します)を使わせるには、これをクライアント設定に貼り付けます。有料の check_token_safety チェックでは、見積もりに基づく売却可能性のチェックが追加されます。送金は実行せず、ハニーポットでないことを保証するものでもありません。
Claude Desktop(claude_desktop_config.json)または Cursor(.cursor/mcp.json):
{
"mcpServers": {
"verify402": {
"command": "npx",
"args": ["-y", "verify402-mcp"],
"env": {
"VERIFY402_URL": "https://verify402.onrender.com"
}
}
}
}
ステップ 2:有料モード(ホットウォレットの設定)
5 つの詳細なオンチェーン検証チェック(verify_arbitrage、check_token_safety、get_best_route、verify_quote_fairness、get_trade_depth)を有効にするには、x402 経由で呼び出しごとに USDC を支払う専用のホットウォレットを設定します。
- 専用のホットウォレットを作成する:
- MetaMask、Rabby、または
cast wallet newを使って新しいウォレットを作成します。 - ⚠️ セキュリティ警告:普段使いの個人用ウォレット、コールドストレージ、または金庫は絶対に使用しないでください。
- MetaMask、Rabby、または
- Base Sepolia テストネット(EIP-155:84532)でウォレットに資金を入れる:
- USDC:ファウセットから Base Sepolia テストネットの USDC を入手します(ブリッジの料金は呼び出しごとに 0.03〜0.10 ドル相当のテストネット USDC です)。
- ガス(Base Sepolia 上の ETH):クライアントで必要な場合は、ガス代として少量の Base Sepolia テストネット ETH を入手します。公開デモではメインネットの資金は必要ありません。
- MCP クライアントで環境変数を設定する:
EVM_PRIVATE_KEYにホットウォレットの 64 文字の秘密鍵を設定します。VERIFY402_NETWORKSにeip155:84532(Base Sepolia テストネット)を設定します。- 安全上限
MAX_PAYMENT_USD(例:"0.25")とMAX_DAILY_USD(例:"1.00")を設定します。
有料モードの設定ブロック(Claude Desktop、Cursor、Cline、Windsurf):
{
"mcpServers": {
"verify402": {
"command": "npx",
"args": ["-y", "verify402-mcp"],
"env": {
"VERIFY402_URL": "https://verify402.onrender.com",
"EVM_PRIVATE_KEY": "0xYOUR_HOT_WALLET_PRIVATE_KEY",
"MAX_PAYMENT_USD": "0.25",
"MAX_DAILY_USD": "1.00",
"VERIFY402_NETWORKS": "eip155:84532",
"VERIFY402_PAY_TO": "0xAeEF086DD4e436c69d6d0F684b4c9F43392df9cb"
}
}
}
}
OpenCode V2 の設定
opencode.jsonc(または ~/.config/opencode/opencode.jsonc)に記述します。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"verify402": {
"type": "local",
"command": ["npx", "-y", "verify402-mcp"],
"environment": {
"VERIFY402_URL": "https://verify402.onrender.com",
"EVM_PRIVATE_KEY": "{env:EVM_PRIVATE_KEY}",
"VERIFY402_NETWORKS": "eip155:84532",
"MAX_PAYMENT_USD": "0.25",
"MAX_DAILY_USD": "1.00"
}
}
}
}
}
AI エージェントによる verify402 の使い方(プロンプト例)
設定すると、エージェントのコンテキストにツールが自動的に表示されます。直接プロンプトを入力できます。
- 事前チェックゲート(無料):
「このトランザクションに署名する前に、支払いリクエスト/calldata に対して
preflight_gateを呼び出してください。BLOCK が返された場合は中止し、その理由を説明してください。」 - トークンの見積もりに基づく売却可能性チェック(0.10 ドル、コード監査ではありません):
「
check_token_safetyを使ってトークン0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cEを分析してください。設定済みの取引所で、現実的な規模の売却は可能ですか?往復取引コストはいくらで、結果は TRUST/CAUTION/AVOID のどれですか?送金制限を確認するには notChecked を読んでください。」 - 裁定取引の検証(0.05 ドル):
「
verify_arbitrageを使って、現在のブロックでチェーン 1 上の WETH/USDC について、Uniswap V3 と Sushiswap の間に裁定取引の機会があるか検証してください。」 - 見積もりの妥当性監査(0.05 ドル):
「1,000 USDC に対して 0.35 WETH を提示されました。
verify_quote_fairnessを実行して、妥当な提示か、払いすぎなのかを確認してください。」 - 市場の深さと処理能力(0.05 ドル):
「Uniswap V3 の WETH について
get_trade_depthを確認し、50,000 ドルのスワップでどの程度のスリッページと価格インパクトが生じるか調べてください。」
安全性
- ブリッジが署名するのは x402 決済のみです。取引への署名や送信は行いません。
- 有料ツール呼び出しごとに
crypto.randomUUID()で冪等性キーを1つ生成し、x-idempotency-keyとして送信します。タイムアウトや応答の消失時には同じキーで再試行するため、サーバーは二重請求せず、確定済みの判定を再送します(recovery.replayed: true)。402 または409は自動で再試行されず、エラーはMCPクライアントに通知されます。このキーは秘密情報であり、ログに記録されたり返却されたりすることはありません。 - 署名の前に、有料クライアントは、402が設定済みのサーバーから既知の有料ルートに対して送られたこと、許可リストに登録されたEVMネットワーク上であること、送金先がverify402の受取先であることを必須とします。認識済みのデフォルト資産(USDC)のみ受け入れ、金額を
MAX_PAYMENT_USD以下に制限し、リダイレクトは拒否します。 - クライアントが選択したオプションだけではなく、402チャレンジ全体を検証します。提示されたすべての要件について、許可リストに登録されたネットワーク、設定済みの受取先、そのネットワークの正規USDCコントラクトおよび正規EIP-712ドメイン、
eip3009を指定するextra.assetTransferMethod、300以下の正の整数であるmaxTimeoutSeconds、上限内の金額を必須とします。Baseメインネットも選択肢として含むチャレンジは、テストネットの選択肢だけに絞り込まず、全体を拒否します。またクライアントは、署名する要件がサーバーから送信されたオブジェクトと完全に同一であることを証明します。 VERIFY402_NETWORKS、VERIFY402_PAY_TO、VERIFY402_RESOURCE_PREFIXを使って、許可リストを絞り込んだり、別のデプロイ先を指定したりできます。ブリッジのデフォルトはBase Sepoliaテストネット(eip155:84532)と、公開されているverify402の受取先です。VERIFY402_NETWORKSはサポート対象のマップ(eip155:84532、eip155:8453)に制限されます。明示的に空の値を指定すると、デフォルトにフォールバックせず、安全側に倒して失敗します。MAX_PAYMENT_USDは、署名が作成される前にx402クライアント内で適用されます。これを削除するとセキュリティが低下します。この上限によってブリッジが承認できる金額は制限されますが、秘密鍵が侵害された場合の保護にはなりません。- ブリッジは
X-Verify402-Client: verify402-mcp/<version>を送信し、User-Agentにも同じバージョンを含めます。これは/usage用の匿名ラベルであり、アカウントではありません。ウォレット、キー、ユーザーIDは含まず、サーバーは自己申告で偽装可能な情報として扱います。 preflight_gateはチェックであり、保証ではありません。notCheckedを確認してください。これは受取人の評判や制裁対象のスクリーニング、コントラクトの監査、残高変動全体のシミュレーション、取引相手の監査、受取人の所有権の独立した証明、プロセスをまたぐ債務台帳の永続化、ツールの説明や応答に対するプロンプトインジェクションのスキャン、MEVへの対策は行いません。検出できるのは測定可能な署名ミスであり、あらゆる詐欺ではありません。- 助言ではなく強制適用が必要な場合は、リファレンス実行ツールを使用してください。
依存関係と npm audit
このパッケージは、@x402/axios と @x402/evm に依存しなくなりました。x402 の支払い処理(PAYMENT-REQUIRED / PAYMENT-SIGNATURE / PAYMENT-RESPONSE、スキーム exact、EIP-3009 認可)は、viem 上でこのパッケージに実装されています。実行時の依存関係は、MCP SDK、axios、dotenv、viem、zod 4 です。
理由:@x402 2.28.0 は zod ^3.24.2 に依存しており、これが
GHSA-mrhx-c7xc-m3w5
(サイズの大きすぎる配列の検証時にメモリ枯渇を引き起こす DoS。アドバイザリの対象は zod < 4.6.6 のすべてのバージョンで、修正済みの 3.x はありません)に該当します。npm は依存関係内で宣言された overrides を無視するため、1.0.8 以前をインストールすると「重大度:高」の監査バナーが表示されていました。上流へのリクエストは
x402-foundation/x402#3953
です。
現在のパッケージを tarball からインストールした場合:
$ npm i verify402-mcp
added 123 packages
$ npm audit
found 0 vulnerabilities
ブリッジは同じワイヤープロトコルで支払いを行います。動作上の変更は見た目だけです。npm ls @x402 に何も表示されず、インストールされるパッケージが 5 つ減ります。有料呼び出しのポリシー(ネットワーク許可リスト、設定済みの受取人、正規の USDC、支払いごとの上限、ツールに紐づいたリソース)に変更はなく、署名が作成される前に引き続き payment-policy.mjs で実行されます。
明示的なメインネット設定(公開デモ向けではありません)
メインネットでの決済は、ブリッジやデモのデフォルトではなく、独立したデプロイの選択肢です。サービス側のメインネット対応準備チェック、ファシリテーター、常時稼働ホスト、ウォレットへの資金補充を個別に検証するまでは、このクライアントをメインネットに接続しないでください。
# Only for a deliberate mainnet deployment, never against the public demo.
VERIFY402_NETWORKS=eip155:8453
VERIFY402_PAY_TO=<the payee named by the mainnet 402>
公開デモが提供するのは eip155:84532 です。メインネット専用のポリシーは、そのチャレンジを拒否するため、メインネットの資金が暗黙に使われることはありません。逆も同様に適用され、デモのポリシーはメインネット専用のチャレンジを拒否します。
開発
npm pack --dry-run
ライセンス
Apache License 2.0。LICENSE と NOTICE を参照してください。
このパッケージは、商用のエージェントシステムやボットを含め、使用、変更、配布できます。再配布する場合、またはこのパッケージを含む製品を配布する場合は、著作権表示、ライセンステキスト、NOTICE ファイルを保持してください。verify402 という名前とロゴは、推奨を示す目的での使用を許諾されていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。