eth_blockNumberLABSCO SUMMARY
Simulation tells you why it would revert, in English.
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.
What it is
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.
What you get
- 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_ADDRESSESandWALLET_ADDRESSES, and ENS names in the simulation tools
Requirements
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).
Setup effort
One command plus a key — npm install -g @jamesanz/evm-mcp, then supply credentials
USE CASES
Finding out why a transaction fails before sending it
Simulate the call against current state and read back the revert reason and estimated gas instead of losing the fee.
Checking a token transfer in human terms
Simulate a transfer of 10 USDC to an ENS name and read the resulting balance changes, with decimals handled for you.
Investigating an address or a contract
Read its balance, nonce and bytecode, then pull the transaction and receipt behind a hash.
Tracing contract events over a block range
Query logs by address and topic between two blocks, on whichever configured network you name.
Working across chains without pasting hex
Register wallets and tokens as aliases, then refer to them by name in balance, code and call tools.
26 tools
Listed in project docs. Your client may show a different list.
eth_getBalanceeth_getTransactionCounteth_getBlockByNumbereth_getTransactionByHasheth_getTransactionReceipteth_getCodeeth_getStorageAteth_calleth_estimateGaseth_sendRawTransactioneth_gasPricesimulate_native_transfersimulate_erc20_transfersimulate_contract_callsimulate_transactionencode_function_dataeth_getLogslist_supported_networkslist_known_addresseseth_chainIdnet_versionnet_listeningnet_peerCountweb3_clientVersionweb3_sha3BEFORE YOU INSTALL
What to know first
Tools you get
26 tools named in the project's documentation.
Requires
- Node.js 18+ and npm
- One provider key: INFURA_API_KEY or ALCHEMY_API_KEY (or a custom provider / network with its own RPC URL)
INSTALLATION
Connect your client
Server setup
npm install -g @jamesanz/evm-mcpMCP Clients
Cursor — one-click
cursor://anysphere.cursor-deeplink/mcp/install?name=evm-mcp&config=eyJldm0tbWNwIjp7ImNvbW1hbmQiOiJucHgiLCJhcmdzIjpbIi15IiwiQGphbWVzYW56L2V2bS1tY3AiXX19The one-click link installs evm-mcp with no env block. Afterwards, add INFURA_API_KEY or ALCHEMY_API_KEY (or a CUSTOM_PROVIDERS / CUSTOM_NETWORKS entry with an RPC URL) under env in the evm-mcp entry of Cursor's MCP settings.
The server needs at least one provider key: INFURA_API_KEY or ALCHEMY_API_KEY (or a CUSTOM_PROVIDERS / CUSTOM_NETWORKS entry with an RPC URL).
Claude Desktop
git clone https://github.com/JamesANZ/evm-mcp.git
cd evm-mcp
npm install
npm run build{
"mcpServers": {
"evm-mcp": {
"command": "node",
"args": [
"<YOUR_PATH_TO_EVM_MCP>/build/index.js"
],
"env": {
"INFURA_API_KEY": "<YOUR_INFURA_API_KEY>",
"DEFAULT_NETWORK": "ethereum",
"DEFAULT_PROVIDER": "infura",
"RPC_PROVIDER_ORDER": "infura,alchemy"
}
}
}
}<YOUR_PATH_TO_EVM_MCP> is the full path of your evm-mcp clone, and <YOUR_INFURA_API_KEY> is your Infura key — or swap in ALCHEMY_API_KEY and set DEFAULT_PROVIDER to alchemy. Restart Claude Desktop afterwards.
The server needs at least one provider key: INFURA_API_KEY or ALCHEMY_API_KEY (or a CUSTOM_PROVIDERS / CUSTOM_NETWORKS entry with an RPC URL).