以太坊区块链数据服务

Etherscan V2 MCP Server 提供了一套以太坊区块链数据的访问工具,支持通过HTTP MCP端点或stdio MCP服务器运行,适用于区块链开发者和数据分析师。

  • by denizumutdereli
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 denizumutdereli/etherscan-v2-mcp-server

使用说明

Etherscan V2 MCP服务器

概述 Etherscan V2 MCP服务器公开了一组精心策划的Etherscan V2端点作为模型上下文协议(MCP)工具。它既可以作为可流式传输的HTTP MCP端点运行,也可以作为stdio MCP服务器运行。在整个项目中使用本地ESM。

关键文件:

  • 服务器: src/index.ts
  • 工具: src/tools.ts
  • 模式: src/schemas.ts
  • MCP资源: src/resources.ts

需求

  • Node.js:20+(建议22+)
  • 包管理器:npm、yarn或pnpm

安装

npm i

环境 复制 .env.example 向 .env 并设定值:

  • 以太网扫描_ PI_键:您的Etherscan(或支持的资源管理器)API密钥。
  • ETHERSCAN_PRO软件:可选,启用专业功能(如果可用)。
  • OPENAI_API密钥:可选,启用简单的NL路由 ethv2_nl_query.
  • REDIS_HOST, REDIS_PORT, REDIS_密码:可选;如果设置,服务器将使用Redis支持的缓存;否则在内存缓存中。
  • 端口:默认值5009。
  • 主机:默认值为0.0.0.0。

脚本

  • 构建: tsc
  • 开发: tsx src/index.ts
  • 开始: node dist/index.js
  • 测试: jest --passWithNoTests

运行(HTTP MCP和REST信息)

# Development (tsx)
npm run dev

# Production build
npm run build && npm start

# Stdio mode for MCP-aware clients
node dist/index.js --stdio

HTTP端点(非MCP)

  • 获取 /health:基本活性有效载荷。
  • 获取 /api/tools:返回带有输入JSON模式的工具目录。
  • /mcp:MCP的流式HTTP传输。首先用POST初始化会话;坚持 mcp-session-id 同一会话中后续请求的标头。

MCP资源 这些可以通过MCP请求(而不是纯REST)发现:

  • etherscanv2://guide:关于选择工具和分页策略的Markdown指南。
  • etherscanv2://api-map:类别的JSON映射➜ 工具名称。

缓存 每个工具都会缓存具有较小TTL的响应(例如,典型的5-300s,静态元数据的响应时间更长)。如果 REDIS_HOST 设置,使用Redis;否则,将使用内存中的回退缓存。看 src/tools.ts 对于每个工具应用的TTL。

惯例

  • 始终包括 chainid (EVM链ID,例如1/以太坊,10/乐观主义,42161/Arbitrum,8453/Base)。
  • 使用 分页 对于列表端点: page 和 offset。不要在一次调用中聚合多个页面。
  • 对于日志,使用地址/主题过滤器和 fromBlock/toBlock 窗户。

工具目录 下面是工具名称、用途和简洁的输入模式(请参见 src/schemas.ts 权威定义)。

账户

  • ethv2_帐户平衡 –在标签处获取账户余额。
    • 输入: { chainid: number, address: string, tag?: 'latest'|'earliest'|'pending' }
  • ethv2_account_txlist –地址的正常tx(分页)。
    • 输入: { chainid, address, startblock?, endblock?, sort?: 'asc'|'desc', page?, offset? }
  • ethv2_account_txlist内部 –地址的内部tx(分页)。
    • 输入:与 ethv2_account_txlist
  • ethv2_account_tokentx –地址的ERC-20传输(分页;可选合约过滤器)。
    • 输入: { chainid, address, contractaddress?, sort?, page?, offset? }

区块和交易

  • ethv2_block_by_time –最接近时间戳的块编号。
    • 输入: { chainid, timestamp: number, closest?: 'before'|'after' }
  • ethv2_tx_receipt_status –tx哈希的收据状态。
    • 输入: { chainid, txhash: string }
  • ethv2_tx_status –tx哈希的交易状态。
    • 输入: { chainid, txhash: string }

合同

  • ethv2-contract_getabi –已验证的ABI合同。
    • 输入: { chainid, address }
  • ethv2_合同_电源代码 –已验证的合同源代码。
    • 输入: { chainid, address }

日志

  • ethv2_logs_getLogs –按地址/主题记录日志(分页;带窗口)。
    • 输入: { chainid, address?, fromBlock?, toBlock?, topic0?, topic1?, topic2?, topic3?, page?, offset? }

代币

  • ethv2_token_供应 –通过合同提供代币。
    • 输入: { chainid, contractaddress }
  • ethv2_token_balance –地址的令牌余额。
    • 输入: { chainid, contractaddress, address, tag?: 'latest'|'earliest'|'pending' }
  • ethv2_token_holdlist –令牌的持有者列表(分页)。
    • 输入: { chainid, contractaddress, page?, offset? }
  • ethv2_account_tokennfttx –ERC‑721地址传输(分页;可选合约筛选器)。
    • 输入: { chainid, address, contractaddress?, sort?, page?, offset? }
  • ethv2_account_token155tx –ERC‑1155地址传输(分页;可选合约筛选器)。
    • 输入: { chainid, address, contractaddress?, sort?, page?, offset? }

天然气与统计

  • ethv2-gas_oracle –每条链的气体预言机(基础/快速/安全)。
    • 输入: { chainid }
  • ethv2_stats_ethprice –每条链的ETH价格。
    • 输入: { chainid }
  • ethv2_stats_ethsupply –每条链的ETH供应。
    • 输入: { chainid }

Proxy (JSON‑RPC)

  • ethv2_proxy_blockNumber – eth_blockNumber.
    • 输入: { chainid }
  • ethv2_proxy_getBlockByNumber – eth_getBlockByNumber.
    • 输入: { chainid, tag: string /* hex or 'latest' */, boolean?: boolean /* include tx objects */ }
  • ethv2_proxy_getTransactionByHash – eth_getTransactionByHash.
    • 输入: { chainid, txhash }

姓名标签

  • ethv2_nametag_by_address –地址名称标签(如果支持)。
    • 输入: { chainid, address }

自然语言(可选)

  • ethv2_nl查询 –轻量级NL路由器,用于常见目的。
    • 输入: { chainid: number, query: string }
    • 注意:查找简单的意图,如gas、tx状态、余额、日志;否则返回指导。

例子 列出工具(REST):

curl http://localhost:5009/api/tools | jq

通过MCP获取gas oracle(stdio示例 node --stdio 需要MCP客户端)。对于简单的HTTP健全性检查,您可以从一次性脚本快速调用底层客户端,也可以使用定制的MCP客户端。

ESM注释 该项目为原生ESM("type": "module").本地进口包括明确 .js 源代码中的扩展,以便在 dist/ 在节点ESM下运行,没有解析错误。

许可证 麻省理工学院