EVM JSON-RPC服务器

一个提供对以太坊虚拟机(EVM)JSON-RPC方法的全面访问的服务器,支持多种EVM兼容网络和节点提供商。

  • by JamesANZ
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 JamesANZ/evm-mcp

使用说明

⛽ EVM MCP服务器

在您的AI工作流程中完成EVM JSON-RPC访问。 通过任何节点提供商查询任何与EVM兼容的网络(以太坊、Polygon、Arbitrum、Optimism、BSC等)。适用于Infura、Alchemy、QuickNode、本地节点等。

一 MCP(模型上下文协议) 该服务器为Cursor和Claude Desktop等AI编码环境提供对以太坊虚拟机(EVM)JSON-RPC方法的全面访问。

为什么使用EVM MCP?

  • 🌐 任何EVM网络 –以太坊、Polygon、Arbitrum、乐观主义、BSC、雪崩等
  • 🔌 任何节点提供者 –Infura、炼金术、QuickNode、本地节点或自定义RPC
  • 📊 20+RPC方法 –完全访问区块链数据、交易和合同
  • ⚡ 轻松设置 –在Cursor中单击安装或简单的手动设置
  • 🔧 灵活配置 –适用于任何JSON-RPC兼容端点

快速开始

准备好与EVM区块链交互了吗?几秒钟内安装:

在Cursor中安装(推荐):

🔗 在游标中安装

或手动安装:

npm install -g @jamesanz/evm-mcp
# Or from source:
git clone https://github.com/JamesANZ/evm-mcp.git
cd evm-mcp && npm install && npm run build

特性

🔢 区块链数据

  • eth_blockNumber –获取最新的区块编号
  • eth_getBalance –获取账户余额
  • eth_getTransactionCount –获取交易计数(nonce)
  • eth_getBlockByNumber –获取区块信息
  • eth_getTransactionByHash –获取交易详细信息
  • eth_getTransactionReceipt –获取交易收据
  • eth_getCode –获取合约字节码
  • eth_getStorageAt –获取存储价值

🔄 交易

  • eth_call –执行合同调用
  • eth_estimateGas –估算交易用气
  • eth_sendRawTransaction –发送已签名的交易
  • eth_gasPrice –获取当前天然气价格

🧪 事务模拟(只读,从不广播)

用自然语言处理事务,并针对分叉/覆盖的EVM状态进行模拟。报告交易是成功还是恢复,恢复原因(用简单的英语),估计的天然气和余额/状态变化。支持地址别名和ENS名称(例如。 alice.eth).默认情况下,发送方由虚拟ETH资助,因此模拟可以“从”任何地址运行;设置 fund: false 使用实际余额。

  • simulate_native_transfer –模拟发送本国货币(例如“将100 ETH从A转移到B”)
  • simulate_erc20_transfer –模拟人类金额的ERC20转账(例如“从fun.eth向alice.eth转账10 USDC”)
  • simulate_contract_call –对函数签名+参数进行编码,并模拟调用
  • simulate_transaction –模拟原始交易(从/到/值/数据)
  • encode_function_data –从人类可读的签名(纯助手,无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

  • web3_clientVersion –获取客户端版本
  • web3_sha3 –使用Keccak-256哈希数据

安装

光标(单击一次)

单击上面的安装链接或使用:

cursor://anysphere.cursor-deeplink/mcp/install?name=evm-mcp&config=eyJldm0tbWNwIjp7ImNvbW1hbmQiOiJucHgiLCJhcmdzIjpbIi15IiwiQGphbWVzYW56L2V2bS1tY3AiXX19

手动安装

要求: Node.js 18+和npm

# Clone and build
git clone https://github.com/JamesANZ/evm-mcp.git
cd evm-mcp
npm install
npm run build

# Set provider API keys
export INFURA_API_KEY="your-infura-api-key"
export DEFAULT_NETWORK="ethereum"
export DEFAULT_PROVIDER="infura"

# Run server
npm start

Claude 桌面版

增添 claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "evm-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/evm-mcp/build/index.js"],
      "env": {
        "INFURA_API_KEY": "your-infura-api-key",
        "DEFAULT_NETWORK": "ethereum",
        "DEFAULT_PROVIDER": "infura",
        "RPC_PROVIDER_ORDER": "infura,alchemy"
      }
    }
  }
}

