evmquery-mcp
Read any contract on any EVM chain through a single MCP endpoint.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only
What it can do
- Execute Query: Execute a CEL expression against EVM smart contracts. Returns the query result, execution metadata, and credits consumed. Contract names from schema.contracts become variables in the ex
- Describe Schema: Describe the available methods, properties, and context for the given schema. Returns all callable methods on each contract, plus available CEL helper functions, list macros, and type
What data it sees
Do you need an account
No: the server works without sign-in
Read any contract on any EVM chain through a single MCP endpoint.
Ask questions in plain English and evmquery resolves the right contract, ABI, and call for you — then returns a clean, typed answer.
What it does
- Resolves contracts automatically
- Calls any view function without you wiring up an ABI
- Returns structured results ready for the next tool in your chain
Good for
- Wallet/allowance/balance checks
- Token metadata (ERC-20, ERC-721, ERC-1155)
- Quick reads against unknown or new contracts during research
Currently supported chains
- Ethereum Mainnet
- Base
- BNB Smart Chain
Server tool list (2)
Raw names from tools/list. Only developers need these.
| execute_query | Execute a CEL expression against EVM smart contracts. Returns the query result, execution metadata, and credits consumed. Contract names from schema.contracts become variables in the expression. Use describe_schema first to discover callable methods and available CEL functions (formatUnits, cel.bind, list macros, etc.). Example — read an ERC-20 balance: chain: 'evm_ethereum' schema: { contracts: { usdc: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' }, context: { wallet: 'sol_address' } } context: { wallet: '0x1234...' } expression: 'formatUnits(usdc.balanceOf(wallet), usdc.decimals())' Pricing: 1 credit for pure CEL, otherwise totalCalls + totalRounds credits (e.g. a single balanceOf costs 2 credits). Response format: result value with type annotation, block metadata (block number, on-chain calls, execution rounds) when applicable, and credits consumed. |
| describe_schema | Describe the available methods, properties, and context for the given schema. Returns all callable methods on each contract, plus available CEL helper functions, list macros, and type definitions. Call this before writing expressions to discover what is queryable. Common patterns: ERC-20 balance: formatUnits(usdc.balanceOf(wallet), usdc.decimals()) Multi-wallet balances: wallets.map(w, formatUnits(token.balanceOf(w), token.decimals())) Filter non-zero holders: wallets.filter(w, token.balanceOf(w) > solInt(0)) Check all holders meet threshold: wallets.all(w, token.balanceOf(w) > parseUnits('100', 18)) Any wallet has balance: wallets.exists(w, token.balanceOf(w) > solInt(0)) Bind intermediate values: cel.bind(supply, token.totalSupply(), formatUnits(supply, token.decimals())) Native ETH balance: solAddress('0x...').balance() Is zero address: isZeroAddress(owner) |