区块链数据服务

MCP区块链服务器是一个允许AI助手读取区块链数据并准备交易的服务,用户保持对密钥的完全控制并在自己的钱包中签署每笔交易。

  • by zhangzhongnan928
  • TypeScript
  • 混合部署
  • 10 星标
  • 更新于
在 GitHub 查看 zhangzhongnan928/mcp-blockchain-server

使用说明

MCP区块链服务器

一 主控程序 允许AI助手的服务器 读 区块链数据 和 准备交易 --而用户保持满 保管他们的钥匙,并在自己的钱包里签署每笔交易。

它作为一个 单一、独立的过程.没有数据库,没有Redis,没有API 密钥,无需单独构建前端。将你的MCP客户端指向它,然后离开。

┌──────────────┐   MCP (stdio)   ┌─────────────────────┐   RPC    ┌────────────┐
│ AI assistant │ ──────────────► │  mcp-blockchain     │ ───────► │ Blockchain │
│ (Claude …)   │ ◄────────────── │  server             │ ◄─────── │  (EVM)     │
└──────────────┘                 │   + signing web page │          └────────────┘
                                 └─────────┬───────────┘
                                           │ opens link, signs in wallet
                                           ▼
                                     ┌───────────┐
                                     │   User    │  (MetaMask / Rabby / …)
                                     └───────────┘

为什么这个设计

AI+区块链的难题是让助手 行动 从未 触摸私钥。此服务器通过拆分工作来解决这个问题:

  • 阅读 (余额、合约状态)在服务器端发生并直接返回 助理。
  • 写入 只有永远 准备好的 服务器端。服务器返回一个URL; 用户打开它,查看详细信息,然后 在自己的钱包里签名The 钱包广播交易。服务器只会学习结果 交易哈希。 私钥永远不会到达服务器。

快速开始

要求: Node.js 18+。没有克隆,没有生成,没有API密钥。

将服务器添加到启动stdio服务器的任何MCP客户端。对于 克劳德 桌面,打开设置→ 开发者→ 编辑配置并添加:

{
  "mcpServers": {
    "blockchain": {
      "command": "npx",
      "args": ["-y", "mcp-blockchain-server"]
    }
  }
}

重新启动客户端。你现在可以问这样的问题 “ETH余额是多少 vitalik.eth?" 或 “在Sepolia上向0x发送0.01测试ETH。” 对于发送 助手返回一个链接——打开它,查看并登录你的钱包。

无需配置:服务器附带免费的公共RPC终结点 默认为 Sepolia测试网.

在其他客户端中使用它

相同的 npx 命令在任何运行MCP stdio服务器的地方都有效——配置 形状在客户端之间是相同的:

{ "command": "npx", "args": ["-y", "mcp-blockchain-server"] }

这是一个可以进入的街区 光标 (.cursor/mcp.json), 克莱恩, 帆板运动, VS Code (.vscode/mcp.json)以及其他。要传递选项,请添加 一 "env" 块(参见 配置).

从源代码运行(开发)

git clone https://github.com/zhangzhongnan928/mcp-blockchain-server.git
cd mcp-blockchain-server
npm install      # installs and builds (via the prepare script)

然后将客户端指向build而不是npx:

{ "command": "node", "args": ["/absolute/path/to/mcp-blockchain-server/build/index.js"] }

远程/web客户端(HTTP传输)

对于通过HTTP连接而不是生成本地进程的MCP客户端,请运行 服务器处于HTTP模式。然后,它为MCP端点提供服务 和 签署 一个端口上的页面:

MCP_TRANSPORT=http PUBLIC_BASE_URL=https://your-host npx -y mcp-blockchain-server
  • MCP端点(流式HTTP): https://your-host/mcp
  • 签名链接: https://your-host/tx/<id>

将公共接口绑定到 HOST=0.0.0.0 (或保留默认值 127.0.0.1 和 把它放在反向代理后面)。当公开曝光时,设置 MCP_ALLOWED_HOSTS 和 MCP_ALLOWED_ORIGINS 启用DNS重新绑定保护,并启用它 使用HTTPS和访问控制。

将其作为自定义连接器托管(单击Render、Vercel、Docker或快速 用于测试的隧道)并将其连接到克劳德的隧道中 添加自定义连接器 对话, 看 部署指南.在无国籍主机上,如 Vercel,把商店指向Redis(UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN)因此签名流在请求之间持续存在。

