以太坊数据API服务器

一个提供对Etherscan API V2全面访问的MCP服务器,支持60+ EVM兼容链,覆盖账户、区块、合约、Gas跟踪、代币、日志、统计和代理API等65+工具。

  • by remix-project-org
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 remix-project-org/etherscan-mcp-server

使用说明

Etherscan MCP服务器

模型上下文协议(MCP)服务器,提供对Etherscan API V2的全面访问。该服务器公开了65多种工具,涵盖所有主要的Etherscan API端点,包括账户、区块、合同、气体跟踪、代币、日志、统计数据和以太坊JSON-RPC代理方法。

特性

  • API全面覆盖:访问所有Etherscan V2 API端点
  • 多链支持:通过链ID参数与60多个EVM兼容链配合使用
  • HTTP传输:用于MCP协议的带有服务器端事件(SSE)的RESTful HTTP API
  • CORS已启用:开箱即用支持跨来源请求
  • MCP协议:无缝集成的标准MCP服务器实施
  • TypeScript:完全打字,以获得更好的开发体验
  • 错误处理:使用描述性消息进行全面的错误处理
  • 组织结构:工具、处理程序和实用程序的干净分离

支持的API类别

帐户API(11个工具)

  • 本机令牌余额(单地址和多地址)
  • 历史余额查询
  • 交易列表(正常、内部、令牌转移)
  • ERC-20、ERC-721、ERC-1155代币转移
  • 开采区块
  • 信标链提款
  • 解决资金来源问题

块API(8个工具)

  • 块和叔叔奖励
  • 区块倒计时估计
  • 按时间戳划分的区块编号
  • 每日区块统计(大小、计数、奖励、时间)

合约API(3个工具)

  • 合同ABI检索
  • 源代码访问
  • 合同创建者信息

气体跟踪器API(5个工具)

  • 天然气价格预言机(安全、建议、快速)
  • 确认时间估计
  • 每日天然气统计(限额、使用量、价格)

令牌API(11个工具)

  • 代币供应和余额
  • 历史令牌数据
  • 代币持有者列表和排名
  • 令牌元数据和信息
  • NFT库存跟踪

日志API(1个工具)

  • 按地址、主题和块范围筛选事件日志

统计API(12个工具)

  • ETH供应和价格
  • 网络统计数据
  • 每日指标(交易、费用、地址)
  • 哈希率和难度
  • 节点数量和区块链大小

代理API(14个工具)

  • 完整的以太坊JSON-RPC支持
  • 区块和交易查询
  • 合同调用和代码检索
  • 天然气估算
  • 原始交易广播

安装

  1. 克隆或下载此存储库

  2. 安装依赖项:

npm install
  1. 创建一个 .env 文件基于 .env.example:
cp .env.example .env
  1. 将您的Etherscan API密钥添加到 .env:
ETHERSCAN_API_KEY=your_api_key_here

从以下位置获取API密钥:https://etherscan.io/myapikey

用法

构建项目:

npm run build

在开发模式下运行:

npm run dev

生产运行:

npm start

服务器将于启动 http://localhost:3000 默认情况下。

HTTP端点

一旦运行,服务器就会公开这些端点:

  • GET /health -健康检查端点,返回服务器状态和工具计数
  • POST /mcp -初始化MCP会话并发送JSON-RPC请求
  • GET /mcp -为现有会话建立SSE流
  • DELETE /mcp -终止MCP会话

健康检查示例

curl http://localhost:3000/health
# Response: {"status":"ok","tools":65,"transport":"streamable-http","protocol":"MCP","sessions":0}

MCP协议流

  1. 初始化会话 -POST到 /mcp 没有会话ID
  2. 获取会话ID -接收 mcp-session-id 响应中的标题
  3. 发送请求 -POST到 /mcp 带有会话ID标头
  4. 流事件 -得到 /mcp 带有SSE通知的会话ID
  5. 终止 -删除 /mcp 完成时使用会话ID

配置

编辑 .env 要配置服务器,请执行以下操作:

  • ETHERSCAN_API_KEY:您的Etherscan API密钥(必需)
  • DEFAULT_CHAIN_ID:默认链ID(以太坊主网默认为1)
  • PORT:服务器端口(默认值:3000)
  • HOST:服务器主机(默认:localhost)

