一个全面的模型上下文协议(MCP)服务器,提供跨多个EVM兼容网络的区块链服务。该服务器使AI代理能够通过统一的接口与以太坊、Optimism、Arbitrum、Base、Polygon以及许多其他EVM链进行交互。
MCP EVM 服务器利用模型上下文协议为AI代理提供区块链服务。它支持广泛的服务,包括:
所有服务都通过一致的MCP工具和资源接口暴露,使AI代理能够轻松发现和使用区块链功能。每个接受以太坊地址的工具也支持ENS名称,自动在后台将其解析为地址。
ERC20 代币
NFTs (ERC721)
多代币 (ERC1155)
# 克隆仓库
git clone https://github.com/mcpdotdirect/mcp-evm-server.git
cd mcp-evm-server
# 使用Bun安装依赖
bun install
# 或使用npm
npm install

服务器使用以下默认配置:
这些值在应用程序中是硬编码的。如果需要修改它们,可以编辑以下文件:
src/core/chains.tssrc/server/http-server.ts你可以直接使用npx运行MCP EVM服务器,无需安装:
# 在stdio模式下运行服务器(用于CLI工具)
npx @mcpdotdirect/evm-mcp-server
# 在HTTP模式下运行服务器(用于Web应用程序)
npx @mcpdotdirect/evm-mcp-server --http

使用stdio启动服务器(用于嵌入CLI工具):
# 启动stdio服务器
bun start
# 开发模式,自动重载
bun dev

或启动带有SSE的HTTP服务器,用于Web应用程序:
# 启动HTTP服务器
bun start:http
# 开发模式,自动重载
bun dev:http

