ChainRPC MCP について
ChainRPC MCPは、JSON-RPC経由でEVMとBitcoinのデータを読み取るMCPサーバーです。用途を絞ったブロックチェーンツールを備え、明示的な安全設定を有効にした場合のみ署名済みトランザクションを送信できます。
主な機能
- 01EVMとBitcoinの残高、ブロック、取引を読み取る
- 02コントラクトデータとイベントログを参照
- 03GasとBitcoin手数料を見積もる
- 04トランザクションデータをデコード
- 05安全設定のもとで署名済み取引を送信
活用シーン
- 01残高と最近のチェーン動向を調べる
- 02スマートコントラクトの状態とイベントログを読む
- 03取引のGasや手数料を見積もる
- 04明示的な安全措置のもとで署名済み取引を送信
MCP 対応
stdioまたはStreamable HTTPを通じて、EVMとBitcoinのRPCツールをMCPクライアントに提供します。トランザクションのブロードキャストは既定で無効で、署名済みデータと明示的な確認が必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://chainrpc-mcp.mitander.io/mcpclaude mcp add --transport http john0n1-chainrpc https://chainrpc-mcp.mitander.io/mcp{"mcpServers":{"john0n1-chainrpc":{"type":"http","url":"https://chainrpc-mcp.mitander.io/mcp"}}}Cursor で開く{"servers":{"john0n1-chainrpc":{"type":"http","url":"https://chainrpc-mcp.mitander.io/mcp"}}}VS Code で開く{"mcpServers":{"john0n1-chainrpc":{"type":"http","url":"https://chainrpc-mcp.mitander.io/mcp"}}}{"mcpServers":{"john0n1-chainrpc":{"serverUrl":"https://chainrpc-mcp.mitander.io/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
ChainRPC MCP
EVM チェーンと Bitcoin 向けの JSON-RPC MCP サーバー
EVM チェーンと Bitcoin 向けの、安全性を最優先にした Model Context Protocol サーバーです。
ChainRPC MCP は、残高、ブロック、トランザクション、ログ、スマートコントラクトの読み取り、ガスと手数料の見積もり、トランザクションのデコードに特化したツールをエージェントに提供します。署名済みのトランザクションを送信できますが、明示的な安全ゲートを有効にした場合に限られ、デフォルトでは無効です。秘密鍵を受け取ったり、ウォレットを管理したり、トランザクションに署名したりすることはありません。
- 2 つのエコシステムに 1 つのサーバー: EVM JSON-RPC と Bitcoin Core 互換 RPC に対応します。
- アカウントなしですぐに利用可能: PublicNode のパブリック Ethereum および Bitcoin エンドポイントをデフォルトで使用します。
- 独自のインフラストラクチャを利用可能: いずれのエンドポイントも置き換えられ、必要に応じて HTTP Basic 認証を使用できます。
- 公式トランスポート: 公式 MCP SDK を通じたローカル stdio と、ステートフルな Streamable HTTP に対応します。
- 設計上の制約: 任意の RPC の中継や、ウォレット、管理者、デバッグ、マイナー、ノード管理用のメソッドには対応しません。
接続方法を選択
ホスト型の読み取り専用サービス
パブリックエンドポイントは現在利用可能です。
https://chainrpc-mcp.mitander.io/mcp
リモート Streamable HTTP サーバーに対応するクライアント向け:
{
"mcpServers": {
"chainrpc-mcp": {
"url": "https://chainrpc-mcp.mitander.io/mcp"
}
}
}
ヘルスと上流のステータス:
curl 'https://chainrpc-mcp.mitander.io/health?upstream=1'
ホスト型サービスは共有型で、レート制限があり、ブロードキャスト機能は意図的に両方とも無効になっています。評価やパブリックチェーンの読み取りには適していますが、可用性 SLA はありません。リクエストはサービス運用者と上流の RPC プロバイダーに見えるため、機密性の高いクエリや本番ワークロードには独自のデプロイを使用してください。
ローカル stdio サーバー
要件:Node.js 20 以降。
npx -y chainrpc-mcp
クライアント設定の例:
{
"mcpServers": {
"chainrpc-mcp": {
"command": "npx",
"args": ["-y", "chainrpc-mcp"],
"env": {
"EVM_RPC_URL": "https://ethereum-rpc.publicnode.com",
"BITCOIN_RPC_URL": "https://bitcoin-rpc.publicnode.com"
}
}
}
}
RPC 変数は任意です。デフォルト値を明確にするために記載しています。
利用可能なツール
EVM
| ツール | 用途 | 状態変更 |
|---|---|---|
evm_getBlockNumber | 最新のブロック番号を返します | いいえ |
evm_getChainInfo | チェーン ID とクライアントのバージョンを返します | いいえ |
evm_getNativeBalance | 指定したブロック時点のネイティブトークン残高を読み取ります | いいえ |
evm_getBlock | 番号、タグ、またはハッシュでブロックを読み取ります | いいえ |
evm_getTransaction | トランザクションとレシートを読み取ります | いいえ |
evm_call | エンコード済み calldata を使って eth_call を実行します | いいえ |
evm_readContract | ABI から関数をエンコードし、呼び出してデコードします | いいえ |
evm_estimateTransaction | 未署名のトランザクションのガスを見積もります | いいえ |
evm_getLogs | アドレスとトピックのフィルターを使ってイベントログを検索します | いいえ |
evm_broadcastTransaction | 署名済みトランザクションのバイト列を事前チェックして送信します | はい |
任意の HTTP(S) EVM JSON-RPC エンドポイントを使用できるため、Ethereum のメインネット、テストネット、互換チェーンで同じツールを利用できます。結果は常に設定済みのエンドポイントから取得されます。チェーン固有の前提に基づいて処理を行う前に、evm_getChainInfo を確認してください。
Bitcoin
| ツール | 目的 | 状態を変更する |
|---|---|---|
btc_getBlockchainInfo | ネットワーク、高さ、同期、プルーニングに関する情報を返します | いいえ |
btc_getAddressBalance | アドレスの確認済み UTXO をスキャンします | いいえ |
btc_getBlock | 高さまたはハッシュを指定してブロックを読み取ります | いいえ |
btc_getTransaction | トランザクションの生データの詳細を読み取ります | いいえ |
btc_getTxOut | 未使用のトランザクション出力を検索します | いいえ |
btc_estimateFee | 指定した確認目標に対する手数料率を推定します | いいえ |
btc_decodeRawTransaction | シリアライズされたトランザクションのバイト列をデコードします | いいえ |
btc_broadcastTransaction | 署名済みトランザクションのバイト列を検証して送信します | はい |
Bitcoin Core はアドレスインデクサーではありません。btc_getAddressBalance は scantxoutset を使用し、履歴や未確認残高ではなく、現在未使用の確認済み出力を報告します。ノードで同時に実行できるスキャンは 1 つだけなので、共有エンドポイントでは scan already in progress が返される場合があります。アドレスのスキャンを頻繁に行う場合は、専用ノードを使用してください。
安全性モデル
ChainRPC MCP は、トランザクションの送信を例外的な操作として扱います。
ALLOW_EVM_BROADCASTまたはALLOW_BITCOIN_BROADCASTを明示的に有効にしない限り、ブロードキャストは無効です。- サーバーが受け付けるのは、シリアライズ済みの署名済みトランザクションのバイト列のみです。
- すべてのブロードキャスト呼び出しで、確認のために
I understand this broadcasts a real transactionという文字列をそのまま指定する必要があります。 - EVM の送信時には、エンドポイントとトランザクションのチェーン ID を確認し、保護されていないレガシートランザクションを拒否して、署名者を復元し、事前に
eth_estimateGasを実行します。 - Bitcoin の送信時には、エンドポイントのネットワークを確認し、
testmempoolacceptによるトランザクションの承認を必須とします。 - 送信リクエストは自動再試行されません。タイムアウトが発生すると、ブロードキャストの状態が不明確なままになる場合があります。
- 読み取り入力には厳格なスキーマを使用します。上流への同時実行数、タイムアウト、再試行、応答サイズには上限を設けています。
- HTTP モードではホストとブラウザーオリジンを検証し、ベアラー認証に対応し、リクエストボディのサイズに上限を設けています。また、デフォルトではループバックにバインドします。
RPC の応答は、信頼できない外部データです。侵害されたエンドポイントは、チェーンの状態について虚偽の情報を伝えたり、リクエストを検閲したり、クエリを監視したりする可能性があります。重要な判断は、できれば自分が管理するインフラストラクチャを使って、個別に検証してください。
脆弱性の報告方法と信頼境界の詳細については、SECURITY.md を参照してください。
設定
チェックアウトしたリポジトリから実行する場合は、example.env を .env にコピーしてください。
| 変数 | デフォルト値 | 説明 |
|---|---|---|
EVM_RPC_URL | https://ethereum-rpc.publicnode.com | 任意の HTTP(S) EVM JSON-RPC エンドポイント |
BITCOIN_RPC_URL | https://bitcoin-rpc.publicnode.com | 任意の HTTP(S) Bitcoin Core 互換エンドポイント |
EVM_RPC_USERNAME / EVM_RPC_PASSWORD | 未設定 | 任意の EVM HTTP Basic 認証用のユーザー名とパスワードのペア |
BITCOIN_RPC_USERNAME / BITCOIN_RPC_PASSWORD | 未設定 | 任意の Bitcoin HTTP Basic 認証用のユーザー名とパスワードのペア |
RPC_TIMEOUT_MS | 12000 | 上流への試行ごとのタイムアウト |
RPC_RETRIES | 1 | 再試行可能な読み取り専用の再試行回数 |
RPC_MAX_RESPONSE_BYTES | 10000000 | 上流の応答ボディの最大サイズ |
RPC_MAX_CONCURRENCY | 20 | チェーンクライアントごとの同時リクエストの最大数 |
ALLOW_EVM_BROADCAST | false | 署名済み EVM トランザクションの送信を有効にします |
ALLOW_BITCOIN_BROADCAST | false | 署名済み Bitcoin トランザクションの送信を有効にします |
TRANSPORT | stdio | デフォルトのトランスポート:stdio または http |
HOST / PORT | 127.0.0.1 / 3000 | HTTP のバインドアドレスとポート |
MCP_PATH | /mcp | ストリーミング可能な HTTP MCP パス |
MCP_AUTH_TOKEN | 未設定 | /mcp 用の任意のベアラートークン |
ALLOWED_HOSTS | 未設定 | HTTP をループバック以外のアドレスにバインドする場合に必須となる許可リスト |
CORS_ORIGINS | 未設定 | カンマ区切りのブラウザーオリジン許可リスト |
MAX_MCP_SESSIONS | 1000 | HTTP MCP セッションの同時接続数の上限 |
HTTP_BODY_LIMIT | 1mb | Express のリクエストボディの上限 |
GETH_URL は、後方互換性のために残されている非推奨の別名で、EVM_RPC_URL に対応します。RPC URL に埋め込まれた認証情報は拒否されます。対応するユーザー名とパスワードの変数を使用してください。
Streamable HTTP でのセルフホスト
ループバック専用の HTTP サーバーを起動します。
npm start
curl 'http://127.0.0.1:3000/health?upstream=1'
ループバック以外にバインドするには、ホスト許可リストと認証を明示的に設定します。
HOST=0.0.0.0 \
ALLOWED_HOSTS=mcp.example.com \
MCP_AUTH_TOKEN='replace-with-a-long-random-secret' \
npm start
信頼できるリバースプロキシで TLS を終端し、元の Host ヘッダーを保持して、オリジンを非公開にしてください。単一の信頼できるクライアントにはベアラートークンが便利です。複数ユーザーのデプロイでは、OAuth 対応のゲートウェイとネットワークアクセスポリシーを使用してください。
Docker のデフォルトは stdio です。HTTP 用にコマンドを上書きしてください。
docker build -t chainrpc-mcp .
docker run --rm -p 127.0.0.1:3000:3000 \
-e HOST=0.0.0.0 \
-e ALLOWED_HOSTS=localhost,127.0.0.1 \
-e MCP_AUTH_TOKEN='replace-with-a-long-random-secret' \
chainrpc-mcp --http
本番環境のサービス構成:
MCP client
|
v
Cloudflare edge -> outbound-only Cloudflare Tunnel -> nginx on loopback
|
v
ChainRPC MCP
/ \
v v
EVM RPC Bitcoin RPC
デプロイ単位、nginx の設定、セキュリティ強化の詳細、運用コマンドについては、docs/OPERATIONS.md を参照してください。
開発
git clone https://github.com/John0n1/chainrpc-mcp.git
cd chainrpc-mcp
npm ci
npm run check
npm run test:coverage
便利なコマンド:
| コマンド | 目的 |
|---|---|
npm run start:stdio | stdio トランスポートを起動します |
npm start | Streamable HTTP を起動します |
npm run dev | Node のウォッチモードで HTTP を起動します |
npm test | テストスイートを実行します |
npm run check | エントリーポイントの構文をチェックし、すべてのテストを実行します |
npm pack --dry-run | npm パッケージの内容を確認します |
詳細な設計と修正記録については、docs/AUDIT.md を参照してください。Issue やプルリクエストによる貢献を歓迎します。脆弱性が疑われる場合は、公開 Issue ではなく、非公開の GitHub セキュリティアドバイザリをご利用ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。