区块链交互服务器

一个提供跨60多个EVM兼容网络的区块链服务的MCP服务器,支持AI代理通过统一接口与多种区块链网络交互。

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

使用说明

EVM MCP服务器

一个全面的模型上下文协议(MCP)服务器,在60多个EVM兼容网络上提供区块链服务。该服务器使AI代理能够通过22个工具和10个AI引导的提示,通过统一的界面与以太坊、Optimism、Arbitrum、Base、Polygon和许多其他EVM链进行交互。

📋 目录

🔭 概述

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提取

📦 安装

# Clone the repository
git clone https://github.com/mcpdotdirect/evm-mcp-server.git
cd evm-mcp-server

# Install dependencies with Bun
bun install

# Or with npm
npm install

⚙️ 配置

环境变量

服务器使用以下环境变量。对于写操作和ABI获取,您必须配置以下变量:

钱包配置(用于写入操作)

您可以使用配置钱包 要么 私钥或助记符短语:

选项1:私钥

export EVM_PRIVATE_KEY="0x..." # Your private key in hex format (with or without 0x prefix)

选项2:助记短语(推荐用于HD钱包)

export 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获取)

export 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服务器,而无需安装:

# 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. 打开光标并转到设置(左下角的齿轮图标)

  2. 点击左侧边栏中的“功能”

  3. 向下滚动到“MCP服务器”部分

  4. 点击“添加新的MCP服务器”

  5. 输入以下详细信息:

    • 服务器名称: evm-mcp-server
    • 类型: command
    • 命令: npx @mcpdotdirect/evm-mcp-server
  6. 点击“保存”

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

使用mcp.json和游标

对于可以与团队共享或跨项目使用的更便携的配置,您可以创建 .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另存为 mcp.json 在 .cursor 目录
  3. 重新启动Cursor或打开项目
  4. Cursor将检测配置并提供启用服务器的功能

示例:在游标中使用MCP服务器

配置MCP服务器后 mcp.json,您可以在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"
// }

示例:使用Multicall批量处理多个呼叫

// 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
  • 实施限速以防止滥用
  • 对于高价值服务,考虑添加确认步骤

📁 项目结构

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许可证.