The simulation tools use only `eth_call`, `eth_estimateGas` and `debug_traceCall` where the provider supports it — they never sign or send. What comes back is whether the transaction would succeed, the revert reason in plain language, estimated gas and the balance and state changes. By default the sender is funded with virtual ETH so you can simulate from any address without holding its keys, and real state diffs are used when tracing is available rather than being inferred. Address aliases are the quality-of-life piece that makes the rest usable in conversation.
An MCP server exposing EVM JSON-RPC methods to an AI coding environment, working with Infura, Alchemy, QuickNode, local nodes or any custom RPC, across Ethereum, Polygon, Arbitrum, Optimism, BSC, Avalanche, Base and any chain you register yourself. Address aliases mean you can say "my wallet" or `USDC` instead of pasting hex.
- Chain and account reads: latest block, balance, nonce, block and transaction by identifier, receipts, contract bytecode and storage — `eth_blockNumber`, `eth_getBalance`, `eth_getTransactionCount`, `eth_getBlockByNumber`, `eth_getTransactionByHash`, `eth_getTransactionReceipt`, `eth_getCode`, `eth_getStorageAt`
- Contract interaction and gas: execute a call, estimate gas, read the gas price, and broadcast a signed transaction — `eth_call`, `eth_estimateGas`, `eth_gasPrice`, `eth_sendRawTransaction`
- Read-only simulation against forked or overridden state that never broadcasts: native transfers, ERC20 transfers with human amounts, encoded contract calls and raw transactions, plus a pure calldata encoder — `simulate_native_transfer`, `simulate_erc20_transfer`, `simulate_contract_call`, `simulate_transaction`, `encode_function_data`
- Event logs with block range, address and topic filters — `eth_getLogs`
- Network and client introspection, plus discovery of what you have configured — `eth_chainId`, `net_version`, `net_peerCount`, `web3_clientVersion`, `web3_sha3`, `list_supported_networks`, `list_known_addresses`
- Alias resolution through `KNOWN_ADDRESSES` and `WALLET_ADDRESSES`, and ENS names in the simulation tools
At least one of: a provider API key (`INFURA_API_KEY` or `ALCHEMY_API_KEY`), a custom provider in `CUSTOM_PROVIDERS`, or a custom network with an rpcUrl in `CUSTOM_NETWORKS`. Optional: `DEFAULT_NETWORK`, `DEFAULT_PROVIDER` and `RPC_PROVIDER_ORDER` for fallback order, plus `KNOWN_ADDRESSES` and `WALLET_ADDRESSES` for aliases. Node.js 18 or newer and npm; install globally with `npm install -g @jamesanz/evm-mcp` or build from a clone, and Cursor has a one-click install link. Configuration changes need a server restart. The package is `@jamesanz/evm-mcp` (2.0.0 in package.json).
One command plus a key — npm install -g @jamesanz/evm-mcp, then supply credentials
