EVM MCP服务器
一个全面的模型上下文协议(MCP)服务器,在60多个EVM兼容网络上提供区块链服务。该服务器使AI代理能够通过22个工具和10个AI引导的提示,通过统一的界面与以太坊、Optimism、Arbitrum、Base、Polygon和许多其他EVM链进行交互。
📋 目录
-
概述
-
特性
-
支持的网络
-
先决条件
-
安装
-
配置
-
环境变量
-
服务器配置
-
用法
-
api参考
-
工具
-
提示
-
资源
-
安全考虑
-
项目结构
-
发展
-
许可证
🔭 概述
MCP EVM服务器利用模型上下文协议为AI代理提供区块链服务。它支持广泛的服务,包括:
- 读取区块链状态(余额、交易、区块等)
- 与智能合约交互 自动ABI提取 来自区块探索者
- 转移代币(原生、ERC20、ERC721、ERC1155)
- 查询令牌元数据和余额
- 跨60多个EVM网络的链特定服务(34个主网+26个测试网)
- ENS名称解析 对于所有地址参数(使用人类可读的名称,如“vitalik.eth”,而不是地址)
- AI友好提示 引导代理完成复杂的工作流程
所有服务都通过MCP工具、资源和提示的一致接口公开,使AI代理能够轻松发现和使用区块链功能。 每个接受以太坊地址的工具也支持ENS名称,自动将它们解析为幕后地址。服务器包括智能ABI获取,消除了提前了解合同ABI的需要。
✨ 特性
区块链数据访问
- 多链支持 适用于60+EVM兼容网络(34个主网+26个测试网)
- 链信息 包括blockNumber、chainId和RPC
- 块数据 按数字、哈希值或最新值访问
- 交易详情 以及带有解码日志的收据
- 地址余额 适用于本地令牌和所有令牌标准
- ENS分辨率 对于人类可读的以太坊地址(使用“vitalik.eth”代替“0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045”)
代币服务
-
ERC20代币
-
获取令牌元数据(名称、符号、小数、供应)
-
检查代币余额
-
在地址之间转移令牌
-
批准支出津贴
-
NFT(ERC721)
-
获取集合和令牌元数据
-
验证令牌所有权
-
在地址之间传输NFT
-
检索令牌URI并统计持有量
-
多代币(ERC1155)
-
获取令牌余额和元数据
-
按数量转移代币
-
访问令牌URI
智能合约交互
- 读取合同状态 通过视图/纯函数
- 写合同 -使用自动ABI获取执行任何状态更改函数
- 合同验证 区别于EOA
- 事件日志 检索和过滤
- 自动获取ABI 来自所有60多个网络的Etherscan v2 API(无需事先了解ABI)
- ABI解析和验证 功能发现
全面的交易支持
- 灵活的钱包支持 -配置带有HD路径支持的私钥或助记词(BIP-39)
- 本地代币转移 跨所有支持的网络
- 天然气估算 用于交易计划
- 交易状态 以及收据信息
- 错误处理 带有描述性信息
消息签名功能
- 个人消息签名 -对任意消息进行签名以进行身份验证和验证
- EIP-712类型数据签名 -对无气体交易和元交易的结构化数据进行签名
- SIWE支持 -启用以太坊身份验证流登录
- 许可证签名 -为无气体代币运营创建链下审批
- 元交易支持 -对中继服务和无气体传输的交易数据进行签名
AI引导的工作流程(提示)
- 交易准备 -规划和执行转移的指导
- 钱包分析 -用于分析钱包活动和持有量的工具
- 智能合约探索 -交互式ABI获取和合约分析
- 合同互动 -在智能合约上安全执行写操作
- 网络信息 -学习EVM网络和比较
- 审批审核 -审查和管理代币审批
- 错误诊断 -交易失败故障排除
🌐 支持的网络
主网络
- 以太坊(ETH)
- 乐观主义(OP)
- 仲裁(ARB)
- 仲裁 新
- 基础
- 多边形(MATIC)
- 多边形zkEVM
- 雪崩(AVAX)
- 币安智能链(BSC)
- Zksync时代
- 线
- Celo
- 诺斯替语(xDai)
- 芬托姆(FTM)
- Filecoin(FIL)
- 月光
- 月亮河
- 克罗诺斯
- 滚动
- 地幔
- 蝠鲼
- 爆炸
- 弗拉克斯塔尔
- 模式
- 梅蒂人
- 克罗马
- 佐拉
- 极光
- 坎托
- 流动
- Lumia
测试网
- Sepolia
- 乐观Sepolia
- 杨梅
- 基础Sepolia
- 多边形淘
- 富士雪崩
- BSC测试网
- 中兴通讯
- 波兰 线
- 滚动Sepolia
- Mantle Sepolia
- 曼塔沙波里亚
- Blast Sepolia
- Fraxtal测试网
- 模式测试网
- 梅蒂斯·沙普利亚
- Kroma Sepolia
- Zora Sepolia
- 阿尔法乔雷斯的热情
- Goerli
- 霍尔斯基
- 流量测试网
- Filecoin校准
- Lumia测试网
🛠️ 先决条件
- 包子 1.0.0或更高版本(推荐)
- Node.js 20.0.0或更高版本(如果不使用Bun)
- 可选: Etherscan API密钥 用于ABI提取
📦 安装
BASH``` 1 2 3 4 5 6 7# Clone the repository git clone https://github.com/mcpdotdirect/mcp-evm-server.git cd mcp-evm-server
Install dependencies with Bun
bun install
Or with npm
npm install
## ⚙️ 配置
### 环境变量
服务器使用以下环境变量。对于写操作和ABI获取,您必须配置以下变量:
#### 钱包配置(用于写入操作)
您可以使用配置钱包 **要么** 私钥或助记符短语:
**选项1:私钥**
BASH```
1export EVM_PRIVATE_KEY="0x..." # Your private key in hex format (with or without 0x prefix)
选项2:助记短语(推荐用于HD钱包)
BASH``` 1 2export EVM_MNEMONIC=“word1 word2 word3 … word12” # Your 12 or 24 word BIP-39 mnemonic export EVM_ACCOUNT_INDEX=“0” # Optional: Account index for HD wallet derivation (default: 0)
助记符选项支持分层确定性(HD)钱包推导:
- 使用BIP-39标准助记符短语(12或24个单词)
- 支持BIP-44导出路径: `m/44'/60'/0'/0/{accountIndex}`
- `EVM_ACCOUNT_INDEX` 允许您从同一助记符中导出不同的帐户
- 默认帐户索引为0(第一个帐户)
**钱包用于:**
- 转移本地代币(`transfer_native` 工具)
- 转移ERC20代币(`transfer_erc20` 工具)
- 批准代币支出(`approve_token_spending` 工具)
- 写入智能合约(`write_contract` 工具)
- 对消息进行签名以进行身份验证(`sign_message` 工具)
- 为无气体交易签署结构化数据(`sign_typed_data` 工具)
⚠️ **安全**:
- 切勿将私钥或助记词提交给版本控制
- 使用环境变量或安全密钥管理系统
- 安全地存储助记符-它们提供对所有衍生帐户的访问
- 考虑为不同目的使用不同的账户指数
#### API密钥(用于ABI获取)
BASH```
1export ETHERSCAN_API_KEY="your-api-key-here"
此API密钥是可选的,但对于以下情况是必需的:
- 从区块浏览器自动获取ABI(
get_contract_abi工具) - 读取合约时自动获取ABI(
read_contract工具与abiJson参数) - 这
fetch_and_analyze_abi提示
从以下位置获取免费API密钥:
- 以太网扫描 -适用于以太坊和兼容链
- 相同的密钥通过Etherscan v2 API在所有60多个EVM网络上工作
服务器配置
服务器使用以下默认配置:
- 默认链ID:1(以太坊主网)
- 服务器端口: 3001
- 服务器主机:0.0.0.0(可从任何网络接口访问)
这些值在应用程序中是硬编码的。如果需要修改它们,可以编辑以下文件:
- 对于链条配置:
src/core/chains.ts - 对于服务器配置:
src/server/http-server.ts
🚀 用法
使用npx(无需安装)
您可以使用npx直接运行MCP EVM服务器,而无需安装:
BASH``` 1 2 3 4# Run the server in stdio mode (for CLI tools) npx @mcpdotdirect/evm-mcp-server
Run the server in HTTP mode (for web applications)
npx @mcpdotdirect/evm-mcp-server —http
### 在本地运行服务器
使用stdio启动服务器(用于嵌入CLI工具):
BASH```
1
2
3
4# Start the stdio server
bun start
# Development mode with auto-reload
bun dev
或者使用SSE启动web应用程序的HTTP服务器:
BASH``` 1 2 3 4# Start the HTTP server bun start:http
Development mode with auto-reload
bun dev:http
### 连接到服务器
使用任何兼容MCP的客户端连接到此MCP服务器。对于测试和调试,您可以使用 [MCP检查员](https://github.com/modelcontextprotocol/inspector).
### 从游标连接
要从Cursor连接到MCP服务器:
1. 打开光标并转到设置(左下角的齿轮图标)
2. 点击左侧边栏中的“功能”
3. 向下滚动到“MCP服务器”部分
4. 点击“添加新的MCP服务器”
5. 输入以下详细信息:
- 服务器名称: `evm-mcp-server`
- 类型: `command`
- 命令: `npx @mcpdotdirect/evm-mcp-server`
6. 点击“保存”
连接后,您可以直接在Cursor中使用MCP服务器的功能。服务器将出现在MCP服务器列表中,可以根据需要启用/禁用。
### 使用mcp.json和游标
对于可以与团队共享或跨项目使用的更便携的配置,您可以创建 `.cursor/mcp.json` 项目根目录中的文件:
JSON```
1
2
3
4
5
6
7
8
9
10
11
12{
"mcpServers": {
"evm-mcp-server": {
"command": "npx",
"args": ["-y", "@mcpdotdirect/evm-mcp-server"]
},
"evm-mcp-http": {
"command": "npx",
"args": ["-y", "@mcpdotdirect/evm-mcp-server", "--http"]
}
}
}
将此文件放置在项目的 .cursor 目录(如果不存在,请创建它),Cursor在该项目中工作时将自动检测并使用这些MCP服务器配置。这种方法使以下操作变得容易:
- 与您的团队共享MCP配置
- 版本控制您的MCP设置
- 为不同的项目使用不同的服务器配置
示例:带有SSE的HTTP模式
如果您正在开发web应用程序,并希望使用服务器发送事件(SSE)连接到HTTP服务器,则可以使用此配置:
JSON``` 1 2 3 4 5 6 7{ “mcpServers”: { “evm-mcp-sse”: { “url”: “http://localhost:3001/sse” } } }
这直接连接到HTTP服务器的SSE端点,这对以下方面很有用:
- 需要从浏览器连接到MCP服务器的Web应用程序
- 运行本地命令不理想的环境
- 在多个用户或应用程序之间共享单个MCP服务器实例
要使用此配置,请执行以下操作:
1. 创建一个 `.cursor` 项目根目录中的目录(如果不存在)
2. 将上述JSON另存为 `mcp.json` 在 `.cursor` 目录
3. 重新启动Cursor或打开项目
4. Cursor将检测配置并提供启用服务器的功能
### 示例:在游标中使用MCP服务器
配置MCP服务器后 `mcp.json`,您可以在Cursor中轻松使用它。以下是一个示例工作流:
1. 在项目中创建一个新的JavaScript/TypeScript文件:
JAVASCRIPT```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// blockchain-example.js
async function main() {
try {
// Get ETH balance for an address using ENS
console.log("Getting ETH balance for vitalik.eth...");
// When using with Cursor, you can simply ask Cursor to:
// "Check the ETH balance of vitalik.eth on mainnet"
// Or "Transfer 0.1 ETH from my wallet to vitalik.eth"
// Cursor will use the MCP server to execute these operations
// without requiring any additional code from you
// This is the power of the MCP integration - your AI assistant
// can directly interact with blockchain data and operations
} catch (error) {
console.error("Error:", error.message);
}
}
main();
- 在Cursor中打开文件后,您可以要求Cursor执行以下操作:
- “检查vitalik.ETH的当前ETH余额”
- “在以太坊上查看USDC的价格”
- “给我看看乐观主义的最新进展”
- “检查0x1234…是否是合约地址”
- Cursor将使用MCP服务器执行这些操作,并在对话中直接返回结果。
MCP服务器处理所有区块链通信,同时允许Cursor通过自然语言理解和执行区块链相关任务。
使用Claude CLI连接
如果您使用的是Claude CLI,则只需两个命令即可连接到MCP服务器:
BASH``` 1 2 3 4# Add the MCP server claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server
Start Claude with the MCP server enabled
claude
### 示例:使用ENS获取代币余额
JAVASCRIPT```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17// Example of using the MCP client to check a token balance using ENS
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("get-token-balance", {
tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC on Ethereum
ownerAddress: "vitalik.eth", // ENS name instead of address
network: "ethereum",
});
console.log(result);
// {
// tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
// owner: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
// network: "ethereum",
// raw: "1000000000",
// formatted: "1000",
// symbol: "USDC",
// decimals: 6
// }
示例:解析ENS名称
JAVASCRIPT``` 1 2 3 4 5 6 7 8 9 10 11 12 13// Example of using the MCP client to resolve an ENS name to an address const mcp = new McpClient(“http://localhost:3000”); const result = await mcp.invokeTool(“resolve-ens”, { ensName: “vitalik.eth”, network: “ethereum”, }); console.log(result); // { // ensName: “vitalik.eth”, // normalizedName: “vitalik.eth”, // resolvedAddress: “0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045”, // network: “ethereum” // }
### 示例:使用Multicall批量处理多个呼叫
JAVASCRIPT```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32// Example of using multicall to batch multiple contract reads in a single RPC call
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("multicall", {
network: "ethereum",
calls: [
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "balanceOf",
args: ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],
},
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "symbol",
},
{
contractAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
functionName: "decimals",
},
],
});
console.log(result);
// {
// network: "ethereum",
// totalCalls: 3,
// successfulCalls: 3,
// failedCalls: 0,
// results: [
// { contractAddress: "0xA0b...", functionName: "balanceOf", result: "1000000000", status: "success" },
// { contractAddress: "0xA0b...", functionName: "symbol", result: "USDC", status: "success" },
// { contractAddress: "0xA0b...", functionName: "decimals", result: "6", status: "success" }
// ]
// }
📚 api参考
工具
服务器为代理提供了25个重点MCP工具。 所有接受地址参数的工具都支持以太坊地址和ENS名称。
钱包信息
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_wallet_address | 获取已配置钱包的地址(来自EVM_PRIVATE_KEY) | 无 |
网络信息
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_chain_info | 获取网络信息 | network |
get_supported_networks | 列出所有支持的EVM网络 | 无 |
get_gas_price | 获取网络上的当前天然气价格 | network |
ENS服务
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
resolve_ens_name | 将ENS名称解析为地址 | ensName, network |
lookup_ens_address | 反向查找ENS名称的地址 | address, network |
区块和交易信息
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_block | 获取块数据 | blockNumber 或 blockHash, network |
get_latest_block | 获取最新区块数据 | network |
get_transaction | 获取交易详情 | txHash, network |
get_transaction_receipt | 获取带有日志的交易收据 | txHash, network |
wait_for_transaction | 等待交易确认 | txHash, confirmations, network |
余额和代币信息
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_balance | 获取本地代币余额 | address (地址/ENS), network |
get_token_balance | 检查ERC20代币余额 | tokenAddress (地址/ENS), ownerAddress (地址/ENS), network |
get_allowance | 检查代币支出额度 | tokenAddress (地址/ENS), ownerAddress (地址/ENS), spenderAddress (地址/ENS), network |
智能合约交互
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_contract_abi | 从区块浏览器获取合约ABI(60多个网络) | contractAddress (地址/ENS), network |
read_contract | 读取智能合约状态(如果需要,自动获取ABI) | contractAddress, functionName, args[], abiJson (可选), network |
write_contract | 执行状态更改功能(必要时自动获取ABI) | contractAddress, functionName, args[], value (可选), abiJson (可选), network |
multicall | 将多个读取调用批处理到单个RPC请求中(使用Multicall3) | calls[] (合同调用数组), allowFailure (可选), network |
代币转移
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
transfer_native | 发送本地代币(ETH等) | to (地址/ENS), amount, network |
transfer_erc20 | 转移ERC20代币 | tokenAddress (地址/ENS), to (地址/ENS), amount, network |
approve_token_spending | 批准代币津贴 | tokenAddress (地址/ENS), spenderAddress (地址/ENS), amount, network |
NFT服务
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get_nft_info | 获取NFT(ERC721)元数据 | tokenAddress (地址/ENS), tokenId, network |
get_erc1155_balance | 检查ERC1155余额 | tokenAddress (地址/ENS), tokenId, ownerAddress (地址/ENS), network |
消息签名
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
sign_message | 对任意消息进行签名以进行身份验证和验证(SIWE、链下签名) | message |
sign_typed_data | 为无气体交易、许可证和元交易签署EIP-712结构化数据 | domainJson, typesJson, primaryType, messageJson |
资源
服务器通过以下MCP资源URI公开区块链数据。所有接受地址的资源URI也支持ENS名称,ENS名称会自动解析为地址。
区块链资源
| 资源URI模式 | 描述 |
|---|---|
evm://{network}/chain | 特定网络的链信息 |
evm://chain | 以太坊主网链信息 |
evm://{network}/block/{blockNumber} | 按数字块数据 |
evm://{network}/block/latest | 最新区块数据 |
evm://{network}/address/{address}/balance | 本地代币余额 |
evm://{network}/tx/{txHash} | 交易详情 |
evm://{network}/tx/{txHash}/receipt | 带有日志的交易收据 |
代币资源
| 资源URI模式 | 描述 |
|---|---|
evm://{network}/token/{tokenAddress} | ERC20代币信息 |
evm://{network}/token/{tokenAddress}/balanceOf/{address} | ERC20代币余额 |
evm://{network}/nft/{tokenAddress}/{tokenId} | NFT(ERC721)令牌信息 |
evm://{network}/nft/{tokenAddress}/{tokenId}/isOwnedBy/{address} | NFT所有权验证 |
evm://{network}/erc1155/{tokenAddress}/{tokenId}/uri | ERC 1155代币类型 |
evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address} | ERC1155代币余额 |
🔒 安全考虑
- 私钥 仅用于交易签名,服务器从不存储
- 考虑为生产使用实施额外的身份验证机制
- 在生产环境中为HTTP服务器使用HTTPS
- 实施限速以防止滥用
- 对于高价值服务,考虑添加确认步骤
📁 项目结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24mcp-evm-server/
├── src/
│ ├── index.ts # Main stdio server entry point
│ ├── server/ # Server-related files
│ │ ├── http-server.ts # HTTP server with SSE
│ │ └── server.ts # General server setup
│ ├── core/
│ │ ├── chains.ts # Chain definitions and utilities
│ │ ├── resources.ts # MCP resources implementation
│ │ ├── tools.ts # MCP tools implementation
│ │ ├── prompts.ts # MCP prompts implementation
│ │ └── services/ # Core blockchain services
│ │ ├── index.ts # Operation exports
│ │ ├── balance.ts # Balance services
│ │ ├── transfer.ts # Token transfer services
│ │ ├── utils.ts # Utility functions
│ │ ├── tokens.ts # Token metadata services
│ │ ├── contracts.ts # Contract interactions
│ │ ├── transactions.ts # Transaction services
│ │ └── blocks.ts # Block services
│ │ └── clients.ts # RPC client utilities
├── package.json
├── tsconfig.json
└── README.md
🛠️ 发展
要修改或扩展服务器,请执行以下操作:
- 在相应的文件中添加新服务
src/core/services/ - 在中注册新工具
src/core/tools.ts - 在中注册新资源
src/core/resources.ts - 在中添加新的网络支持
src/core/chains.ts - 要更改服务器配置,请在中编辑硬编码值
src/server/http-server.ts
📄 许可证
该项目根据以下条款获得许可 MIT许可证.