Skip to content

EVM-MCP

Source kind: local MCP (mcpdotdirect/evm-mcp via stdio) · Networks: any EVM chain with an RPC URL · KH routing: annotation overrides

evm-mcp ships ~16 tools. The frequently-used:

ToolDescription
evm_eth_callGeneric JSON-RPC call against any contract
evm_eth_estimateGasEstimate gas for a tx
evm_eth_getBalanceNative balance for an address
evm_eth_getCodeContract code at an address
evm_resolve_ensENS name → address (mainnet)
evm_lookup_ensReverse — address → ENS name
evm_erc20_balance_ofERC-20 balance
evm_erc20_transferERC-20 transfer (mutates)
evm_erc721_owner_ofERC-721 owner
evm_erc721_transfer_fromERC-721 transfer (mutates)

evm-mcp’s upstream annotations don’t always classify reads vs writes correctly. Talos applies an annotation override layer (src/mcp-host/overrides.ts) that re-marks specific tools — e.g. eth_call is forced readonly: true, erc20_transfer is forced mutates: true.

This is an explicit table, not a regex — false-positives in either direction are a security issue.

EVM-MCP is the mutator path for arbitrary contracts. Blockscout is read-only. If you need to call a custom contract function with custom calldata, you go through evm_eth_call (read) or wrap it in your own native source (write).

Each chain needs a URL. Set in .env:

Terminal window
RPC_URL_SEPOLIA=https://sepolia.gateway.tenderly.co
RPC_URL_BASE_SEPOLIA=https://base-sepolia.public.blastapi.io
RPC_URL_MAINNET=https://eth.gateway.tenderly.co # mainnet reads only — no signing

Talos’s src/wallet/ module reads these at chain-context construction.