EVM Wallet Signer

平台与服务

by nikicat

透過 EIP-6963 將 EVM 交易導向瀏覽器錢包(如 MetaMask),以完成簽署。

什么是 EVM Wallet Signer

透過 EIP-6963 將 EVM 交易導向瀏覽器錢包(如 MetaMask),以完成簽署。

README

MCP Wallet Signer

npm version License: MIT MCP Badge

[!WARNING] Superseded by browser-web3-signer — the same browser-wallet signing flow, reimplemented in Rust with a CLI plus Rust/TypeScript/Go libraries. mcp-wallet-signer still works, but new development happens there.

Your private keys never leave your browser. Every transaction requires explicit user approval in your wallet.

Most blockchain MCPs require you to paste a private key into a config file — giving the AI agent full, unsupervised access to your funds. MCP Wallet Signer takes a different approach: it routes every transaction to your actual browser wallet — EVM wallets (MetaMask, Rabby, …) via EIP-6963, and TRON via TronLink — so you review and approve each action just like any other dapp interaction. No keys in config files, no risk of silent transactions.

Compatible With

<a href="https://claude.ai/download"><img src="https://img.shields.io/badge/Claude_Desktop-available-blue" alt="Claude Desktop"></a> <a href="https://docs.anthropic.com/en/docs/claude-code"><img src="https://img.shields.io/badge/Claude_Code-available-blue" alt="Claude Code"></a> <a href="https://cursor.com"><img src="https://img.shields.io/badge/Cursor-available-blue" alt="Cursor"></a> <a href="https://windsurf.com"><img src="https://img.shields.io/badge/Windsurf-available-blue" alt="Windsurf"></a>

Works with any MCP-compatible client via stdio transport.

Installation

Claude Code CLI

bash
claude mcp add wallet-signer -- npx -y mcp-wallet-signer

(The name wallet-signer is just the MCP server identifier — pick anything you like. Legacy evm-wallet still works for users who installed before TRON support landed.)

Claude Desktop

Add to your claude_desktop_config.json:

json
{
  "mcpServers": {
    "wallet-signer": {
      "command": "npx",
      "args": ["-y", "mcp-wallet-signer"]
    }
  }
}

Run directly

bash
npx -y mcp-wallet-signer
pnpx mcp-wallet-signer
bunx mcp-wallet-signer

MCP Tools

EVM (MetaMask / Rabby / any EIP-6963 wallet)

ToolDescriptionBrowser Required
connect_walletConnect wallet, return addressYes
send_transactionSend ETH/tokens, call contractsYes
sign_messageSign arbitrary message (personal_sign)Yes
sign_typed_dataSign EIP-712 typed dataYes
get_balanceRead ETH balance (via RPC)No
get_token_balanceRead ERC-20 balance (balanceOf/decimals/symbol)No

TRON (TronLink)

ToolDescriptionBrowser Required
tron_connect_walletConnect TronLink, return Base58 (T…) addressYes
tron_send_transactionNative TRX transferYes
tron_trigger_contractTRC-20 / smart-contract call via triggerSmartContractYes
tron_sign_messageSign arbitrary message (signMessageV2)Yes
tron_sign_typed_dataSign TIP-712 typed dataYes
tron_get_balanceRead TRX balance (via TronGrid)No
tron_get_token_balanceRead TRC-20 balance (balanceOf/decimals/symbol)No

How It Works

  1. Agent calls an MCP tool (e.g., send_transaction or tron_send_transaction)
  2. Server opens browser to a local signing page (EVM and TRON each run their own HTTP bridge on a separate port)
  3. User connects wallet and approves the action — in MetaMask/Rabby/etc. for EVM, in TronLink for TRON
  4. Result (address, tx hash, signature) returned to agent

Screenshots below show the EVM approval UI; the TRON UI mirrors the same card layout with TronLink-specific copy and TRX denomination.

Connect WalletSend TransactionSign Message
Connect WalletSend TransactionSign Message

Supported Chains

Built-in RPC URLs for:

  • Ethereum (1)
  • Sepolia (11155111)
  • Polygon (137)
  • Arbitrum One (42161)
  • Optimism (10)
  • Base (8453)
  • Avalanche (43114)
  • BNB Smart Chain (56)

Supported TRON Networks

  • Tron Mainnet
  • Shasta Testnet
  • Nile Testnet

Configuration

Environment variables (optional):

VariableDescriptionDefault
EVM_MCP_PORTEVM HTTP server port3847
EVM_MCP_DEFAULT_CHAINDefault EVM chain ID1
TRON_MCP_PORTTRON HTTP server port3848
TRON_MCP_DEFAULT_NETWORKDefault TRON network (mainnet/shasta/nile)mainnet

Packages

This is a monorepo with three published packages plus one internal one:

PackagePublishedDescription
wallet-signer-coreinternalChain-agnostic primitives (PendingStore, HTTP bridge, errors). Bundled into each chain package at build time — never installed directly.
browser-evm-signernpm + JSRStandalone library — sign EVM transactions via MetaMask/Rabby/any EIP-6963 wallet
browser-tron-signernpm + JSRStandalone library — sign TRON transactions via TronLink
mcp-wallet-signernpmMCP server — exposes the EVM and TRON signers as MCP tools for AI agents