工具

工具 目的
get-chains 列出支持的网络及其链ID。
get-balance 链上地址的本机令牌余额。
read-contract 调用只读合约方法(传递 abi 或设置 ETHERSCAN_API_KEY).
prepare-transaction 创建未签名的交易并返回签名URL
get-transaction-status 按id跟踪准备好的交易

read-contract 当你传递一个人类可读的ABI时,它是零配置:

{
  "chainId": "1",
  "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "method": "balanceOf",
  "args": ["0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"],
  "abi": ["function balanceOf(address) view returns (uint256)"]
}

签名流程

  1. 助理打来电话 prepare-transaction。服务器存储它并返回 http://localhost:3000/tx/<id>.
  2. 用户打开链接。该页面显示网络、收件人、金额和 通话数据。
  3. 用户连接钱包并点击 批准并签字.钱包 迹象 和 广播(eth_sendTransaction).
  4. 该页面将交易哈希报告回服务器,服务器会监视 链上确认。
  5. 助理民意调查 get-transaction-status 直到它 CONFIRMED.

签名页面是由同一进程提供的普通HTML+vanilla JS—— 无需额外构建或部署。

配置

一切都是可选的。复制 .env.example 到 .env 以覆盖默认值。

变量 默认值 描述
MCP_TRANSPORT stdio stdio 对于本地客户,或 http 通过流式HTTP为MCP提供服务 /mcp.
PORT 3000 签名web服务器的端口(以及 /mcp http模式下的端点)。
HOST 127.0.0.1 要绑定的接口(默认情况下仅限localhost)。集 0.0.0.0 远程曝光。
PUBLIC_BASE_URL http://localhost:<PORT> 签名链接时使用的基本URL和 /mcp URL(远程托管时设置)。
DEFAULT_CHAIN_ID 11155111 默认链(Sepolia测试网)。
LOG_LEVEL info error
MCP_DATA_DIR ~/.mcp-blockchain 待处理交易的存储位置(文件后端)。
UPSTASH_REDIS_REST_URL / _TOKEN -- 使用Redis存储而不是文件后端。无状态主机(Vercel)上需要。 KV_REST_API_URL / _TOKEN 也工作
RPC_URL_<chainId> 内置公共RPC 覆盖链的RPC,例如。 RPC_URL_1=https://….
INFURA_API_KEY -- 如果已设置,则将默认RPC升级为Infura。
ETHERSCAN_API_KEY -- 如果设置, read-contract 可以自动获取经过验证的ABI
MCP_ALLOWED_HOSTS -- http模式的逗号分隔主机分配列表(启用DNS重新绑定保护)。
MCP_ALLOWED_ORIGINS -- http模式的逗号分隔的Origin允许列表(启用DNS重新绑定保护)。

支持的链

以太坊(1)Sepolia(11155111),多边形(137),厦门多边形(80002), 基地(8453),基础Sepolia(84532)Arbitrum One(42161OP 主网 (10).每个都有一个内置的公共RPC;用以下命令覆盖任何 RPC_URL_<chainId>.

发展

npm run dev        # run from source with auto-reload (tsx)
npm run build      # compile TypeScript to build/
npm start          # run the compiled server
npm test           # run the test suite (node:test)
npm run typecheck  # type-check without emitting

释放

CI(构建+测试)在每次推送和PR上运行。要将新版本发布到npm:

  1. 添加一个 NPM_TOKEN repository secret(一个npm自动化令牌)——一次。
  2. 缓冲版本并标记: npm version patch (或 minor / major)那么 git push --follow-tags.
  3. 为该标签创建GitHub版本。发布工作流运行测试和 发布到npm(有出处)。

您还可以手动发布: npm publish.

安全

  • 私钥永远不会到达服务器。 它只准备交易;这 用户的钱包签名并广播它们。
  • 签名服务器绑定到 本地主机 默认情况下, 签名页面上基于nonce的内容安全策略。
  • 所有工具输入(地址、金额、调用数据)在使用前都经过验证。
  • 日志被写入 标准错误 因此,它们永远不会损坏MCP stdio流。

看 docs/security.md 了解详情。

文档

许可证

麻省理工学院——见 许可证.