x402 Toolbox について
x402 Toolboxは、Web、DNS、EVM、データ処理向けの決定論的なユーティリティを提供するMCPサーバーです。登録やAPIキーなしで、Base上のUSDCによる従量課金でツールを使うクライアント向けです。
主な機能
- 01DNSとメールセキュリティの確認
- 02Webページの抽出と調査
- 03EVMトランザクションとcalldataのデコード
- 04データの変換、検証、比較
- 05単位、時刻、通貨の換算
活用シーン
- 01ドメインのメールセキュリティ記録を監査
- 02ページのテキストとメタデータを抽出
- 03EVMトランザクションやABIデータを調査
- 04JSONの検証やCSVデータの変換
MCP 対応
ステートレスなStreamable HTTP MCPエンドポイントで62種類のツールを提供します。初期化とツール一覧は無料で、ツール呼び出しはx402の支払いメタデータを使い、決済情報は応答に含まれます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://x402-toolbox.swiftbotlab.workers.dev/mcpclaude mcp add --transport http swiftbotlab-x402-toolbox https://x402-toolbox.swiftbotlab.workers.dev/mcp{"mcpServers":{"swiftbotlab-x402-toolbox":{"type":"http","url":"https://x402-toolbox.swiftbotlab.workers.dev/mcp"}}}Cursor で開く{"servers":{"swiftbotlab-x402-toolbox":{"type":"http","url":"https://x402-toolbox.swiftbotlab.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"swiftbotlab-x402-toolbox":{"type":"http","url":"https://x402-toolbox.swiftbotlab.workers.dev/mcp"}}}{"mcpServers":{"swiftbotlab-x402-toolbox":{"serverUrl":"https://x402-toolbox.swiftbotlab.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Swift Bot Labs Toolbox
1 つのオリジンで利用できる、62 種類の小規模で決定論的なユーティリティ API です。x402 を使った従量課金制で、DNS とメールのセキュリティチェック、Web ページからクリーンな Markdown への変換、EVM の calldata とトランザクションのデコード、x402 エンドポイントのチェック、IP/CIDR の計算、JSON と CSV、ハッシュ、単位・タイムゾーン・通貨の変換を利用できます。
サインアップも API キーも不要です。各呼び出しの料金は Base 上の USDC で $0.003~$0.02 です。失敗した呼び出しには課金されません。
- カタログ:https://x402-toolbox.swiftbotlab.workers.dev/
- OpenAPI 3.1:https://x402-toolbox.swiftbotlab.workers.dev/openapi.json
- llms.txt:https://x402-toolbox.swiftbotlab.workers.dev/llms.txt
- MCP サーバー(ストリーミング可能な HTTP):
https://x402-toolbox.swiftbotlab.workers.dev/mcp
支払いの仕組み
- 任意のツールを呼び出します。支払いがない場合は、価格、アセット(Base 上の USDC、
eip155:8453)、支払い先アドレスを含むPAYMENT-REQUIREDヘッダー(base64 JSON、x402 v2)と402 Payment Requiredが返されます。 - x402 クライアントが、正確な金額を指定した USDC の
transferWithAuthorization(EIP-3009)に署名し、PAYMENT-SIGNATUREヘッダーを付けて再試行します。支払う側はガス代として ETH を用意する必要はありません。 - サーバーが支払いを検証し、ツールを実行して決済します。レスポンスは
{"ok": true, "tool": ..., "result": {...}, "payment": {...}}となり、決済情報はPAYMENT-RESPONSEに含まれます。
入力エラー(HTTP 400)、到達不能なターゲット、上流の障害、タイムアウトは決済前に返されるため、料金はかかりません。
# see the price (free)
curl -i "https://x402-toolbox.swiftbotlab.workers.dev/v1/dns/mx?domain=example.com"
// pay and call, with the official x402 client packages (Node)
import { wrapFetchWithPayment } from "@x402/fetch"; // plus an EVM signer from @x402/evm
const pay = wrapFetchWithPayment(fetch, client);
const res = await pay("https://x402-toolbox.swiftbotlab.workers.dev/v1/email/security?domain=example.com");
const { result, payment } = await res.json();
GET ツールではクエリパラメーターを使用します(POST で JSON ボディを送信することもできます)。POST ツールでは JSON オブジェクトのボディを使用します。このリポジトリの tools/pay.mjs は、依存関係を抑えた支払いクライアントのリファレンス実装です(@noble/* による EIP-712 署名)。
MCP
POST /mcp は、ストリーミング可能な HTTP 上で JSON-RPC を処理します(ステートレス、JSON レスポンス)。initialize と tools/list は無料です。tools/call は x402 MCP トランスポートに従います。params._meta["x402/payment"] がない場合、structuredContent に PaymentRequired オブジェクトを含む isError: true の結果が返されます。署名済みの支払いペイロードをそこに送信すると、決済情報が result._meta["x402/payment-response"] に返されます。
エンドポイント
* = 必須パラメーター。完全なスキーマと結果の例は、カタログおよび openapi.json をご覧ください。
DNS とメール
| エンドポイント | 料金 | 機能 | パラメーター |
|---|---|---|---|
GET /v1/dns/lookup | $0.005 | DNS-over-HTTPS を介した、任意のレコードタイプの DNS ルックアップ | name*、type |
GET /v1/dns/mx | $0.005 | ドメインのメールサーバー(MX)をメールプロバイダーとともに並べ替えて表示 | domain* |
GET /v1/dns/reverse | $0.005 | IPv4 または IPv6 アドレスの逆引き DNS(PTR)。正引きによる確認付き | ip* |
GET /v1/dns/spf | $0.008 | SPF レコードのチェック:完全な include ツリー、DNS ルックアップ数、問題点 | domain* |
GET /v1/dns/dmarc | $0.005 | DMARC レコードのチェックとポリシーの解析 | domain* |
GET /v1/email/validate | $0.005 | メールアドレスのチェック:構文、MX、使い捨てメール、ロールアドレス、無料プロバイダー、タイプミス | email* |
GET /v1/email/security | $0.02 | ドメインのメールセキュリティ監査:MX、SPF、DMARC、DKIM、MTA-STS、TLS-RPT、BIMI、評価 | domain*、dkimSelectors |
GET /v1/domain/rdap | $0.01 | ドメイン登録データ(RDAP/WHOIS):レジストラ、作成日、有効期限、経過年数、ステータス | domain* |
Web
| Endpoint | 価格 | 内容 | パラメーター |
|---|---|---|---|
GET /v1/web/extract | $0.01 | Webページを取得し、タイトルとメタデータに加えて、主要部分のテキストとMarkdownを整形して返します | url*、format、mode、maxChars |
GET /v1/web/metadata | $0.008 | リンクプレビューとSEO向けのページメタデータ:タイトル、説明、OpenGraph、Twitterカード、JSON-LD、ファビコン | url* |
GET /v1/web/links | $0.008 | ページ上のすべてのリンクを絶対URLで取得し、重複を除去して内部リンクと外部リンクに分けます | url*、filter、limit |
GET /v1/web/headers | $0.005 | HTTPステータス、レスポンスヘッダー、リダイレクトチェーン、所要時間、セキュリティヘッダーの監査結果 | url*、method |
GET /v1/web/robots | $0.005 | robots.txtにより、クローラーにURLへのアクセスが許可されているかを確認します。ルール、クロール遅延、サイトマップも取得します | url*、userAgent |
GET /v1/web/sitemap | $0.008 | sitemap.xml(またはサイトのデフォルトのサイトマップ)を読み込みます:lastmodと子サイトマップを含むURL | url*、limit |
POST /v1/html/extract | $0.005 | 手元にあるHTMLを整形済みのテキスト/Markdownに変換し、メタデータとリンクを抽出します | html*、baseUrl、format、mode、maxChars |
GET /v1/url/parse | $0.003 | URLを解析、正規化して整形します(構成要素、クエリパラメーター、punycode、トラッキングパラメーターの削除) | url* |
EVM
| Endpoint | 価格 | 内容 | パラメーター |
|---|---|---|---|
GET /v1/evm/address | $0.003 | EVMアドレスを検証し、EIP-55チェックサム形式で返します | address* |
GET /v1/evm/contract | $0.005 | アドレスがコントラクトかウォレットかを判定します。コードサイズ、EIP-1967プロキシの実装/管理者/ビーコン、EIP-7702の委任も確認します | address*、chain |
GET /v1/evm/selector | $0.003 | Solidityシグネチャに対応する関数セレクターとイベントトピックを取得します | signature* |
GET /v1/evm/selector-lookup | $0.005 | 4バイトの関数セレクターと32バイトのイベントトピックからシグネチャを逆引きします | selectors* |
POST /v1/evm/abi-encode | $0.003 | 値をABIエンコードします(関数シグネチャを指定した場合は完全なcalldataを生成します) | signature、types、values* |
POST /v1/evm/abi-decode | $0.003 | 既知の型またはシグネチャを使って、calldata、戻り値データ、ログデータをABIデコードします | data*、signature、types |
POST /v1/evm/calldata-decode | $0.005 | 不明なトランザクションのcalldataをデコードします:関数シグネチャを特定し、引数をデコードします | data* |
GET /v1/evm/tx | $0.01 | EVMトランザクションを解説します:ステータス、手数料、デコードされたメソッド、ERC-20/721の送金 | hash*、chain |
GET /v1/evm/token | $0.005 | ERC-20トークンのメタデータ:名前、シンボル、小数桁数、総供給量(オンチェーン) | address*、chain |
GET /v1/evm/balance | $0.005 | アドレスのネイティブ通貨とERC-20の残高 | address*、chain、tokens |
GET /v1/evm/gas | $0.003 | EVMチェーンの現在のガス価格、基本手数料、優先手数料 | chain |
GET /v1/evm/ens | $0.005 | ENS:名前をアドレスに解決するか、アドレスのプライマリ名を確認済みの状態で取得します | name、address |
GET /v1/evm/units | $0.003 | wei、gwei、ether、または任意のトークンの小数桁数の間で正確に変換します | value*、from、to |
POST /v1/evm/verify-message | $0.003 | EIP-191のpersonal_signメッセージの署名者を復元し、アドレスと照合します | message、signature、address、messageEncoding |
x402
| Endpoint | 価格 | 内容 | パラメーター |
|---|---|---|---|
GET /v1/x402/check | $0.01 | x402エンドポイントを調査します:稼働中か、料金はいくらか、どのチェーンで誰に支払うのか、402が有効かを確認します | url*、method |
GET /v1/x402/search | $0.01 | x402 Bazaarのカタログをキーワードで検索し、料金付きの有料APIを探します | query*、network、maxPriceUsd、limit |
IP と CIDR
| エンドポイント | 価格 | 機能 | パラメーター |
|---|---|---|---|
GET /v1/ip/info | $0.003 | IPv4/IPv6 アドレスを解析して分類します(プライベート、ループバック、CGNAT、ドキュメント用など) | ip* |
GET /v1/ip/cidr | $0.003 | IPv4/IPv6 CIDR ブロックのサブネット計算ツールです | cidr* |
POST /v1/ip/contains | $0.003 | 指定した IP のうち、どれがどの CIDR 範囲に含まれるかを調べます(許可リスト/ブロックリストの確認) | cidrs, ips |
GET /v1/ip/split | $0.003 | CIDR ブロックをより小さなサブネットに分割します | cidr, newPrefix, limit |
POST /v1/ip/aggregate | $0.003 | CIDR のリストを、同等の最小セットに統合/集約します | cidrs* |
GET /v1/ip/range | $0.003 | IP 範囲(開始アドレス〜終了アドレス)を最小限の CIDR ブロックのリストに変換します | start, end |
データとテキスト
| エンドポイント | 価格 | 機能 | パラメーター |
|---|---|---|---|
POST /v1/json/validate | $0.003 | JSON データを JSON Schema(draft 2020-12/draft-07)に照らして検証します | schema, data, formats |
POST /v1/json/format | $0.003 | JSON を解析し、整形、最小化、または正規化(キーをソート)します。構文エラーの位置も特定します | json*, mode, indent, sortKeys |
POST /v1/json/query | $0.003 | JSON Pointer またはドット区切りのパス(a.b[0].c、items[*].id)を使って JSON から値を抽出します | json*, path, paths |
POST /v1/json/diff | $0.003 | 2 つの JSON ドキュメントの構造的な差分を JSON Patch 形式の操作として返します | a, b |
POST /v1/csv/to-json | $0.003 | CSV/TSV を JSON に変換します(RFC 4180 の引用符処理、区切り文字の自動検出、型推論) | csv*, delimiter, header, inferTypes |
POST /v1/json/to-csv | $0.003 | オブジェクトの JSON 配列を CSV に変換します(ネストされたオブジェクトはドット区切りのキーにフラット化) | json*, delimiter, flatten |
POST /v1/text/stats | $0.003 | テキストの統計情報を取得します:単語数、文の数、読了時間、可読性、キーワード上位 | text*, top |
POST /v1/text/diff | $0.003 | 2 つのテキストの行単位の差分を、追加/削除数付きの統一 diff として返します | a, b, context |
POST /v1/text/transform | $0.003 | スラッグ化と大文字・小文字の変換(キャメル、スネーク、ケバブ、タイトル、定数など)、トリミング、行の重複除去を行います | text, op |
エンコードとハッシュ
| エンドポイント | 価格 | 機能 | パラメーター |
|---|---|---|---|
POST /v1/hash | $0.003 | テキストまたはバイト列をハッシュ化します:SHA-1/2/3、Keccak-256、MD5、RIPEMD-160、BLAKE2/3 | data*, inputEncoding, algorithm, outputEncoding |
POST /v1/hmac | $0.003 | HMAC(SHA-256/384/512/1、MD5)を計算します。たとえば、Webhook の署名確認に使えます | message, key, keyEncoding, algorithm, expected |
POST /v1/encode | $0.003 | UTF-8、hex、base64、base64url、base32、base58 間で変換し、URL と HTML のエスケープを行います | data*, from, to |
GET /v1/uuid | $0.003 | UUID(ランダムな v4、時系列順の v7)を生成するか、UUID を解析/検証します | uuid, version, count |
POST /v1/jwt/decode | $0.003 | JWT をデコードして時刻を確認します。オプションで HS256/384/512 署名を検証できます | token*, secret, secretEncoding |
GET /v1/random | $0.003 | 暗号学的に安全なランダムバイト、トークン、パスワードを生成します | kind, length, encoding, symbols, count |
変換
| エンドポイント | 価格 | 機能 | パラメーター |
|---|---|---|---|
GET /v1/convert/units | $0.003 | 長さ、質量、体積、面積、速度、時間、データ、圧力、エネルギー、電力、温度、角度の単位を変換します | value, from, to* |
GET /v1/time/convert | $0.003 | 夏時間に対応したオフセットを使い、タイムゾーン間および形式(ISO、unix、RFC 2822)間で時刻を変換します | time, from, to |
GET /v1/time/diff | $0.003 | 2つの日付/時刻の間隔、暦上の差、営業日数を算出します | start*, end, tz |
GET /v1/cron/next | $0.003 | cron 式を説明し、任意のタイムゾーンで次回の実行時刻を一覧表示します | expression*, tz, count, from |
GET /v1/color | $0.003 | 色の変換(hex、RGB、HSL)と、2色間の WCAG コントラスト比を算出します | color*, against |
GET /v1/convert/currency | $0.005 | ECB の公式ユーロ参考レート(法定通貨30種類)を使って通貨を換算します | amount, from, to |
検証と解析
| エンドポイント | 価格 | 機能 | パラメーター |
|---|---|---|---|
GET /v1/semver | $0.003 | セマンティックバージョンを解析、比較、並べ替えし、npm 形式の範囲に照らして確認します | versions*, range, compareTo |
GET /v1/iban/validate | $0.003 | IBAN を検証します:国ごとの長さ、mod-97 チェックディジット、整形済み出力 | iban* |
GET /v1/user-agent | $0.003 | User-Agent を解析します:ブラウザー、エンジン、OS、デバイスの種類、既知のボット/AI クローラー | ua* |
制限
- IP アドレスごとに、価格見積もりは毎分120回、有料リクエストは毎分60回までです。
- リクエストボディは最大64 KB(ハッシュ、テキスト、JSON、CSV、HTML ツールは1〜2 MB)、クエリー文字列は最大16 KBです。
- URL ツールは最大2 MBまでダウンロードし、12秒でタイムアウトします。各ツール呼び出しの上限時間は25秒です。
セキュリティ
- 処理前に支払いを確認します。 まず支払い(正確な金額、送金先、ネットワーク、有効期間が15分以内であること、署名が支払者のものであることのローカル検証)を確認し、次に入力を検証します。その後、USDC コントラクトに認可が未使用かどうかを問い合わせ、ファシリテーターが検証します。これらが完了してからツールを実行し、決済の確認後にのみ結果を返します。使用済みの認可は、処理開始前に拒否されます。
- サーバーに鍵はありません。 デプロイ先は固定アドレスへの支払いのみを受け付け、秘密鍵やシークレットを保持しません。
- SSRF 対策。 ユーザーの URL は、認証情報を含まず、ポート80、443、8080、8443のいずれかを使う
http/httpsである必要があります。リテラル IP とすべての DNS 応答(A および AAAA)は、パブリックユニキャストでなければなりません。プライベート、ループバック、リンクローカル、CGNAT、マルチキャスト、ドキュメント用、NAT64、6to4、Teredo、IPv4 マップ形式は拒否されます。リダイレクトは手動でたどり、各ホップを再検証します。送信するのは GET と HEAD のみで、呼び出し元のヘッダーや Cookie は送信しません。 - 上流接続先は固定です。 それ以外(DNS-over-HTTPS、パブリック EVM RPC、署名データベース、ECB レート、IANA RDAP ブートストラップ、ファシリテーター、ディスカバリーカタログ)は、リダイレクトをたどらず、固定の許可リストにあるホストに接続します。
- 処理量を制限しています。 すべての入力にサイズ制限があります。HTML パーサーは線形時間で動作し、ABI デコーダー、CSV パーサー、差分処理はサイズが制限されています。JSON Schema の
patternは線形時間のマッチャーで実行されるため、悪意のある正規表現によってサービスが停止することはありません。ユーザーが提供したものをコードとして評価することはありません。 - プライバシー。 入力はメモリー上で処理され、保存されません。ログに記録するのはツール名、ステータス、支払者アドレス、決済ハッシュのみです。
脅威モデルと問題の報告方法については、SECURITY.md をご覧ください。
自分で実行する
Cloudflare Workers、プレーンな JavaScript、バージョンを固定した2つの依存関係(@noble/hashes、@noble/curves)。
npm ci --ignore-scripts
node test/run.mjs # offline suite (mocked network)
node test/live.mjs # live smoke test of the network tools (no payments)
npx wrangler dev # local
npx wrangler deploy --env test # Base Sepolia twin (test USDC)
デプロイ前に、wrangler.toml の PAY_TO をご自身の受取アドレスに設定してください。
お問い合わせ
大量利用、ご希望のツール、またはバグについては、Telegram の @SwiftBotLabsBot までご連絡ください。
MIT License。Swift Bot Labs 制作。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。