evmcp
EVM + MCP — 赋予你的 AI 助手区块链超能力。
提供实时链上数据访问的 MCP 服务,覆盖 Base、Optimism、Avalanche、Celo 和 Arbitrum,并配备部署在链上的智能合约,用于批量查询和跨链数据。
工作原理
EVMCP 实现了 Model Context Protocol(MCP),这是一种允许 AI 助手调用外部工具的标准。连接后,你的 AI 助手便可使用 28 种只读区块链工具,在五条 EVM 链上查询余额、解码交易、比较 Gas 价格等。
EVMCP 的独特之处在于其配套智能合约——部署在 Avalanche 和 Celo 上的四个 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 主网(链 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 代币额度 |
Gas(3)
| 工具 | 描述 |
|---|
getGasPrice | 获取指定链上当前的 Gas 价格和 EIP-1559 费用数据 |
estimateGas | 估算指定链上某笔交易的 Gas 用量 |
compareGasAcrossChains | 比较全部 5 条受支持链上的当前 Gas 价格 |
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 在单个 RPC 请求中执行多个只读调用 |
跨链(2)
| 工具 | 描述 |
|---|
compareBalances | 比较某个地址在所有 5 条链上的原生代币余额 |
crossChainActivity | 检查某个地址在所有 5 条链上的交易数量 |
注册表(1)
| 工具 | 描述 |
|---|
queryRegistry | 从链上的 MCPRegistry 配套合约读取已注册工具的元数据 |
优化器(1)
| 工具 | 描述 |
|---|
gasOptimizer | 为交易推荐成本最低的链,并将 Base/Optimism/Arbitrum 上的 L1 数据费用纳入考量 |
资源(4)
| URI 模式 | 描述 | 缓存 TTL |
|---|
chain://{chainId}/status | 某条链的当前区块高度和 gas 价格 | 12s |
chain://{chainId}/gas | 以 gwei 为单位的基础费用、gas 价格和优先费用 | 12s |
chain://{chainId}/tokens/popular | 常用代币地址和小数位数(v1 中硬编码) | 1 小时 |
evmcp://chains | 所有受支持链的 ID、符号和配套合约地址 | 静态 |
模板化资源支持的链 ID:8453(Base)、10(Optimism)、43114(Avalanche)、42220(Celo)、42161(Arbitrum)。
提示词(4)
| 提示词 | 参数 | 描述 |
|---|
analyze-wallet | address | 对钱包进行多链余额和活动分析 |
audit-contract | contractAddress、chain | 智能合约的基础检查与审计工作流 |
compare-chains | (无) | 比较所有链的 gas 成本、速度和特性 |
investigate-tx | txHash、chain | 详细解码、分析和追踪交易 |
配套合约
四个 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 | Yes* | Alchemy API 密钥(适用于所有链) |
BASE_RPC_URL | No* | 覆盖 Base 的 RPC URL |
OPTIMISM_RPC_URL | No* | 覆盖 Optimism 的 RPC URL |
AVALANCHE_RPC_URL | No* | 覆盖 Avalanche 的 RPC URL |
CELO_RPC_URL | No* | 覆盖 Celo 的 RPC URL |
ARBITRUM_RPC_URL | No* | 覆盖 Arbitrum 的 RPC URL |
ETHEREUM_RPC_URL | No | 覆盖用于 ENS 解析的 RPC URL |
CACHE_TTL_SECONDS | No | 缓存 TTL(秒,默认值:15) |
CACHE_MAX_ENTRIES | No | 缓存条目数上限(默认值:1000) |
LOG_LEVEL | No | debug、info、warn 或 error(默认值:info) |
USE_TESTNETS | No | 使用测试网链(默认值:false) |
| TRANSPORT | No | stdio(默认值)或用于 Streamable HTTP 传输的 http |
| HTTP_PORT | No | HTTP 传输端口(默认值:3402) |
| X402_ENABLED | No | 在 HTTP 传输上启用 x402 付费门控 |
| X402_PAYEE_ADDRESS | No** | Base 上的 USDC 收款地址 |
| X402_FACILITATOR_URL | No | x402 facilitator URL(有默认值) |
*请提供 ALCHEMY_API_KEY,或提供全部五个独立的链 RPC URL。
**当 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