配置后重新启动Claude Desktop。

配置

环境变量

变量 必填 描述
INFURA_API_KEY * Infura项目API密钥之一(内置预设)
ALCHEMY_API_KEY * Alchemy应用程序API密钥之一(内置预设)
DEFAULT_NETWORK 否 默认链段塞或链ID(默认值: ethereum)
DEFAULT_PROVIDER 否 首选提供商slug(infura, alchemy,或自定义)
RPC_PROVIDER_ORDER 否 逗号分隔的提供程序回退顺序(默认值: infura,alchemy)
CUSTOM_PROVIDERS 用户定义提供程序的* JSON数组之一
CUSTOM_NETWORKS 用户定义网络的* JSON数组之一
KNOWN_ADDRESSES 否 已知令牌/合约的JSON数组(网络范围)
WALLET_ADDRESSES 否 个人钱包和合约别名的JSON数组

*至少有一个提供程序API密钥、自定义提供程序或自定义网络 rpcUrl 是必需的。

内置提供者(Infura/Alchemy)

设置API密钥,服务器将自动为支持的网络生成RPC URL:

{
  "INFURA_API_KEY": "your-infura-key",
  "DEFAULT_NETWORK": "ethereum",
  "DEFAULT_PROVIDER": "infura",
  "RPC_PROVIDER_ORDER": "infura,alchemy"
}

每个RPC工具都接受一个可选 network 参数(slug、名称或链ID)。当省略时, DEFAULT_NETWORK 使用。

{
  "tool": "eth_chainId",
  "arguments": { "network": "polygon" }
}

使用 list_supported_networks 以发现配置的网络和提供商。

自定义提供商(CUSTOM_PROVIDERS)

通过提供基本URL模板和特定于网络的URL来注册任何RPC提供程序:

"CUSTOM_PROVIDERS": "[{\"slug\":\"quicknode\",\"apiKeyEnv\":\"QUICKNODE_API_KEY\",\"baseUrl\":\"https://rpc.example.com/v1/{apiKey}\",\"networkUrls\":{\"ethereum\":\"https://eth.quiknode.pro/{apiKey}/\",\"polygon\":\"https://polygon.quiknode.pro/{apiKey}/\"}}]"
  • 绝对的 networkUrls 值直接使用(与 {apiKey} 替代)。
  • 相对的 路径(以开头 /)附于 baseUrl.

自定义网络(CUSTOM_NETWORKS)

按名称注册任意链:

"CUSTOM_NETWORKS": "[{\"name\":\"HyperEVM\",\"slug\":\"hyperevm\",\"chainId\":999,\"rpcUrl\":\"https://rpc.hyperliquid.xyz/evm\"}]"

或者通过设置路由通过提供商 provider 并将网络段块添加到该提供商的 networkUrls.

已知地址(KNOWN_ADDRESSES)

按名称注册令牌和合约,以便工具接受别名,如 USDC 而不是原始十六进制地址。每个条目都适用于一个网络:

"KNOWN_ADDRESSES": "[{\"name\":\"USDC\",\"address\":\"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\"network\":\"ethereum\",\"type\":\"token\",\"decimals\":6,\"aliases\":[\"usd-coin\"]}]"
字段 必填 描述
name 是 主查找键
address 是 已核对的合同地址
network yes 链段、名称、链ID或网络别名
type 没有 token 或 contract (默认值: contract)
decimals 否 格式化余额的令牌小数
aliases 否 额外的查找键

当 eth_getBalance 使用令牌别名调用,服务器使用中配置的第一个钱包 WALLET_ADDRESSES 作为代币持有者。

钱包地址(WALLET_ADDRESSES)

通过别名注册个人钱包和合同,这样你就可以说“检查我的个人钱包”,而不是粘贴十六进制:

