Non-custodial burner wallet for AI agents: make a wallet, check balance, send, swap.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
A security suite for AI agents β the seatbelt that catches the dangerous thing BEFORE it happens. Three guards, each callable on its own (and as MCP tools), pairing with any wallet or identity stack:
preflight(tx) β decode an unsigned transaction and flag drains before signing (unlimited/large
approval, approve-all, token & NFT transferFrom, proxy upgrade, on-chain permit, on-chain Permit2
approve/permit/transferFrom, approvals hidden in multicall incl. Uniswap router batches and
Multicall3 aggregate/aggregate3/aggregate3Value (the batch helper on every EVM chain), approvals
wrapped in ERC-4337/smart-account execute/executeBatch, Gnosis Safe multiSend/execTransaction and DSProxy
execute, drains routed through the Uniswap Universal Router (Permit2 permit/transferFrom commands
incl. sub-plans), 1inch AggregationRouter v5 swap() with redirected output or zero slippage,
0x ExchangeProxy transformERC20() with zero slippage, EIP-7702 account delegation, will-revert).inspect_typed_data(td) β catch permit-phishing in an EIP-712 message before the agent signs it
(ERC-2612, Uniswap Permit2 incl. SignatureTransfer + witness variants, DAI-style permits) and Seaport
orders that give assets away β zero consideration, proceeds routed to a third party, or hidden in a
BulkOrder tree.check_action(action, policy) β enforce allow/forbid + value/recipient limits before the agent acts.All three fail safe and are guards, not guarantees. Also bundled: a non-custodial multi-chain wallet (burner, balance, send, swap) β the agent holds its own key and signs locally. No MetaMask, no account, no custody.
Bitcoin/Solana support is optional: pip install "chain-signer[all]".
That's the wedge: the drain gets flagged before you'd ever sign it β no key, no funds, no network.
Full runnable demos are in the repo: examples/agent_safety_demo.py (all three guards stop three
real attacks) and examples/quickstart.py (wallet) β clone to run them, or just import as above.
Before an agent signs, hand the unsigned tx to preflight() β it decodes the calldata and returns
the risks, or use assert_safe() to hard-stop on a HIGH flag. Offline, no network, never raises.
What it flags today: unlimited/large approval, increaseAllowance, setApprovalForAll,
ERC-20 transferFrom + ERC-721/1155 safeTransferFrom (token & NFT drains), ERC-777 authorizeOperator/operatorSend
(operator-grant + operator-pull drains), on-chain ERC-2612 and DAI-style permit,
on-chain Permit2 approve/permit/transferFrom (single and batch β the dominant approval router:
unlimited uint160 allowance + drain pull) plus Permit2 SignatureTransfer permit(Witness)TransferFrom
(the one-shot signed-permit pull intent/filler protocols use), proxy upgradeTo/upgradeToAndCall, approvals hidden inside multicall (all router
variants, nested) and Multicall3 aggregate/aggregate3/aggregate3Value (the canonical batch
helper deployed at one address on every EVM chain), approvals wrapped in ERC-4337/smart-account execute/executeBatch, Gnosis Safe
multiSend/execTransaction, or DSProxy execute(target,data)/execute(code,data) (decoded and recursed),
drains routed through the Uniswap Universal Router
(execute(commands,inputs) β Permit2 permit/transferFrom commands, batch and EXECUTE_SUB_PLAN),
EIP-7702 account delegation (the "wallet upgrade" drainer), large native value,
opaque calldata, malformed calls, and will-revert (with a sim hook).
Honest limits (read these): this is STATIC analysis β it decodes calldata and matches known drain
patterns. It is NOT a transaction simulator: it won't catch a novel/obfuscated drain it can't decode
(those get a low-severity "unknown" flag, not a block), and simulation-based scanners go deeper there.
Safety coverage is EVM-only today (no Solana/Bitcoin tx analysis). And it is not yet field-proven at
scale. A first-line guard for known patterns β not a guarantee. Pair it with simulation + human
review for high-value actions.
A drain doesn't need a transaction. A dApp can ask the agent to sign an EIP-712 message β
most dangerously a permit granting an unlimited token allowance, which preflight (a tx check)
can't see. inspect_typed_data() catches it before the agent signs:
Covers all three major permit shapes: ERC-2612, Uniswap Permit2 (PermitSingle/PermitBatch, plus
SignatureTransfer and the witness variants intent protocols use), and DAI-style (allowed: true),
plus Seaport marketplace orders that hand assets over for nothing β zero consideration, proceeds
routed to a third party while your asset leaves, or the same giveaway buried in a BulkOrder merkle tree.
Offline, never raises.
inspect_typed_data only protects when the agent remembers to call it first β sign_typed_data
alone will happily sign a permit-phishing message. guarded_sign_typed_data() composes the two so
signing is screened by default: it inspects, then refuses to sign a HIGH-risk drain.
On a clean message the signature is byte-identical to sign_typed_data; pass force=True to override.
Identity tells you who the agent is; it doesn't stop a bad action. check_action() enforces a
policy on a proposed tool call before it runs β fail-safe (denies on unreadable input):
All three guards are exposed as MCP tools (preflight, inspect_signature, check_action) β any
agent runtime (Claude, Cursor, β¦) can call them directly, read-only, no key.
What's caught and what isn't β the honest threat-coverage map: docs/THREAT-COVERAGE.md.
preflight(tx) / assert_safe(tx) β decode an unsigned tx and flag drain patterns before signing.inspect_typed_data(td) β flag permit-phishing in an EIP-712 message before the agent signs it.guarded_sign_typed_data(w, domain, types, message, primary_type) β screen then sign; refuses a drain.check_action(action, policy) β enforce allow/forbid + value/recipient limits before the agent acts.burner() β a fresh wallet for a one-off task; discard it when done.restore(key) β reload a wallet later from its exported private key (same key β same address).send_ether(w, to, amount) β send in ETH (not wei); nonce, gas, and broadcast handled for you.get_balance(w) β live balance from the chain (Etherscan v2 indexer, not a flaky public RPC).swap(...) β token swaps via 0x/Paraswap.[all] extra.The private key is generated/loaded locally, used only to sign, and never logged, returned, or stored by this library. You hold the key; we never touch your funds. That is the whole design.
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/chain-signer)<a href="https://allmcps.com/mcp/chain-signer"><img src="https://allmcps.com/api/badge/chain-signer?style=directory" alt="Chain Signer on AllMCPs" /></a>