mcpField
B
Blockchain MCP Server DEMO

Blockchain MCP Server DEMO

本地服务
github.com/darwintree金融数据073 周前更新

关于 Blockchain MCP Server DEMO

Blockchain MCP Server DEMO 是面向区块链数据访问与分析的 MCP 服务,支持 Ethereum Mainnet 和 Conflux eSpace。它提供链上数据查询工具、资源及 RPC 调用能力。

主要功能

  1. 01支持 Ethereum Mainnet 与 Conflux eSpace
  2. 02查询区块、交易和地址信息
  3. 03执行受支持的 JSON-RPC 方法
  4. 04通过资源 URI 获取链上数据

适用场景

  1. 01查看指定地址余额与信息
  2. 02按哈希查询交易详情
  3. 03读取特定区块数据

MCP 相关

该服务向 MCP 客户端提供区块链工具和资源,涵盖网络列表、区块、交易、地址及 RPC 调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"blockchain": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
启动命令npx -y @modelcontextprotocol/inspector

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@modelcontextprotocol/inspector

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

区块链 MCP 服务演示

一个功能全面的模型上下文协议(MCP)服务,用于与多个兼容 EVM 的区块链交互。此服务提供用于访问和分析区块链数据的工具和资源。

功能

🔗 多链支持
  • Ethereum 主网(Chain ID:1)

  • Conflux eSpace(Chain ID:1030)

🛠️ 工具(类似 POST 的端点)
  1. get_chains - 获取支持的区块链网络列表
  2. get_rpc_methods - 获取支持的 RPC 方法列表
  3. call_rpc - 执行任意 RPC 方法调用
  4. get_latest_block - 获取指定链的最新区块号
  5. get_transaction - 根据哈希获取交易详情
  6. get_address - 获取地址余额和信息
  7. get_block - 根据区块号获取区块信息
📚 资源(类似 GET 的端点)
  1. blockchain://transaction/{hash} - 获取交易详情(跨链搜索)
  2. blockchain://block/{chainId}/{number} - 获取区块信息
  3. blockchain://address/{chainId}/{address} - 获取地址信息和余额
  4. blockchain://chains - 列出所有支持的区块链网络

技术栈

  • TypeScript - 类型安全的开发
  • Viem - 现代化的 Ethereum 库,提供出色的 TypeScript 支持
  • 模型上下文协议(MCP) - 标准化的 AI 与区块链通信
  • Zod - 运行时类型验证

安装

  1. 克隆仓库:
git clone <repository-url>
cd blockchain-mcp-server
  1. 安装依赖:
npm install
  1. 构建项目:
npm run build
  1. 启动服务:
npm start

使用示例

工具
获取支持的链
// 获取所有支持的区块链网络
await callTool("get_chains", {});
获取交易信息
// 获取交易信息
await callTool("get_transaction", {
  hash: "0x1234567890abcdef...",
  chainId: 1  // optional, will search all chains if not provided
});
获取地址信息
// 获取地址信息
await callTool("get_address", {
  address: "0x742de6d65963b2c3a5e8e3b8c7cb56c6f78e0c00",
  chainId: 1
});
执行 RPC 调用
// 获取以太坊主网最新区块号
await callTool("call_rpc", {
  method: "eth_blockNumber",
  params: [],
  chainId: 1
});

// 获取地址余额
await callTool("call_rpc", {
  method: "eth_getBalance", 
  params: ["0x742de6d65963b2c3a5e8e3b8c7cb56c6f78e0c00", "latest"],
  chainId: 1
});
资源
访问交易数据
// 跨链查询交易 (will search all supported chains)
const txResource = await getResource("blockchain://transaction/0x1234567890abcdef...");
访问区块数据
// 获取以太坊主网特定区块
const block = await getResource("blockchain://block/1/19000000");

// 获取Polygon特定区块
const polygonBlock = await getResource("blockchain://block/137/12345678");
访问地址数据
// 获取地址信息
const addressInfo = await getResource("blockchain://address/1/0x742de6d65963b2c3a5e8e3b8c7cb56c6f78e0c00");
访问支持的链
// 获取所有支持的区块链网络
const chains = await getResource("blockchain://chains");

支持的 RPC 方法