"WALLET_ADDRESSES": "[{\"name\":\"my-wallet\",\"address\":\"0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f\",\"aliases\":[\"personal\",\"my wallet\"],\"description\":\"Main EOA\"}]"
字段 必填 描述
name 是 主查找键
address 是 钱包或合约地址
network no 一个链的作用域别名(默认:所有链)
aliases 否 额外的查找键
description 否 人类可读的注释

地址别名适用于 eth_getBalance, eth_getCode, eth_call, eth_getLogs以及接受地址参数的其他工具。使用 list_known_addresses 以发现配置的别名。

从RPC_URL迁移

- "RPC_URL": "https://mainnet.infura.io/v3/KEY"
- "CHAIN_ID": "1"
+ "INFURA_API_KEY": "KEY"
+ "DEFAULT_NETWORK": "ethereum"
+ "DEFAULT_PROVIDER": "infura"

配置更改需要重新启动MCP服务器。

支持的内置网络

  • 以太坊:Sepolia主网
  • 多边形:厦门主网
  • 仲裁:一,Sepolia
  • 乐观主义:Sepolia主网
  • BNB智能链:主网、测试网
  • 雪崩:C链
  • 基地:Sepolia主网
  • 任何EVM兼容链 通过 CUSTOM_NETWORKS

使用示例

获取最新区块编号

查询当前区块号:

{
  "tool": "eth_blockNumber",
  "arguments": {}
}

获取账户余额

使用十六进制地址或配置的别名检查地址余额:

{
  "tool": "eth_getBalance",
  "arguments": {
    "address": "personal",
    "blockNumber": "latest"
  }
}

获取交易详细信息

查看交易信息:

{
  "tool": "eth_getTransactionByHash",
  "arguments": {
    "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
}

呼叫智能合约

执行合约调用:

{
  "tool": "eth_call",
  "arguments": {
    "to": "0xA0b86a33E6441c8C06DDD46C310c0eF8D9441C8F",
    "data": "0x70a08231000000000000000000000000742d35Cc6634C0532925a3b8D6Ac6e2F0C4C9B7C"
  }
}

获取事件日志

查询合同事件:

{
  "tool": "eth_getLogs",
  "arguments": {
    "fromBlock": "0x1234567",
    "toBlock": "latest",
    "address": "0xA0b86a33E6441c8C06DDD46C310c0eF8D9441C8F",
    "topics": [
      "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
    ]
  }
}

用例

  • 区块链分析 –查询交易数据、余额和合同状态
  • DeFi应用程序 –监控代币余额、交易收据和智能合约调用
  • NFT项目 –跟踪传输、元数据和收集统计数据
  • 开发工具 –调试交易、估算天然气和测试智能合约
  • 监控 –关注特定事件和交易模式
  • 研究 –跨多个EVM网络分析区块链数据

技术细节

内置: Node.js、TypeScript、MCP SDK、Ethers.js
依赖关系: @modelcontextprotocol/sdk, ethers, zod
平台: macOS、Windows、Linux

环境变量: 看 配置 上面。

贡献

⭐ 如果这个项目对你有帮助,请在GitHub上加星! ⭐

欢迎投稿!请打开问题或提交拉取请求。

许可证

MIT许可证——见 许可证.md 了解详情。

支持

如果你觉得这个项目有用,可以考虑支持它:

⚡ 闪电网络

lnbc1pjhhsqepp5mjgwnvg0z53shm22hfe9us289lnaqkwv8rn2s0rtekg5vvj56xnqdqqcqzzsxqyz5vqsp5gu6vh9hyp94c7t3tkpqrp2r059t4vrw7ps78a4n0a2u52678c7yq9qyyssq7zcferywka50wcy75skjfrdrk930cuyx24rg55cwfuzxs49rc9c53mpz6zug5y2544pt8y9jflnq0ltlha26ed846jh0y7n4gm8jd3qqaautqa

₿ 比特币: bc1ptzvr93pn959xq4et6sqzpfk2args22ewv5u2th4ps7shfaqrshe0xtp

※以太坊/EVM。: 0x42ea529282DDE0AA87B42d9E83316eb23FE62c3f