mcpField
C
ChainRPC MCP

ChainRPC MCP

リモート
github.com/John0n1金融データ44 週間前に更新
リポジトリ

ChainRPC MCP について

ChainRPC MCPは、JSON-RPC経由でEVMとBitcoinのデータを読み取るMCPサーバーです。用途を絞ったブロックチェーンツールを備え、明示的な安全設定を有効にした場合のみ署名済みトランザクションを送信できます。

主な機能

  1. 01EVMとBitcoinの残高、ブロック、取引を読み取る
  2. 02コントラクトデータとイベントログを参照
  3. 03GasとBitcoin手数料を見積もる
  4. 04トランザクションデータをデコード
  5. 05安全設定のもとで署名済み取引を送信

活用シーン

  1. 01残高と最近のチェーン動向を調べる
  2. 02スマートコントラクトの状態とイベントログを読む
  3. 03取引のGasや手数料を見積もる
  4. 04明示的な安全措置のもとで署名済み取引を送信

MCP 対応

stdioまたはStreamable HTTPを通じて、EVMとBitcoinのRPCツールをMCPクライアントに提供します。トランザクションのブロードキャストは既定で無効で、署名済みデータと明示的な確認が必要です。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://chainrpc-mcp.mitander.io/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npmchainrpc-mcp2.0.2

ツール

詳細

ChainRPC MCP

EVM チェーンと Bitcoin 向けの JSON-RPC MCP サーバー

npm CI Node.js License: MIT

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_readContractABI から関数をエンコードし、呼び出してデコードしますいいえ
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_URLhttps://ethereum-rpc.publicnode.com任意の HTTP(S) EVM JSON-RPC エンドポイント
BITCOIN_RPC_URLhttps://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_MS12000上流への試行ごとのタイムアウト
RPC_RETRIES1再試行可能な読み取り専用の再試行回数
RPC_MAX_RESPONSE_BYTES10000000上流の応答ボディの最大サイズ
RPC_MAX_CONCURRENCY20チェーンクライアントごとの同時リクエストの最大数
ALLOW_EVM_BROADCASTfalse署名済み EVM トランザクションの送信を有効にします
ALLOW_BITCOIN_BROADCASTfalse署名済み Bitcoin トランザクションの送信を有効にします
TRANSPORTstdioデフォルトのトランスポート:stdio または http
HOST / PORT127.0.0.1 / 3000HTTP のバインドアドレスとポート
MCP_PATH/mcpストリーミング可能な HTTP MCP パス
MCP_AUTH_TOKEN未設定/mcp 用の任意のベアラートークン
ALLOWED_HOSTS未設定HTTP をループバック以外のアドレスにバインドする場合に必須となる許可リスト
CORS_ORIGINS未設定カンマ区切りのブラウザーオリジン許可リスト
MAX_MCP_SESSIONS1000HTTP MCP セッションの同時接続数の上限
HTTP_BODY_LIMIT1mbExpress のリクエストボディの上限

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:stdiostdio トランスポートを起動します
npm startStreamable HTTP を起動します
npm run devNode のウォッチモードで HTTP を起動します
npm testテストスイートを実行します
npm run checkエントリーポイントの構文をチェックし、すべてのテストを実行します
npm pack --dry-runnpm パッケージの内容を確認します

詳細な設計と修正記録については、docs/AUDIT.md を参照してください。Issue やプルリクエストによる貢献を歓迎します。脆弱性が疑われる場合は、公開 Issue ではなく、非公開の GitHub セキュリティアドバイザリをご利用ください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。