使用任何MCP兼容的客户端连接到此MCP服务器。用于测试和调试,你可以使用MCP Inspector。
要从Cursor连接到MCP服务器:
打开Cursor并进入设置(左下角的齿轮图标)
点击左侧边栏中的“功能”
向下滚动到“MCP 服务器”部分
点击“添加新的MCP服务器”
输入以下详细信息:
evm-mcp-servercommandnpx @mcpdotdirect/evm-mcp-server点击“保存”
连接后,你可以直接在Cursor中使用MCP服务器的功能。服务器将出现在MCP服务器列表中,并可以根据需要启用/禁用。
为了更便携的配置,你可以与团队共享或在项目中跨项目使用,你可以在项目的根目录中创建一个.cursor/mcp.json文件:
{
"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服务器配置。这种方法使得:
如果你正在开发一个Web应用程序,并希望连接到带有服务器发送事件(SSE)的HTTP服务器,你可以使用此配置:
{
"mcpServers": {
"evm-mcp-sse": {
"url": "http://localhost:3001/sse"
}
}
}

这直接连接到HTTP服务器的SSE端点,适用于:
要使用此配置:
.cursor目录(如果不存在).cursor目录中的mcp.json使用mcp.json配置MCP服务器后,你可以在Cursor中轻松使用它。以下是一个示例工作流程:
// blockchain-example.js
async function main() {
try {
// 使用ENS获取地址的ETH余额
console.log("获取vitalik.eth的ETH余额...");
// 当与Cursor一起使用时,你可以简单地要求Cursor:
// "检查主网上vitalik.eth的ETH余额"
// 或"从我的钱包转移0.1 ETH到vitalik.eth"
// Cursor将使用MCP服务器执行这些操作
// 而不需要你编写任何额外的代码
// 这是MCP集成的强大之处——你的AI助手
// 可以直接与区块链数据和操作交互
} catch (error) {
console.error("错误:", error.message);
}
}
main();

在Cursor中打开文件后,你可以要求Cursor:
Cursor将使用MCP服务器执行这些操作,并直接在对话中返回结果。
MCP服务器处理所有区块链通信,同时允许Cursor通过自然语言理解和执行与区块链相关的任务。
如果你正在使用Claude CLI,你可以通过两个命令连接到MCP服务器:
# 添加MCP服务器
claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server
# 启动Claude并启用MCP服务器
claude

// 使用MCP客户端检查代币余额的示例
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("get-token-balance", {
tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // 以太坊上的USDC
ownerAddress: "vitalik.eth", // ENS名称而不是地址
network: "ethereum"
});
console.log(result);
// {
// tokenAddress: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
// owner: "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
// network: "ethereum",
// raw: "1000000000",
// formatted: "1000",
// symbol: "USDC",
// decimals: 6
// }

// 使用MCP客户端解析ENS名称到地址的示例
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"
// }

服务器为代理提供以下MCP工具。所有接受地址参数的工具都支持以太坊地址和ENS名称。
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get-token-info |
获取ERC20代币元数据 | tokenAddress (地址/ENS), network |
get-token-balance |
检查ERC20代币余额 | tokenAddress (地址/ENS), ownerAddress (地址/ENS), network |
transfer-token |
转移ERC20代币 | privateKey, tokenAddress (地址/ENS), toAddress (地址/ENS), amount, network |
approve-token-spending |
批准代币支出额度 | privateKey, tokenAddress (地址/ENS), spenderAddress (地址/ENS), amount, network |
get-nft-info |
获取NFT元数据 | tokenAddress (地址/ENS), tokenId, network |
check-nft-ownership |
验证NFT所有权 | tokenAddress (地址/ENS), tokenId, ownerAddress (地址/ENS), network |
transfer-nft |
转移NFT | privateKey, tokenAddress (地址/ENS), tokenId, toAddress (地址/ENS), network |
get-nft-balance |
统计持有的NFT数量 | tokenAddress (地址/ENS), ownerAddress (地址/ENS), network |
get-erc1155-token-uri |
获取ERC1155元数据 | tokenAddress (地址/ENS), tokenId, network |
get-erc1155-balance |
检查ERC1155余额 | tokenAddress (地址/ENS), tokenId, ownerAddress (地址/ENS), network |
transfer-erc1155 |
转移ERC1155代币 | privateKey, tokenAddress (地址/ENS), tokenId, amount, toAddress (地址/ENS), network |
| 工具名称 | 描述 | 关键参数 |
|---|---|---|
get-chain-info |
获取网络信息 | network |
get-balance |
获取原生代币余额 | address (地址/ENS), network |
transfer-eth |
发送原生代币 | privateKey, to (地址/ENS), amount, network |
get-transaction |
获取交易详情 | txHash, network |
read-contract |
读取智能合约状态 | contractAddress (地址/ENS), abi, functionName, args, network |
write-contract |
写入智能合约 | contractAddress (地址/ENS), abi, functionName, args, privateKey, network |
is-contract |
检查地址是否为合约 | address (地址/ENS), network |
resolve-ens |
解析ENS名称到地址 | ensName, network |
服务器通过以下MCP资源URI暴露区块链数据。所有接受地址的资源URI也支持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 |
ERC1155代币URI |
evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address} |
ERC1155代币余额 |
mcp-evm-server/ ├── src/ │ ├── index.ts # 主 stdio 服务器入口点 │ ├── server/ # 服务器相关文件 │ │ ├── http-server.ts # 带有 SSE 的 HTTP 服务器 │ │ └── server.ts # 通用服务器设置 │ ├── core/ │ │ ├── chains.ts # 链定义和工具 │ │ ├── resources.ts # MCP 资源实现 │ │ ├── tools.ts # MCP 工具实现 │ │ ├── prompts.ts # MCP 提示实现 │ │ └── services/ # 核心区块链服务 │ │ ├── index.ts # 操作导出 │ │ ├── balance.ts # 余额服务 │ │ ├── transfer.ts # 代币转账服务 │ │ ├── utils.ts # 实用函数 │ │ ├── tokens.ts # 代币元数据服务 │ │ ├── contracts.ts # 合约交互 │ │ ├── transactions.ts # 交易服务 │ │ └── blocks.ts # 区块服务 │ │ └── clients.ts # RPC 客户端工具 ├── 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 许可证的条款授权。