README
🚀 MCP钱包签名器
MCP钱包签名器可确保您的私钥不会离开浏览器,每笔交易都需在钱包中获得用户明确批准。它改变了传统区块链MCP需将私钥粘贴到配置文件的方式,通过EIP - 6963将交易路由到浏览器钱包,让您像与其他dapp交互一样审查和批准每个操作,避免配置文件中私钥的风险和静默交易。
🚀 快速开始
本项目与任何支持MCP的客户端通过标准输入输出传输方式兼容。
✨ 主要特性
- 私钥安全:私钥不会离开浏览器,每笔交易都需用户明确批准。
- 安全交易:通过EIP - 6963将交易路由到浏览器钱包,避免配置文件中私钥的风险和静默交易。
- 多工具支持:提供如连接钱包、发送交易、签署消息等多种MCP工具。
- 多链支持:内置多个区块链网络的RPC URL。
📦 安装指南
Claude Code CLI
claude mcp add evm-wallet -- npx -y mcp-wallet-signer
Claude Desktop
将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"evm-wallet": {
"command": "npx",
"args": ["-y", "mcp-wallet-signer"]
}
}
}
直接运行
npx -y mcp-wallet-signer
pnpx mcp-wallet-signer
bunx mcp-wallet-signer
💻 使用示例
基础用法
MCP工具使用示例:
| 工具 | 描述 | 是否需要浏览器 |
| ------------------ | -------------------------------------- | ---------------- |
| connect_wallet | 连接钱包,返回地址 | 是 |
| send_transaction | 发送ETH/代币,调用合约 | 是 |
| sign_message | 签署任意消息 (personal_sign) | 是 |
| sign_typed_data | 签署EIP - 712类型数据 | 是 |
| get_balance | 读取ETH余额 (通过RPC) | 否 |
高级用法
工作流程
- 代理调用MCP工具(例如
send_transaction)。 - 服务器在浏览器中打开本地签名页面。
- 用户连接钱包并批准操作。
- 将结果(地址、交易哈希、签名)返回给代理。
📚 详细文档
支持的链
内置以下区块链网络的RPC URL:
- 以太坊 (1)
- Sepolia (11155111)
- 多边形 (137)
- Arbitrum One (42161)
- Optimism (10)
- Base (8453)
- 雪崩 (43114)
- BNB智能链 (56)
配置
可通过以下环境变量进行配置(可选):
| 变量 | 描述 | 默认值 |
| ----------------------- | ---------------- | ------- |
| EVM_MCP_PORT | HTTP服务器端口 | 3847 |
| EVM_MCP_DEFAULT_CHAIN | 默认链ID | 1 |
开发
需要 Deno v2.0+。
# 安装依赖
deno install
cd web && deno install && cd ..
# 在开发模式下运行MCP服务器
deno task dev
# 运行Web UI开发服务器(在单独的终端中)
deno task dev:web
# 运行测试
deno task test
# 构建Web UI
deno task build:web
# 为npm构建
deno task build:npm
# 格式化代码
deno task fmt
# 代码检查
deno task lint
项目结构
本项目使用 Deno 开发,并通过 dnt 发布到npm。src/ 中的源代码使用 node: 内置模块(无Deno特定API),因此npm包可以在Node.js下运行。
deno.jsonc # Deno配置 + npm包元数据(版本的单一事实来源)
server.json # MCP注册表清单(由LobeHub等从git读取)
scripts/build-npm.ts # dnt构建脚本:读取deno.jsonc,将src/转换为npm/
├── src/ # 服务器源代码(TypeScript,可在Deno和Node下运行)
│ ├── index.ts # CLI入口点
│ ├── mcp-server.ts # MCP工具定义
│ ├── http-server.ts # 用于浏览器批准UI的懒启动HTTP服务器
│ ├── wallet-signer.ts # 核心签名编排
│ ├── pending-store.ts # 基于Promise的请求跟踪
│ ├── schemas.ts # MCP工具输入的Zod模式
│ ├── transport.ts # viem自定义传输
│ ├── viem-account.ts # viem本地账户适配器
│ ├── mod.ts # 库导出(npm: "mcp-wallet-signer")
│ ├── wallet-only.ts # 库导出(npm: "mcp-wallet-signer/wallet-only")
│ └── version.ts # 在运行时从package.json读取版本
├── web/ # Svelte UI(钱包批准页面)
│ └── src/
│ ├── App.svelte
│ └── components/ # ConnectWallet, TransactionSigner, MessageSigner
├── tests/
│ ├── *.test.ts # 单元测试
│ ├── e2e/ # 端到端测试(HTTP API)
│ └── e2e-browser/ # 端到端测试(Playwright,真实浏览器钱包)
└── npm/ # 生成的 — dnt输出 + 构建的Web资产
构建流程
deno task build:npm 运行 scripts/build-npm.ts,该脚本执行以下操作:
- 通过dnt将
src/转换为ES模块JavaScript →npm/esm/。 - 从
deno.jsonc中的元数据生成npm/package.json。 - 构建Svelte Web UI (
web/→web/dist/)。 - 将Web资产复制到
npm/web/。
开发工作流程
deno task dev # 直接使用Deno运行MCP服务器
deno task dev:web # Web UI的Vite开发服务器(在单独的终端中)
deno task test # 单元 + 端到端API测试
deno task check # 类型检查 + 代码检查 + 格式化检查
📄 许可证
本项目采用MIT许可证。
Scan to join WeChat group