CORS配置

默认情况下,CORS已启用 origin: '*' 为了发展。生产:

  1. 编辑 src/server.ts
  2. 更改CORS配置:
app.use(cors({
  origin: 'https://your-domain.com', // Specific origin
  methods: ['GET', 'POST', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Accept', 'mcp-session-id'],
  exposedHeaders: ['mcp-session-id'],
  credentials: true // If using cookies/auth
}));

支持的链ID

服务器支持60多个链。通用链ID:

  • 1:以太坊主网
  • 5:Goerli测试网
  • 11155111:Sepolia测试网
  • 56:BNB智能链
  • 137:多边形
  • 42161:Arbitrum One
  • 10:乐观
  • 8453:基地
  • 43114:雪崩C链

MCP集成

该服务器使用现代HTTP实现了模型上下文协议 流式HTTP传输 (当前MCP协议)。它提供基于会话的通信,并支持SSE流媒体。

连接到服务器

MCP客户端应遵循以下流程:

# 1. Initialize session
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}'

# 2. Extract mcp-session-id from response headers

# 3. Send requests with session ID
curl -X POST http://localhost:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "mcp-session-id: YOUR_SESSION_ID" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

工具使用示例

所有工具都遵循命名模式 etherscan_<category>_<action>.

获取ETH余额

{
  "name": "etherscan_account_balance",
  "arguments": {
    "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "chainid": "1"
  }
}

获取Gas Oracle

{
  "name": "etherscan_gas_oracle",
  "arguments": {
    "chainid": "1"
  }
}

获取合约ABI

{
  "name": "etherscan_contract_abi",
  "arguments": {
    "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413",
    "chainid": "1"
  }
}

获取交易凭证

{
  "name": "etherscan_proxy_get_transaction_receipt",
  "arguments": {
    "txhash": "0x...",
    "chainid": "1"
  }
}

项目结构

etherscan_mcp/
├── src/
│   ├── index.ts              # Entry point
│   ├── server.ts             # MCP server implementation
│   ├── config.ts             # Configuration management
│   ├── types/                # TypeScript type definitions
│   │   ├── index.ts
│   │   └── etherscan.ts
│   ├── tools/                # MCP tool definitions
│   │   ├── account.ts
│   │   ├── block.ts
│   │   ├── contract.ts
│   │   ├── gas.ts
│   │   ├── token.ts
│   │   ├── logs.ts
│   │   ├── stats.ts
│   │   └── proxy.ts
│   ├── handlers/             # Tool execution handlers
│   │   ├── account.ts
│   │   ├── block.ts
│   │   ├── contract.ts
│   │   ├── gas.ts
│   │   ├── token.ts
│   │   ├── logs.ts
│   │   ├── stats.ts
│   │   └── proxy.ts
│   └── utils/
│       ├── api.ts            # Etherscan API client
│       └── schemas.ts        # Zod validation schemas
├── package.json
├── tsconfig.json
├── .env.example
└── README.md

API费率限制

Etherscan API有基于您的计划的费率限制:

  • 免费:5次通话/秒
  • 标准:10次呼叫/秒
  • 高级:15个呼叫/秒
  • 专业:20个电话/秒

服务器没有实现速率限制-请确保您的客户端遵守这些限制。

错误处理

服务器提供详细的错误消息:

  • 缺少API密钥
  • 无效参数
  • Etherscan API错误
  • 网络错误

错误以MCP错误格式返回,并带有相应的错误代码。

发展

添加新工具

  1. 在适当的位置定义工具 src/tools/*.ts 文件
  2. 将处理程序逻辑添加到相应的 src/handlers/*.ts 文件
  3. 在中创建Zod模式 src/utils/schemas.ts 如有需要
  4. 服务器将自动注册并路由新工具

许可证

麻省理工学院

资源

贡献

欢迎投稿!请确保:

  • TypeScript类型定义正确
  • 错误处理全面
  • 工具名称跟在后面 etherscan_<category>_<action> 模式
  • 文档已针对新功能进行了更新