安全的MCP服务器和分类账集成
一个统一的Node.js应用程序来管理安全的多重签名事务。
设置
- 克隆仓库并安装依赖项:
npm install- 配置环境变量:
cp .env.example .env编辑 .env 并添加您的 SAFE_API_KEY。对于Telegram通知,还添加 TELEGRAM_BOT_TOKEN 和 ADMIN_TELEGRAM_CHAT_ID.
如何跑步
应用程序需要 两面旗帜:输入模式(如何决定交易)和确认模式(如何签名)。
输入模式
| 标志 | 描述 |
|---|---|
--mcp | 启动MCP服务器。外部AI代理连接并决定交易。 |
--dev | 交互式CLI。列出待处理的交易,您可以使用箭头键批准/拒绝。 |
确认模式
| 标志 | 描述 |
|---|---|
--ledger | 批准和拒绝的交易将进入分类账队列。打开UI,连接Ledger,签名 |
--telegram | 被拒绝的交易会被发送到Telegram机器人进行人工审核。批准覆盖可用。 |
npm脚本
npm run mcp:ledger # AI agent decides via MCP, sign via Ledger
npm run mcp:telegram # AI agent decides via MCP, review via Telegram
npm run dev:ledger # You decide via CLI, sign via Ledger
npm run dev:telegram # You decide via CLI, review via Telegram或者直接运行:
node index.mjs --mcp --ledger
node index.mjs --dev --telegram流动
随着 --ledger
Pending Safe tx
→ rules.yml evaluation (auto-approve / auto-reject / ask human)
→ Decision made (via MCP agent or CLI)
→ Approve → added to Ledger queue
→ Reject → added to Ledger queue (as rejection tx)
→ Open Ledger UI at http://127.0.0.1:3847/ui
→ Connect Ledger hardware wallet → sign随着 --telegram
Pending Safe tx
→ rules.yml evaluation
→ Decision made
→ Approve → added to Ledger queue
→ Reject → sent to Telegram bot for human review
→ Override → approve and add to Ledger queue
→ Confirm reject → tx stays pending on-chainMCP工具
| 工具 | 说明 |
|---|---|
safe_list_pending | 列出已配置保险箱的未执行多重签名交易 |
safe_decide_transaction | 批准或拒绝待处理的交易(均进入分类账队列) |
safe_get_rules | 读取当前防火墙规则(rules.yml) |
safe_update_rules | 更新防火墙规则 |
MCP客户端配置
{
"mcpServers": {
"safe-agent": {
"url": "http://127.0.0.1:3847/mcp"
}
}
}通过ngrok曝光
ngrok http 3847然后使用ngrok URL+ /mcp 作为您的MCP端点。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
SAFE_API_KEY | 是 | - | 安全交易服务API密钥 |
MCP_PORT | 没有 | 3847 | HTTP服务器的端口(MCP+Ledger UI) |
TELEGRAM_BOT_TOKEN | 否 | -- | Telegram机器人令牌(用于通知) |
ADMIN_TELEGRAM_CHAT_ID | 没有 | -- | 用于通知的Telegram聊天ID |
配置
安全地址、链ID和其他常量位于 config.mjs.
| 键 | 值 |
|---|---|
safeAddress | 0xe4522AcE60ccE4658751024310FF04f84daf8149 |
chainId | 42161 (Arbitrum One) |
ownerAddress | 0x6F4F4da5DD8546c625Ab3a3aF6B4797B66f56f14 |
signerAddress | 0x156D1aBD1F207f73a6ef13EF22E862Fc141156bD |
文件
| 文件 | 目的 |
|---|---|
index.mjs | 单一入口点-MCP服务器、dev CLI、Ledger API、Telegram bot |
config.mjs | 安全地址、链和所有者配置 |
rules.yml | 防火墙规则(白名单、已知合同、每日上限) |
.env.example | 环境变量模板 |
ledger-ui/index.html | 账簿签名UI(纯HTML,无构建步骤) |
ledger-queue.json | 等待分类账签名的交易(自动创建) |
daily-stats.json | 利率限制的每日审批统计数据 |
