区块链MCP服务器

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

  • by darwintree
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 darwintree/blockchain-mcp-server

使用说明

区块链MCP服务器演示

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

特性

🔗 多链支持

  • 以太坊主网 (链ID:1)
  • Conflux空间 (链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 -类型安全开发
  • 我知道 -具有出色TypeScript支持的现代以太坊库
  • 模型上下文协议(MCP) -标准化AI区块链通信
  • 萨德 -运行时类型验证

安装

  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方法

服务器支持以下标准以太坊JSON-RPC方法:

  • eth_getBalance -获取账户余额
  • eth_getTransactionByHash -按哈希值获取交易
  • eth_getTransactionReceipt -获取交易收据
  • eth_getBlockByNumber -按数字获取块
  • eth_getBlockByHash -按哈希值获取块
  • eth_getTransactionCount -获取帐户随机数
  • eth_getCode -获取合同代码
  • eth_call -执行合同调用
  • eth_estimateGas -估算交易用气
  • eth_gasPrice -获取当前天然气价格
  • 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 (数字,可选):要搜索的链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):以太坊地址
  • chainId (编号):链ID

答复:

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

call_rpc

执行任意RPC方法调用。

参数:

  • method (string):RPC方法名称
  • params (数组,可选):方法参数
  • chainId (数字,可选):链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. 区块链服务:使用viem客户端管理与多个EVM链的连接
  2. MCP服务器:按照MCP规范公开工具和资源
  3. 类型安全:完全支持TypeScript,支持Zod验证和viem的优秀类型
  4. 多链支持:跨不同网络的无缝交互

为什么是VIEM?

此项目使用 我知道 代替醚有几个优点:

  • 更好的TypeScript支持:具有严格类型的原生TypeScript
  • 现代API:功能性方法,更好地摇动树木
  • 演出:针对速度和捆绑包大小进行了优化
  • 可靠性:内置重试逻辑和更好的错误处理
  • 经得起未来考验:积极维护尖端功能

测试

您可以使用MCP检查器测试服务器:

npx @modelcontextprotocol/inspector node dist/index.js

配置

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

添加新链

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

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. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

支持

如有疑问或问题,请在GitHub存储库上打开问题。