EVM MCP Server

by mcpdotdirect
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports running the MCP server with Bun runtime, enabling faster execution and modern JavaScript features.

  • Provides comprehensive blockchain services including reading state, transferring tokens, querying balances, and interacting with smart contracts on the Ethereum mainnet.

  • Supports interaction with the Fantom blockchain, including native token transfers, balance checking, and smart contract operations.

EVM MCP 服务器

一个全面的模型上下文协议 (MCP) 服务器,可在多个兼容 EVM 的网络中提供区块链服务。该服务器使 AI 代理能够通过统一的接口与以太坊、Optimism、Arbitrum、Base、Polygon 以及许多其他 EVM 链进行交互。

📋 内容

🔭 概述

MCP EVM 服务器利用模型上下文协议 (MCP) 为 AI 代理提供区块链服务。它支持多种服务,包括:

  • 读取区块链状态(余额、交易、区块等)
  • 与智能合约交互
  • 转移代币(原生代币、ERC20、ERC721、ERC1155)
  • 查询代币元数据和余额
  • 跨 30 多个 EVM 网络的链特定服务
  • 所有地址参数的ENS 名称解析(使用人类可读的名称,如“vitalik.eth”,而不是地址)

所有服务均通过 MCP 工具和资源的统一接口公开,方便 AI 代理发现和使用区块链功能。所有接受以太坊地址的工具也支持 ENS 域名,并在后台自动将其解析为地址。

✨ 特点

区块链数据访问

  • 支持 30 多个 EVM 兼容网络的多链
  • 链信息,包括 blockNumber、chainId 和 RPC
  • 通过数字、哈希或最新数据来阻止数据访问
  • 带有解码日志的交易详细信息和收据
  • 原生代币和所有代币标准的地址余额
  • ENS 解析人类可读的以太坊地址(使用“vitalik.eth”而不是“0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045”)

代币服务

  • ERC20代币
    • 获取代币元数据(名称、符号、小数、供应量)
    • 检查代币余额
    • 在地址之间转移代币
    • 批准支出限额
  • NFT(ERC721)
    • 获取集合和令牌元数据
    • 验证代币所有权
    • 在地址之间转移 NFT
    • 检索代币 URI 并统计持有量
  • 多代币(ERC1155)
    • 获取代币余额和元数据
    • 转移带有数量的代币
    • 访问令牌 URI

智能合约交互

  • 通过视图/纯函数读取合约状态
  • 使用私钥签名编写服务
  • 合同验证以区别于 EOA
  • 事件日志检索和过滤

全面的交易支持

  • 原生代币在所有支持网络上传输
  • 交易规划的Gas 估算
  • 交易状态和收据信息
  • 使用描述性消息进行错误处理

🌐 支持的网络

主网

  • 以太坊(ETH)
  • 乐观主义(OP)
  • 仲裁(ARB)
  • 新仲裁庭
  • 根据
  • 多边形(MATIC)
  • 多边形 zkEVM
  • 雪崩(AVAX)
  • 币安智能链(BSC)
  • zkSync 时代
  • 莱尼亚
  • 塞洛
  • Gnosis(xDai)
  • 幻影(FTM)
  • Filecoin(FIL)
  • 月光
  • 月河
  • 克洛诺斯
  • 滚动
  • 地幔
  • 蝠鲼
  • 爆炸
  • 弗拉克斯塔尔
  • 模式
  • 梅蒂斯人
  • 克罗马
  • 佐拉
  • 极光
  • 坎托
  • 流动
  • Lumia

测试网

  • 塞波利亚
  • 乐观塞波利亚
  • 塞波利亚仲裁庭
  • 塞波利亚基地
  • 多边形淘
  • 雪崩富士
  • BSC 测试网
  • zkSync Sepolia
  • 线状塞波利亚
  • 滚动塞波利亚
  • 披风
  • 蝠鲼
  • 爆炸棕褐色
  • Fraxtal 测试网
  • 模式测试网
  • 梅蒂斯·塞波利亚
  • 克罗马塞波利亚
  • 佐拉·塞波利亚
  • 塞洛·阿尔法霍雷斯
  • 戈利
  • 霍莱斯基
  • Flow 测试网
  • Lumia 测试网

🛠️ 先决条件

  • Bun 1.0.0 或更高版本
  • Node.js 18.0.0 或更高版本(如果不使用 Bun)

📦安装

# 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

⚙️ 服务器配置

服务器使用以下默认配置:

  • 默认链 ID :1(以太坊主网)
  • 服务器端口:3001
  • 服务器主机:0.0.0.0(可从任何网络接口访问)

这些值在应用程序中是硬编码的。如果需要修改它们,可以编辑以下文件:

  • 对于链配置: src/core/chains.ts
  • 对于服务器配置: src/server/http-server.ts

🚀 使用方法

使用 npx(无需安装)

您可以使用 npx 直接运行 MCP EVM 服务器,无需安装:

# 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 工具):

# Start the stdio server bun start # Development mode with auto-reload bun dev

或者使用 SSE 为 Web 应用程序启动 HTTP 服务器:

# Start the HTTP server bun start:http # Development mode with auto-reload bun dev:http

连接到服务器

使用任何兼容 MCP 的客户端连接到此 MCP 服务器。您可以使用MCP 检查器进行测试和调试。

从光标连接

要从 Cursor 连接到 MCP 服务器:

  1. 打开 Cursor 并转到“设置”(左下角的齿轮图标)
  2. 点击左侧边栏中的“功能”
  3. 向下滚动到“MCP 服务器”部分
  4. 点击“添加新的 MCP 服务器”
  5. 输入以下详细信息:
    • 服务器名称: evm-mcp-server
    • 类型: command
    • 命令: npx @mcpdotdirect/evm-mcp-server
  6. 点击“保存”