此服务支持以下标准 Ethereum JSON-RPC 方法:

  • eth_getBalance - 获取账户余额
  • eth_getTransactionByHash - 根据哈希获取交易
  • eth_getTransactionReceipt - 获取交易回执
  • eth_getBlockByNumber - 根据区块号获取区块
  • eth_getBlockByHash - 根据哈希获取区块
  • eth_getTransactionCount - 获取账户 nonce
  • eth_getCode - 获取合约代码
  • eth_call - 执行合约调用
  • eth_estimateGas - 估算交易所需的 gas
  • eth_gasPrice - 获取当前 gas 价格
  • eth_blockNumber - 获取最新区块号
  • eth_chainId - 获取链 ID
  • net_version - 获取网络版本
  • web3_clientVersion - 获取客户端版本

API 参考

工具
get_chains

返回所有支持的区块链网络列表。

参数: 无

响应:

[
  {
    "chainId": 1,
    "name": "Ethereum Mainnet",
    "symbol": "ETH",
    "rpcUrls": [...],
    "blockExplorerUrls": [...],
    "nativeCurrency": {...}
  }
]
get_transaction

获取详细的交易信息。

参数:

  • hash(string):交易哈希
  • chainId(number,可选):要搜索的链 ID

响应:

{
  "hash": "0x...",
  "blockNumber": 19000000,
  "from": "0x...",
  "to": "0x...",
  "value": "1.0",
  "gasPrice": "0.00002",
  "gasUsed": "21000",
  "chainId": 1,
  "status": 1
}
get_address

获取地址余额和信息。

参数:

  • address(string):Ethereum 地址
  • chainId(number):链 ID

响应:

{
  "address": "0x...",
  "balance": "10.5",
  "nonce": 42,
  "code": null,
  "chainId": 1
}
call_rpc

执行任意 RPC 方法调用。

参数:

  • method(string):RPC 方法名称
  • params(array,可选):方法参数
  • chainId(number,可选):链 ID(默认:1)

响应: 原始 RPC 响应

错误处理

此服务包含全面的错误处理:

  • 网络故障:在 RPC 端点之间自动故障转移
  • 无效参数:使用 Zod 架构验证输入
  • 链不可用:链不可用时进行平稳处理
  • 未找到交易:跨链搜索并提供清晰的错误消息

架构

src/
├── index.ts              # Main MCP server implementation
├── blockchain-service.ts # Blockchain interaction service (using viem)
├── config.ts            # Chain configurations and constants
└── types.ts             # TypeScript interfaces and schemas
核心组件
  1. BlockchainService:使用 viem 客户端管理与多个 EVM 链的连接
  2. MCP Server:按照 MCP 规范提供工具和资源
  3. 类型安全:完整支持 TypeScript,使用 Zod 验证,并利用 viem 出色的类型定义
  4. 多链支持:轻松跨不同网络交互
为什么选择 Viem?

本项目使用 viem 而非 ethers,原因如下:

  • 更好的 TypeScript 支持:原生 TypeScript,类型严格
  • 现代化 API:采用函数式方法,支持更好的 tree-shaking
  • 性能:针对速度和包体积进行了优化
  • 可靠性:内置重试逻辑,错误处理更完善
  • 面向未来:积极维护,提供前沿功能

测试

你可以使用 MCP Inspector 测试服务:

npx @modelcontextprotocol/inspector node dist/index.js

配置

服务会自动使用公共 RPC 端点连接到多个区块链网络。你可以修改 src/config.ts 文件来自定义 RPC 端点。

添加新链

若要支持新的 EVM 兼容链,请更新 src/config.ts 中的 SUPPORTED_CHAINS 对象:

export const SUPPORTED_CHAINS: Record<number, ChainConfig> = {
  // ... existing chains
  
  // New chain example
  YOUR_CHAIN_ID: {
    chainId: YOUR_CHAIN_ID,
    name: "Your Chain Name",
    symbol: "TOKEN",
    rpcUrls: [
      "https://rpc.yourchain.com",
      "https://backup-rpc.yourchain.com"
    ],
    blockExplorerUrls: ["https://explorer.yourchain.com"],
    nativeCurrency: {
      name: "Your Token",
      symbol: "TOKEN",
      decimals: 18
    }
  }
};

贡献

  1. Fork 此仓库
  2. 创建功能分支
  3. 进行更改
  4. 视情况添加测试
  5. 提交 pull request

许可证

MIT 许可证——详情请参阅 LICENSE 文件。

支持

如有疑问或遇到问题,请在 GitHub 仓库中提交 issue。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。