使用说明
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支持
- 区块和交易查询
- 合同调用和代码检索
- 天然气估算
- 原始交易广播
安装
-
克隆或下载此存储库
-
安装依赖项:
npm install
- 创建一个
.env文件基于.env.example:
cp .env.example .env
- 将您的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协议流
- 初始化会话 -POST到
/mcp没有会话ID - 获取会话ID -接收
mcp-session-id响应中的标题 - 发送请求 -POST到
/mcp带有会话ID标头 - 流事件 -得到
/mcp带有SSE通知的会话ID - 终止 -删除
/mcp完成时使用会话ID
配置
编辑 .env 要配置服务器,请执行以下操作:
ETHERSCAN_API_KEY:您的Etherscan API密钥(必需)DEFAULT_CHAIN_ID:默认链ID(以太坊主网默认为1)PORT:服务器端口(默认值:3000)HOST:服务器主机(默认:localhost)
CORS配置
默认情况下,CORS已启用 origin: '*' 为了发展。生产:
- 编辑
src/server.ts - 更改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 One10:乐观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错误格式返回,并带有相应的错误代码。
发展
添加新工具
- 在适当的位置定义工具
src/tools/*.ts文件 - 将处理程序逻辑添加到相应的
src/handlers/*.ts文件 - 在中创建Zod模式
src/utils/schemas.ts如有需要 - 服务器将自动注册并路由新工具
许可证
麻省理工学院
资源
贡献
欢迎投稿!请确保:
- TypeScript类型定义正确
- 错误处理全面
- 工具名称跟在后面
etherscan_<category>_<action>模式 - 文档已针对新功能进行了更新