连接后,您可以直接在 Cursor 中使用 MCP 服务器的功能。该服务器将显示在 MCP 服务器列表中,您可以根据需要启用/禁用。

使用 mcp.json 和 Cursor

为了获得可与团队共享或跨项目使用的更便携的配置,您可以在项目的根目录中创建一个.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 服务器配置。这种方法可以轻松实现以下操作:

  1. 与您的团队共享 MCP 配置
  2. 版本控制您的 MCP 设置
  3. 对不同的项目使用不同的服务器配置

示例:带有 SSE 的 HTTP 模式

如果您正在开发 Web 应用程序并希望使用服务器发送事件 (SSE) 连接到 HTTP 服务器,则可以使用以下配置:

{ "mcpServers": { "evm-mcp-sse": { "url": "http://localhost:3001/sse" } } }

这直接连接到 HTTP 服务器的 SSE 端点,这对于以下方面很有用:

  • 需要从浏览器连接到 MCP 服务器的 Web 应用程序
  • 不适合运行本地命令的环境
  • 在多个用户或应用程序之间共享单个 MCP 服务器实例

要使用此配置:

  1. 如果不存在,请在项目根目录中创建一个.cursor目录
  2. 将上述 JSON 保存为.cursor目录中的mcp.json
  3. 重新启动 Cursor 或打开您的项目
  4. Cursor 将检测配置并提供启用服务器的功能

示例:在 Cursor 中使用 MCP 服务器

使用mcp.json配置 MCP 服务器后,您可以轻松地在 Cursor 中使用它。以下是示例工作流程:

  1. 在您的项目中创建一个新的 JavaScript/TypeScript 文件:
// 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();
  1. 在 Cursor 中打开文件后,您可以要求 Cursor 执行以下操作:
    • “检查 vitalik.eth 的当前 ETH 余额”
    • “查看以太坊上的 USDC 价格”
    • “向我展示关于乐观主义的最新区块”
    • 检查 0x1234... 是否为合约地址
  2. Cursor 将使用 MCP 服务器执行这些操作并在您的对话中直接返回结果。

MCP 服务器处理所有区块链通信,同时允许 Cursor 通过自然语言理解和执行与区块链相关的任务。

使用 Claude CLI 进行连接

如果您使用 Claude CLI,则只需两个命令即可连接到 MCP 服务器:

# Add the MCP server claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server # Start Claude with the MCP server enabled claude

示例:使用 ENS 获取代币余额

// 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 名称

// 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" // }

📚 API 参考

工具

服务器为代理提供以下 MCP 工具。所有接受地址参数的工具均支持以太坊地址和 ENS 域名。

代币服务

工具名称描述关键参数
get-token-info获取 ERC20 代币元数据tokenAddress (地址/ENS), network
get-token-balance检查 ERC20 代币余额tokenAddress (地址/ENS)、 ownerAddress (地址/ENS)、 network
transfer-token转移 ERC20 代币privateKeytokenAddress (地址/ENS)、 toAddress (地址/ENS)、 amountnetwork
approve-token-spending批准令牌限额privateKeytokenAddress (地址/ENS)、 spenderAddress (地址/ENS)、 amountnetwork
get-nft-info获取 NFT 元数据tokenAddress (地址/ENS)、 tokenIdnetwork
check-nft-ownership验证 NFT 所有权tokenAddress (地址/ENS)、 tokenIdownerAddress (地址/ENS)、 network
transfer-nft转移NFTprivateKeytokenAddress (地址/ENS)、 tokenIdtoAddress (地址/ENS)、 network
get-nft-balance统计拥有的 NFT 数量tokenAddress (地址/ENS)、 ownerAddress (地址/ENS)、 network
get-erc1155-token-uri获取 ERC1155 元数据tokenAddress (地址/ENS)、 tokenIdnetwork
get-erc1155-balance检查 ERC1155 余额tokenAddress (地址/ENS)、 tokenIdownerAddress (地址/ENS)、 network
transfer-erc1155转移 ERC1155 代币privateKeytokenAddress (地址/ENS)、 tokenIdamounttoAddress (地址/ENS)、 network

区块链服务

工具名称描述关键参数
get-chain-info获取网络信息network
get-balance获取原生代币余额address (地址/ENS)、 network
transfer-eth发送原生代币privateKeyto (地址/ENS), amountnetwork
get-transaction获取交易详情txHashnetwork
read-contract读取智能合约状态contractAddress (地址/ENS)、 abifunctionNameargsnetwork
write-contract写入智能合约contractAddress (地址/ENS)、 abifunctionNameargsprivateKeynetwork
is-contract检查地址是否为合约address (地址/ENS)、 network
resolve-ens将 ENS 名称解析为地址ensNamenetwork

资源

服务器通过以下 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}/uriERC1155 代币 URI
evm://{network}/erc1155/{tokenAddress}/{tokenId}/balanceOf/{address}ERC1155 代币余额

🔒 安全注意事项

  • 私钥仅用于交易签名,服务器永远不会存储
  • 考虑实施额外的身份验证机制以供生产使用
  • 在生产环境中使用 HTTPS 作为 HTTP 服务器
  • 实施速率限制以防止滥用
  • 对于高价值服务,考虑添加确认步骤

📁 项目结构

mcp-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

🛠️ 开发

要修改或扩展服务器:

  1. src/core/services/下的相应文件中添加新服务
  2. src/core/tools.ts中注册新工具
  3. src/core/resources.ts中注册新资源
  4. src/core/chains.ts中添加新的网络支持
  5. 要更改服务器配置,请编辑src/server/http-server.ts中的硬编码值

📄 许可证

该项目根据MIT 许可证条款进行授权。

ID: z9r55dx1np