关于 Blockchain MCP Server DEMO
Blockchain MCP Server DEMO 是面向区块链数据访问与分析的 MCP 服务,支持 Ethereum Mainnet 和 Conflux eSpace。它提供链上数据查询工具、资源及 RPC 调用能力。
主要功能
- 01支持 Ethereum Mainnet 与 Conflux eSpace
- 02查询区块、交易和地址信息
- 03执行受支持的 JSON-RPC 方法
- 04通过资源 URI 获取链上数据
适用场景
- 01查看指定地址余额与信息
- 02按哈希查询交易详情
- 03读取特定区块数据
MCP 相关
该服务向 MCP 客户端提供区块链工具和资源,涵盖网络列表、区块、交易、地址及 RPC 调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
区块链 MCP 服务演示
一个功能全面的模型上下文协议(MCP)服务,用于与多个兼容 EVM 的区块链交互。此服务提供用于访问和分析区块链数据的工具和资源。
功能
🔗 多链支持
-
Ethereum 主网(Chain ID:1)
-
Conflux eSpace(Chain ID:1030)
🛠️ 工具(类似 POST 的端点)
get_chains- 获取支持的区块链网络列表get_rpc_methods- 获取支持的 RPC 方法列表call_rpc- 执行任意 RPC 方法调用get_latest_block- 获取指定链的最新区块号get_transaction- 根据哈希获取交易详情get_address- 获取地址余额和信息get_block- 根据区块号获取区块信息
📚 资源(类似 GET 的端点)
blockchain://transaction/{hash}- 获取交易详情(跨链搜索)blockchain://block/{chainId}/{number}- 获取区块信息blockchain://address/{chainId}/{address}- 获取地址信息和余额blockchain://chains- 列出所有支持的区块链网络
技术栈
- TypeScript - 类型安全的开发
- Viem - 现代化的 Ethereum 库,提供出色的 TypeScript 支持
- 模型上下文协议(MCP) - 标准化的 AI 与区块链通信
- Zod - 运行时类型验证
安装
- 克隆仓库:
git clone <repository-url>
cd blockchain-mcp-server
- 安装依赖:
npm install
- 构建项目:
npm run build
- 启动服务:
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- 获取账户 nonceeth_getCode- 获取合约代码eth_call- 执行合约调用eth_estimateGas- 估算交易所需的 gaseth_gasPrice- 获取当前 gas 价格eth_blockNumber- 获取最新区块号eth_chainId- 获取链 IDnet_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
核心组件
- BlockchainService:使用 viem 客户端管理与多个 EVM 链的连接
- MCP Server:按照 MCP 规范提供工具和资源
- 类型安全:完整支持 TypeScript,使用 Zod 验证,并利用 viem 出色的类型定义
- 多链支持:轻松跨不同网络交互
为什么选择 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
}
}
};
贡献
- Fork 此仓库
- 创建功能分支
- 进行更改
- 视情况添加测试
- 提交 pull request
许可证
MIT 许可证——详情请参阅 LICENSE 文件。
支持
如有疑问或遇到问题,请在 GitHub 仓库中提交 issue。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。