approve_token_spending
Approve a spender (contract) to spend tokens on your behalf. Required before interacting with DEXes, lending protocols, etc.
Read balances, blocks and contract state across EVM networks, and — once a wallet is configured — transfer tokens, call write functions and sign EIP-712 payloads.
LABSCO SUMMARY
Balances, ENS lookups, receipts and Multicall3 batching run against public RPC, so an agent can inspect chain state without ever holding a key. The moment you want transfer_native, write_contract or a signature, that same server needs a private key or mnemonic in its environment, and the tool list draws no line between the two halves at call time. ABI auto-fetch smooths over contracts you did not write, but it depends on ETHERSCAN_API_KEY and falls back to common functions when a contract is unverified.
An RPC and wallet client for EVM networks: chain and block reads, ERC20, ERC721 and ERC1155 balances, contract calls in both directions, and message signing.
For the read half, a reachable network and nothing else. Transfers, approvals, write_contract and both signing tools need a wallet configured from a private key or mnemonic, and automatic ABI lookup needs ETHERSCAN_API_KEY.
One command — npx @mcpdotdirect/evm-mcp-server
USE CASES
Native balance, ERC20 balances and ERC1155 balances by token id are separate calls, so a portfolio view means several reads — batch them into one RPC request rather than paying the round trips.
The transaction tells you what was submitted, the receipt tells you whether it was mined and what gas it burned, and the wait call blocks until the number of confirmations you decide is enough.
Pull the ABI from a block explorer to see what the contract exposes, then call its read-only functions. Unverified contracts fall back to the common functions rather than failing outright.
Native and ERC20 transfers both run from the configured wallet, and anything that hands spending power to a protocol needs an approval first. This is the half of the tool list that requires a private key or mnemonic to be present.
An arbitrary signed message covers SIWE-style authentication; EIP-712 structured data covers permits, meta-transactions and anything a protocol expects in a typed envelope. Both use the configured wallet.
Base, standard and fast prices come back together, alongside the chain's current block, so an agent can decide whether to send now or wait without leaving the tool loop.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
approve_token_spendingApprove a spender (contract) to spend tokens on your behalf. Required before interacting with DEXes, lending protocols, etc.
get_allowanceCheck the allowance granted to a spender for a token. This tells you how much of a token an address can spend on your behalf.
get_balanceGet the native token balance (ETH, MATIC, etc.) for an address
get_blockGet block details by block number or hash
get_chain_infoGet information about an EVM network: chain ID, current block number, and RPC endpoint
get_contract_abiFetch a contract's full ABI from Etherscan/block explorers. Use this to understand verified contracts before interacting. Requires ETHERSCAN_API_KEY. Supports 30+ EVM networks. Works best with verified contracts on block explorers.
get_erc1155_balanceGet ERC1155 token balance for an address
get_gas_priceGet current gas prices (base fee, standard, and fast) for a network
get_latest_blockGet the latest block from the network
get_nft_infoGet information about an ERC721 NFT including metadata URI
get_supported_networksGet a list of all supported EVM networks
get_token_balanceGet the ERC20 token balance for an address
get_transactionGet transaction details by transaction hash
get_transaction_receiptGet transaction receipt (confirmation status, gas used, logs). Use this to check if a transaction has been confirmed.
get_wallet_addressGet the address of the configured wallet. Use this to verify which wallet is active.
lookup_ens_addressLookup the ENS name for an Ethereum address (reverse resolution)
multicallBatch multiple contract read calls into a single RPC request. Significantly reduces latency and RPC usage when querying multiple functions. Uses the Multicall3 contract deployed on all major networks. Perfect for portfolio analysis, price aggregation, and querying multiple contract states efficiently.
read_contractCall read-only functions on a smart contract. Automatically fetches ABI from block explorer if not provided (requires ETHERSCAN_API_KEY). Falls back to common functions if contract is not verified. Use this to query contract state and data.
resolve_ens_nameResolve an ENS name to an Ethereum address
sign_messageSign an arbitrary message using the configured wallet. Useful for authentication (SIWE), meta-transactions, and off-chain signatures. The signature can be verified on-chain or off-chain.
sign_typed_dataSign structured data (EIP-712) using the configured wallet. Used for gasless transactions, meta-transactions, permit signatures, and protocol-specific signatures. The signature follows the EIP-712 standard.
transfer_erc20Transfer ERC20 tokens to an address. Uses the configured wallet.
transfer_nativeTransfer native tokens (ETH, MATIC, etc.) to an address. Uses the configured wallet.
wait_for_transactionWait for a transaction to be confirmed (mined). Polls the network until confirmation.
write_contractExecute state-changing functions on a smart contract. Automatically fetches ABI from block explorer if not provided (requires ETHERSCAN_API_KEY). Use this to call any write function on verified contracts. Requires wallet to be configured (via private key or mnemonic).
BEFORE YOU INSTALL
25 tools when we connected. All tools register, but the six wallet tools need EVM_PRIVATE_KEY or EVM_MNEMONIC, and get_contract_abi needs ETHERSCAN_API_KEY.
CONTEXT COST
Rated by the size of the 25 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx @mcpdotdirect/evm-mcp-server{
"mcpServers": {
"evm-mcp-server": {
"command": "npx",
"args": [
"-y",
"@mcpdotdirect/evm-mcp-server"
]
},
"evm-mcp-http": {
"command": "npx",
"args": [
"-y",
"@mcpdotdirect/evm-mcp-server",
"--http"
]
}
}
}claude mcp add evm-mcp-server npx @mcpdotdirect/evm-mcp-server{
"mcpServers": {
"evm-mcp-sse": {
"url": "http://localhost:3001/sse"
}
}
}