EVM Wallet Signer

io.github.nikicatPublished by GitHub account nikicatv0.1.3Updated Oct 24, 2026

Route EVM transactions to browser wallets (MetaMask, etc.) for signing via EIP-6963

VerifiedSTDIODesktop onlyFinanceSecurity & Monitoring

Overview

AI-generated overview

Lets an assistant request EVM wallet connections, transactions, and message signatures that you approve in your own browser wallet.

What you can do
A local stdio MCP server that routes signing requests to a browser wallet such as MetaMask or Rabby through a localhost bridge and approval page. It exposes four tools: connect_wallet returns the address, send_transaction sends value or calls a contract and returns a transaction hash, sign_message performs personal_sign, and sign_typed_data signs EIP-712 typed data. Private keys stay in the browser; each request needs explicit approval in the wallet.
When to use it
Use it when an assistant needs to prepare and submit EVM transactions or signatures while you keep custody of the keys and approve each action yourself. It suits interactive workflows where a wallet prompt per request is acceptable, rather than unattended or automated signing.
Requirements
Runs locally as an npm package, typically started with npx, so Node.js is needed. It spawns a platform-specific browser-web3-signer binary that owns the localhost bridge and approval page, and a browser wallet extension must be installed. Optional environment variables: EVM_MCP_DEFAULT_CHAIN for the default chain ID and EVM_MCP_PORT for the approval UI port.
Before you install
The server can ask your wallet to send transactions and sign messages or typed data, which may move funds or authorize on-chain actions; nothing is signed without your approval in the wallet. The README states the package is superseded by browser-web3-signer and that this repo is now a compatibility shim, and it notes that [email protected] was broken and took [email protected] down with it, so verify the version you install. Balance tools and TRON tools are no longer included.

Installation

In SourceWeft

  1. Open EVM Wallet Signer in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-wallet-signer

[npm version] [License: MIT]

[!WARNING] Superseded by browser-web3-signer — the same browser-wallet signing flow, reimplemented in Rust with a CLI plus Rust/TypeScript/Go libraries. Everything published from this repo is now a thin compatibility shim over it, so existing installs keep working; new code should use browser-web3-signer directly.

Your private keys never leave your browser. Every transaction requires explicit approval in your own wallet (MetaMask, Rabby, TronLink, …).

Most blockchain tooling wants a private key in a config file — full, unsupervised access to your funds. These packages route each request to the browser wallet you already use, so you review and approve it like any other dapp interaction.

Packages

PackageWhat it is now
mcp-wallet-signerMCP stdio server: four signing tools over browser-web3-signer
browser-evm-signerThe old WalletSigner EVM library API, re-backed by the Rust bridge
browser-tron-signerThe same for TRON (TronLink, TRC-20, contract deploys)

All three spawn browser-web3-signer serve, which owns the localhost bridge, the approval page and the browser tab. The binary for your platform is installed as a dependency; nothing else to set up.

MCP server

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

Or, for Claude Desktop / Cursor / Windsurf and any other stdio MCP client:

json
{  "mcpServers": {    "wallet-signer": {      "command": "npx",      "args": ["-y", "mcp-wallet-signer"]    }  }}
ToolDescription
connect_walletConnect a wallet, return the address
send_transactionSend value or call a contract, return the tx hash
sign_messagepersonal_sign a message, return the signature
sign_typed_dataSign EIP-712 typed data, return the signature

EVM_MCP_DEFAULT_CHAIN sets the chain id used when a call omits one (default: 1).

Libraries

ts
import { WalletSigner } from "browser-evm-signer";
const signer = new WalletSigner({ defaultChainId: 8453 });const { address } = await signer.connectWallet();const { txHash } = await signer.sendTransaction({ to: "0x…", value: "1000000000000000000" });

What changed in the shims

  • Gone: PendingStore, pendingStore, createHttpServer, startTestServer, buildConnectUrl, buildSignUrl, openBrowser — the in-process HTTP bridge they drove no longer exists.
  • approvalUrl is now the bridge's base URL. The bridge opens the approval page itself and does not hand the per-request URL back.
  • port (the constructor option) is ignored: the bridge binds its own free port. getPort() / DEFAULT_PORT still resolve, for source compatibility.
  • MCP: the balance tools (get_balance, get_token_balance) and the TRON tools are gone from the MCP server. Balances never needed a wallet — any RPC-reading MCP server or cast call does them without an approval prompt — and TRON signing is a CLI away. WalletSigner.getBalance and .getTokenBalance are untouched in both libraries.
  • Deprecated on npm and JSR. [email protected] never worked at all: its exports pointed at ./esm/mod.js while the tarball shipped ./esm/browser-evm-signer/src/mod.js, which took [email protected] down with it (#2).

The pre-shim Deno implementation — the in-process bridge, the Svelte approval UI, the wallet-signer-core package — is in the history, up to commit 636fd3b.

Development

bash
npm installnpm test     # builds, then runs each package's tests against a fake bridge

Releases are per package: tag <package>@<version> and publish a GitHub release.

License

MIT

Source: README.md at commit 5476879

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.3LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts