使用说明
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)"]
}
签名流程
- 助理打来电话
prepare-transaction。服务器存储它并返回http://localhost:3000/tx/<id>. - 用户打开链接。该页面显示网络、收件人、金额和 通话数据。
- 用户连接钱包并点击 批准并签字.钱包
迹象 和 广播(
eth_sendTransaction). - 该页面将交易哈希报告回服务器,服务器会监视 链上确认。
- 助理民意调查
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:
- 添加一个
NPM_TOKENrepository secret(一个npm自动化令牌)——一次。 - 缓冲版本并标记:
npm version patch(或minor/major)那么git push --follow-tags. - 为该标签创建GitHub版本。发布工作流运行测试和 发布到npm(有出处)。
您还可以手动发布: npm publish.
安全
- 私钥永远不会到达服务器。 它只准备交易;这 用户的钱包签名并广播它们。
- 签名服务器绑定到 本地主机 默认情况下, 签名页面上基于nonce的内容安全策略。
- 所有工具输入(地址、金额、调用数据)在使用前都经过验证。
- 日志被写入 标准错误 因此,它们永远不会损坏MCP stdio流。
看 docs/security.md 了解详情。
文档
许可证
麻省理工学院——见 许可证.