Use the chain-specific packages directly if you want browser-based signing in your own Node.js/Deno app without MCP.

Development

Requires Deno v2.0+.

bash
# Install all dependencies
deno task install:all

# Type check + lint + format check (all packages)
deno task check:all

# Run tests
deno task test:all

# Build all npm packages
deno task build:all

# Format code
deno task fmt

Manual signing CLI

A signer-cli script triggers the same flows that the MCP tools do, but from your shell — useful for smoke-testing against a real wallet without going through an MCP client.

bash
# Discover subcommands
deno task cli                                 # top-level help
deno task cli evm help                        # EVM subcommands
deno task cli tron help                       # TRON subcommands
deno task cli evm send-transaction --help     # subcommand flags

# Examples (each opens a browser; sign in MetaMask / TronLink)
deno task cli evm  connect --chain 1
deno task cli evm  send-transaction --to 0x... --value 1000000000000000000
deno task cli evm  sign-message --message "hello"
deno task cli tron connect --network mainnet
deno task cli tron send-trx --to T... --amount 1000000
deno task cli tron trigger-contract --contract T... \
    --selector 'transfer(address,uint256)' \
    --params '[{"type":"address","value":"T..."},{"type":"uint256","value":"1000000"}]'
deno task cli tron get-balance --address T...   # no browser

The approval URL is always printed up-front, and every browser-interacting subcommand (both chains, every flow except get-balance which doesn't open a browser) accepts --browser <name> and --print:

bash
# Pick a specific browser (the one that has TronLink / MetaMask installed)
deno task cli evm  connect --browser firefox
deno task cli evm  sign-message --message "hi" --browser chrome
deno task cli tron send-trx --to T... --amount 1000000 --browser edge
deno task cli tron trigger-contract --contract T... --selector 'transfer(address,uint256)' \
    --params '[...]' --browser /usr/bin/brave-browser

# Print the URL only — don't auto-open anything. Open it manually wherever you like
deno task cli evm  send-transaction --to 0x... --value 1000 --print
deno task cli evm  sign-typed-data --json typed.json --print
deno task cli tron connect --network shasta --print
deno task cli tron sign-message --message "hello" --print

--browser <name> accepts chrome, firefox, edge, safari, or a binary path. Useful when your system default doesn't have the wallet extension installed.

Per-package deno task trigger ... works too if you're already inside packages/browser-evm-signer/ or packages/browser-tron-signer/.

Project Structure

code
tools/
└── signer-cli.ts            # Root dispatcher → per-package trigger CLIs

packages/
├── wallet-signer-core/      # Chain-agnostic primitives (npm: wallet-signer-core)
│   ├── src/                  # PendingStore, HTTP bridge, errors, browser opener
│   ├── tests/                # Core unit tests
│   └── scripts/build-npm.ts
│
├── browser-evm-signer/      # EVM signing library (npm: browser-evm-signer)
│   ├── src/                  # EVM types, viem transport, EIP-6963 approval UI
│   ├── tools/trigger.ts      # Manual-trigger CLI
│   ├── tests/                # Unit, e2e (HTTP), and e2e-browser (Playwright) tests
│   └── scripts/build-npm.ts
│
├── browser-tron-signer/     # TRON signing library (npm: browser-tron-signer)
│   ├── src/                  # TRON types, TronLink approval UI, TronGrid balance fetch
│   ├── tools/trigger.ts      # Manual-trigger CLI
│   ├── tests/                # Unit, e2e (HTTP), and e2e-browser (Playwright) tests
│   └── scripts/build-npm.ts
│
└── mcp-wallet-signer/       # MCP server layer (npm: mcp-wallet-signer)
    ├── src/                  # MCP tool definitions + CLI entry
    └── scripts/build-npm.ts

A Deno workspace declaration at the root makes each member's import map visible to root-level scripts (notably tools/signer-cli.ts resolving wallet-signer-core).

All packages are built with dnt and use node: builtins (no Deno-specific APIs) so the npm bundles run under Node.js.

License

MIT

常见问题

EVM Wallet Signer 是什么?

透過 EIP-6963 將 EVM 交易導向瀏覽器錢包(如 MetaMask),以完成簽署。

相关 Skills

MCP构建

by anthropics

Universal
热门

聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。

想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。

平台与服务
未扫描171.4k

Slack动图

by anthropics

Universal
热门

面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。

帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。

平台与服务
未扫描171.4k

接口测试套件

by alirezarezvani

Universal
热门

扫描 Next.js、Express、FastAPI、Django REST 的 API 路由,自动生成覆盖鉴权、参数校验、错误码、分页、上传与限流场景的 Vitest 或 Pytest 测试套件。

帮你把API与集成测试自动化跑顺,减少回归漏测;能力全面,尤其适合复杂接口场景的QA团队。

平台与服务
未扫描24.9k

相关 MCP Server

Slack 消息

编辑精选

by Anthropic

热门

Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。

这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。

平台与服务
89.7k

by netdata

热门

io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。

这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。

平台与服务
80.0k

by d4vinci

热门

Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。

这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。

平台与服务
72.9k

评论