evmcp
EVM + MCP — AI アシスタントにブロックチェーンの超能力を与えます。
Base、Optimism、Avalanche、Celo、Arbitrum のオンチェーンデータにリアルタイムでアクセスできる MCP サーバーです。バッチクエリやクロスチェーンデータ用のスマートコントラクトもオンチェーンにデプロイされています。
仕組み
EVMCP は、AI アシスタントが外部ツールを呼び出せる標準規格である Model Context Protocol(MCP)を実装しています。接続すると、AI アシスタントは残高の照会、トランザクションのデコード、ガス価格の比較など、5 つの EVM チェーンで実行できる 28 個の読み取り専用ブロックチェーンツールを利用できるようになります。
EVMCP の特長は、付属のスマートコントラクトです。Avalanche と Celo にデプロイされた 4 つの Solidity コントラクトにより、Multicall3 を使ったバッチクエリ、オンチェーンのツールレジストリ、イベントの集約、クロスチェーン残高のキャッシュが可能になります。MCP サーバーはこれらのコントラクトから読み取ります。書き込み操作はすべて、別途管理用 CLI で実行します。
クイックスタート
Claude Desktop の場合
Claude Desktop の設定ファイル(~/Library/Application Support/Claude/claude_desktop_config.json)に追加します。
{
"mcpServers": {
"evmcp": {
"command": "npx",
"args": ["-y", "evmcp"],
"env": { "ALCHEMY_API_KEY": "your_key_here" }
}
}
}
Claude Code の場合
claude mcp add evmcp -- npx -y evmcp
対応チェーン
| チェーン | チェーン ID | ネイティブトークン | 付属コントラクト |
|---|
| Base | 8453 | ETH | 未デプロイ |
| Optimism | 10 | ETH | 未デプロイ |
| Avalanche C-Chain | 43114 | AVAX | デプロイ済み |
| Celo | 42220 | CELO | デプロイ済み |
| Arbitrum One | 42161 | ETH | 未デプロイ |
Ethereum mainnet(チェーン ID 1)も、ENS の解決に限り対応しています。
ツール(全 29 個)
残高(3)
| ツール | 説明 |
|---|
getBalance | 特定のチェーン上で、アドレスのネイティブトークン残高(ETH/AVAX/CELO)を取得します |
getTokenBalance | 特定のチェーン上で、アドレスの ERC20 トークン残高を取得します |
getMultiChainBalance | 対応する 5 つすべてのチェーンで、アドレスのネイティブトークン残高を並列に取得します |
ブロック(3)
| ツール | 説明 |
|---|
getBlock | 特定のチェーンで、ハッシュを指定してブロックを取得します |
getBlockByNumber | 特定のチェーンで、番号を指定してブロックを取得します。最新のブロックを取得するには「latest」を渡します |
getLatestBlock | 特定のチェーンの最新ブロック番号、タイムスタンプ、ベースフィーを取得します |
トランザクション(3)
| ツール | 説明 |
|---|
getTransaction | 特定のチェーンで、ハッシュを指定してトランザクションを取得します |
getTransactionReceipt | ステータス、gasUsed、ログを含むトランザクションのレシートを取得します |
decodeTransaction | 指定された ABI を使って、トランザクションの関数呼び出しをデコードします |
コントラクト(3)
| ツール | 説明 |
|---|
readContract | 指定された ABI を使って、スマートコントラクトの読み取り専用関数を呼び出します |
getContractCode | アドレスにコントラクトコードがデプロイされているか確認し、バイトコードの長さとハッシュを取得します |
getStorageAt | 特定のアドレスにあるストレージスロットの生の値を読み取ります |
トークン(2)
| ツール | 説明 |
|---|
getERC20Info | 名前、シンボル、小数点以下の桁数、総供給量など、ERC20 トークンのメタデータを取得します |
getTokenAllowance | 所有者が使用者に許可した ERC20 トークンの使用許容量を取得します |
ガス(3)
| ツール | 説明 |
|---|
getGasPrice | 特定のチェーンの現在のガス価格と EIP-1559 の手数料データを取得します |
estimateGas | 特定のチェーンでトランザクションに必要なガスを見積もります |
compareGasAcrossChains | 対応する 5 つすべてのチェーンの現在のガス価格を比較します |
ENS(2)
| ツール | 説明 |
|---|
resolveENS | Ethereum L1 経由で ENS 名(例:vitalik.eth)を Ethereum アドレスに解決します |
lookupAddress | Ethereum L1 経由でアドレスを逆引きし、ENS 名を取得します |
イベント(2)
| ツール | 説明 |
|---|
getContractEvents | 特定のチェーンで、コントラクトが発行したイベントログを取得します |
decodeEventLog | 指定された ABI を使って、生のイベントログをデコードします |
チェーンとヘルスチェック(3)
| ツール | 説明 |
|---|
getChainInfo | チェーン名、チェーン ID、現在のブロック番号、ブロック時間、ネイティブ通貨のシンボルを取得します |
isContractDeployed | サポート対象の 5 つすべてのチェーンで、アドレスにコントラクトコードがデプロイされているか確認します |
healthCheck | 6 つの RPC エンドポイント(Ethereum、Base、Optimism、Avalanche、Celo、Arbitrum)への接続をテストします |
バッチ(1)
| ツール | 説明 |
|---|
batchQuery | Multicall3 を使用して、1 回の RPC リクエストで複数の読み取り呼び出しを実行します |
クロスチェーン(2)
| ツール | 説明 |
|---|
compareBalances | 5 つすべてのチェーンにおけるアドレスのネイティブトークン残高を比較します |
crossChainActivity | 5 つすべてのチェーンにおけるアドレスのトランザクション数を確認します |
レジストリ(1)
| ツール | 説明 |
|---|
queryRegistry | オンチェーンの MCPRegistry コンパニオンコントラクトから登録済みツールのメタデータを読み取ります |
オプティマイザー(1)
| ツール | 説明 |
|---|
gasOptimizer | Base/Optimism/Arbitrum の L1 データ手数料を考慮して、トランザクションに最も低コストなチェーンを推奨します |
リソース(4)
| URI パターン | 説明 | キャッシュ TTL |
|---|
chain://{chainId}/status | チェーンの現在のブロック高とガス価格 | 12s |
chain://{chainId}/gas | gwei 単位のベース手数料、ガス価格、優先手数料 | 12s |
chain://{chainId}/tokens/popular | 人気トークンのアドレスと小数桁数(v1 用にハードコード) | 1 hour |
evmcp://chains | サポート対象のすべてのチェーンの ID、シンボル、コンパニオンコントラクトアドレス | Static |
テンプレート化されたリソースでサポートされるチェーン ID:8453(Base)、10(Optimism)、43114(Avalanche)、42220(Celo)、42161(Arbitrum)。
プロンプト(4)
| プロンプト | 引数 | 説明 |
|---|
analyze-wallet | address | ウォレットのマルチチェーン残高とアクティビティを分析します |
audit-contract | contractAddress, chain | スマートコントラクトの基本的な調査と監査のワークフローです |
compare-chains | (なし) | すべてのチェーンのガスコスト、速度、特性を比較します |
investigate-tx | txHash, chain | トランザクションを詳細にデコード、分析、追跡します |
コンパニオンコントラクト
4 つの Solidity コントラクトが Avalanche と Celo にデプロイされています。MCP サーバーはこれらのコントラクトを読み取り、バッチクエリ、オンチェーンのツールメタデータ、クロスチェーンデータを提供します。Base と Optimism へのデプロイは計画中です。
Avalanche C-Chain(43114)
| コントラクト | アドレス |
|---|
| MCPRegistry | 0x62402b65bfb4Fd022285A6FC2F26d8caEEc3D055 |
| BatchQuery | 0xfDc19e0617AdF1811A68Aa1575409F3769f39491 |
| EventAggregator | 0xECE24a53A28F088351EC2Da258f78479e81A8007 |
| CrossChainCache | 0x0899a6Ef23c6B39A4D9B877B219645B89209A670 |
Celo(42220)
| コントラクト | アドレス |
|---|
| MCPRegistry | 0x62402b65bfb4Fd022285A6FC2F26d8caEEc3D055 |
| BatchQuery | 0xfDc19e0617AdF1811A68Aa1575409F3769f39491 |
| EventAggregator | 0xECE24a53A28F088351EC2Da258f78479e81A8007 |
| CrossChainCache | 0x0899a6Ef23c6B39A4D9B877B219645B89209A670 |
コントラクトの説明
- MCPRegistry -- すべての EVMCP ツールのオンチェーンメタデータ(名前、説明、バージョン)です。書き込みはオーナーのみ可能です。
- BatchQuery -- Multicall3 を介した最適化されたバッチ読み取りです。複数の残高、複数のコントラクト確認、複数のトークン残高を処理するヘルパーを含みます。
- EventAggregator -- コントラクトごとのイベント数の概要をキャッシュします。管理用 CLI によって更新されます。
- CrossChainCache -- クロスチェーンクエリ用の残高スナップショットを保存します。管理用 CLI によって更新されます。
環境変数
| 変数 | 必須 | 説明 |
|---|
ALCHEMY_API_KEY | はい* | Alchemy API キー(すべてのチェーンに適用) |
BASE_RPC_URL | いいえ* | Base の RPC URL を上書きします |
OPTIMISM_RPC_URL | いいえ* | Optimism の RPC URL を上書きします |
AVALANCHE_RPC_URL | いいえ* | Avalanche の RPC URL を上書きします |
CELO_RPC_URL | いいえ* | Celo の RPC URL を上書きします |
ARBITRUM_RPC_URL | いいえ* | Arbitrum の RPC URL を上書きします |
ETHEREUM_RPC_URL | いいえ | ENS 解決用の RPC URL を上書きします |
CACHE_TTL_SECONDS | いいえ | キャッシュの TTL(秒単位。デフォルト:15) |
CACHE_MAX_ENTRIES | いいえ | キャッシュの最大エントリー数(デフォルト:1000) |
LOG_LEVEL | いいえ | debug、info、warn、または error(デフォルト:info) |
USE_TESTNETS | いいえ | テストネットチェーンを使用します(デフォルト:false) |
| TRANSPORT | いいえ | stdio(デフォルト)または Streamable HTTP トランスポート用の http |
| HTTP_PORT | いいえ | HTTP トランスポートのポート(デフォルト:3402) |
| X402_ENABLED | いいえ | HTTP トランスポートで x402 による支払いゲートを有効にします |
| X402_PAYEE_ADDRESS | いいえ** | Base 上の USDC 受取アドレス |
| X402_FACILITATOR_URL | いいえ | x402 ファシリテーターの URL(デフォルトあり) |
*ALCHEMY_API_KEY または個別のチェーン RPC URL 5 つすべてを指定してください。
**X402_ENABLED=true の場合に必須です。
開発
pnpm install
pnpm build
pnpm inspect # MCP Inspector UI at localhost:6274
pnpm test # Unit tests
pnpm typecheck # Type check
pnpm lint # ESLint
ライセンス
MIT