用途
evm-mcp 是一个 MCP(模型上下文协议)服务器,用于在 AI 编程环境中(如 Cursor、Claude Desktop)提供对 EVM JSON-RPC 方法的完整访问。它让 AI 能够直接与任何 EVM 兼容区块链交互,支持以太坊、Polygon、Arbitrum、Optimism、BSC、Avalanche、Base 等网络,并兼容 Infura、Alchemy、QuickNode、本地节点及自定义 RPC 等节点提供商。
主要能力
区块链数据查询
提供 20 多种 RPC 方法,包括:
- eth_blockNumber:获取最新区块号
- eth_getBalance:获取账户余额
- eth_getTransactionCount:获取交易计数(nonce)
- eth_getBlockByNumber:获取区块信息
- eth_getTransactionByHash:获取交易详情
- eth_getTransactionReceipt:获取交易收据
- eth_getCode:获取合约字节码
- eth_getStorageAt:获取存储值
- eth_call:执行合约调用
- eth_estimateGas:估算交易 gas
- eth_sendRawTransaction:发送已签名交易
- eth_gasPrice:获取当前 gas 价格
交易模拟(只读,不会广播)
可用自然语言构造交易,并针对分叉/覆盖的 EVM 状态进行模拟。报告交易是否会成功或回滚、回滚原因(通俗英文)、估算 gas 以及余额/状态变化。支持地址别名和 ENS 名称(如 alice.eth)。默认发送方会获得虚拟 ETH 以便从任意地址模拟;设置 fund: false 可使用真实余额。
- simulate_native_transfer:模拟发送原生货币
- simulate_erc20_transfer:模拟 ERC20 转账(支持人类可读金额)
- simulate_contract_call:编码函数签名和参数并模拟调用
- simulate_transaction:模拟原始交易(from/to/value/data)
- encode_function_data:从人类可读签名编码 calldata(纯辅助工具,无 RPC) 这些工具仅使用 eth_call、eth_estimateGas 及 debug_traceCall(当提供商支持时),绝不会签名或发送真实交易。当 debug_traceCall 可用时使用真实状态差异,否则根据解码的意图推断变化。
事件与日志
- eth_getLogs:获取事件日志
- list_supported_networks:列出已配置的网络和提供商
- list_known_addresses:列出已配置的钱包别名和已知代币/合约地址
- eth_chainId:获取链 ID
- net_version:获取网络版本
- net_listening:检查是否正在监听
- net_peerCount:获取对等节点数
- web3_clientVersion:获取客户端版本
- web3_sha3:使用 Keccak-256 哈希数据
使用方式
安装
推荐在 Cursor 中一键安装(点击安装链接),或手动安装:
要求:Node.js 18+ 和 npm
添加到 claude_desktop_config.json: macOS:~/Library/Application Support/Claude/claude_desktop_config.json Windows:%APPDATA%\Claude\claude_desktop_config.json
配置后重启 Claude Desktop。
环境变量配置
至少需要一个提供商 API 密钥、自定义提供商或带 rpcUrl 的自定义网络。
- 内置提供商(Infura / Alchemy):设置 API 密钥后,服务器自动为支持的网络构建 RPC URL。每个 RPC 工具接受可选 network 参数(slug、名称或链 ID),省略时使用 DEFAULT_NETWORK。
- 自定义提供商(CUSTOM_PROVIDERS):提供基础 URL 模板和特定网络 URL。绝对 networkUrls 直接使用(支持 {apiKey} 替换);相对路径(以 / 开头)附加到 baseUrl。
- 自定义网络(CUSTOM_NETWORKS):按名称注册任意链,或通过设置 provider 并添加网络 slug 到该提供商的 networkUrls 来路由。
- 已知地址(KNOWN_ADDRESSES):按名称注册代币和合约,使工具接受如 USDC 的别名而非原始十六进制地址。每个条目针对特定网络。当 eth_getBalance 使用代币别名调用时,服务器使用 WALLET_ADDRESSES 中配置的第一个钱包作为代币持有者。
- 钱包地址(WALLET_ADDRESSES):按别名注册个人钱包和合约,可用“检查我的个人钱包”代替粘贴十六进制地址。地址别名适用于 eth_getBalance、eth_getCode、eth_call、eth_getLogs 及其他接受地址参数的工具。使用 list_known_addresses 发现已配置别名。
配置更改需重启 MCP 服务器。
支持的内置网络
- Ethereum:主网、Sepolia
- Polygon:主网、Amoy
- Arbitrum:One、Sepolia
- Optimism:主网、Sepolia
- BNB Smart Chain:主网、测试网
- Avalanche:C-Chain
- Base:主网、Sepolia
- 通过 CUSTOM_NETWORKS 支持任意 EVM 兼容链
示例操作
- 获取最新区块号
- 使用十六进制地址或配置别名检查账户余额
- 查看交易信息
- 执行合约调用
- 查询合约事件
适用场景
- 区块链分析:查询交易数据、余额和合约状态
- DeFi 应用:监控代币余额、交易收据和智能合约调用
- NFT 项目:追踪转账、元数据和集合统计
- 开发工具:调试交易、估算 gas 和测试智能合约
- 监控:观察特定事件和交易模式
- 研究:跨多个 EVM 网络分析区块链数据
限制
- 交易模拟工具仅使用 eth_call、eth_estimateGas 及 debug_traceCall(当提供商支持时),绝不签名或发送真实交易。
- 当 debug_traceCall 不可用时,状态变化根据解码意图推断,可能不精确。
- 配置更改需要重启 MCP 服务器。
- 需要 Node.js 18+ 和 npm。
- 需要至少一个提供商 API 密钥、自定义提供商或带 rpcUrl 的自定义网络。
技术细节
- 构建技术:Node.js、TypeScript、MCP SDK、Ethers.js
- 依赖:@modelcontextprotocol/sdk、ethers、zod
- 平台:macOS、Windows、Linux
- 许可证:MIT