Skip to content
For developers

Read every EVM chain, including Ethereum, Base, Arbitrum, BNB Chain, and Optimism contracts with one expression.

Human-readable queries, auto-resolved ABIs, proxy-aware — on every EVM chain.

Without evmquery · viem
const abi = parseAbi([
  "function allowance(address, address) view returns (uint256)",
]);
const contract = getContract({ address: USDC, abi, client });
const allowance = await contract.read.allowance([vitalik, router]);
With evmquery
await q("usdc.allowance(vitalik, router)")

Free to start — no credit card

Why this exists

Reading a contract shouldn't cost you a day.

You know this loop. You just want one value. You get a week of plumbing.

ABI sprawl

Every contract needs its ABI. Every proxy needs its implementation. Every chain has its quirks. You end up checking in JSON files and writing loaders.

RPC plumbing

Batching, retries, rate limits, fallback providers. None of it is your product. All of it is on your plate.

Raw JSON in the prompt

Feeding Claude or Cursor the raw RPC response burns context and confuses the model. You end up hand-rolling decoders just to make an agent useful.

One-off glue per stack

TypeScript SDK here, Python script there, a Postman collection for ops. Same data, five implementations, all drifting.

What evmquery does

One read layer. Every surface you already work in.

Point your client at one URL. We handle ABIs, proxies, batching, typing, and multi-chain routing. You write expressions.

  • Auto-resolved ABIs

    Verified contracts just work. Proxies resolve to their implementation. No local files, no manual wiring.

  • Typed results

    BigInt, address, struct — decoded and ready. No ABI-decoder boilerplate, no loose any-types.

  • Auto-batched, cross-chain

    One expression touches N contracts across N chains and returns in a single round-trip.

  • MCP, REST, and n8n

    Drop the MCP URL into Claude or Cursor. Call the REST API from your code. Wire onchain reads into an n8n workflow. Same query language everywhere.

  • OIDC sign-in

    No plugins, no SDKs. Your MCP client authenticates automatically; your REST service uses an API key.

bash
								claude mcp add evmquery \
  --transport http \
  https://api.evmquery.com/mcp
							
Install once. Works in Claude Code, Cursor, VS Code, Windsurf.

Everything you reach for, in one expression.

Read any EVM contract without wiring providers, ABIs, or decoders by hand.

Any contract

Read state by address. No ABI files, ever.

usdc.balanceOf(vitalik)
2,847.19

Proxy-aware

EIP-1967, transparent, beacon — resolved automatically.

proxy 0xA0b86a…EB48
impl 0x43506…8C9D

Typed results

BigInt, address, struct — decoded and ready.

{
  "result": "2847.193021",
  "type": "uint256",
  "chain": "evm_ethereum"
}

Cross-protocol in one call

Aave, Uniswap, Curve in a single query — independent reads auto-batched into one Multicall3 round.

q({
  health: formatUnits(
    aave.getUserAccountData(me).healthFactor, 18),
  position: uniswap.positions(solInt(42)),
})

Drop it in your agent

MCP for Claude, Cursor, VS Code, Windsurf. REST for everything else.

claude mcp add evmquery \
  --transport http \
  https://api.evmquery.com/mcp

Frequently asked questions

Ethereum, Base, and BNB Smart Chain today. More EVM chains are being added actively — follow the changelog or ping us if you need a specific one prioritised.

No. evmquery auto-resolves ABIs for verified contracts on every supported chain. For unverified contracts, pass an ABI inline in the schema field of your query.

For MCP connections, evmquery uses OIDC — your client (Claude Code, Cursor, VS Code, Windsurf) handles sign-in automatically. For REST, you authenticate with an API key over HTTPS. Generate and rotate keys from the dashboard.

Any client that speaks the Model Context Protocol. Tested with Claude Code, Cursor, VS Code, Windsurf, and Zed. Setup is a single URL — no plugins or SDKs.

Yes. The evmquery n8n community node lets you read onchain state as a workflow step. Wire it into any n8n flow — triggers, Slack alerts, Airtable syncs, you name it.

Rate limits are applied per API key. Auto-batching means one expression touching multiple contracts counts as one request. Median response time is under 50ms for single-contract calls, under 200ms for cross-protocol reads.

Ship the integration today.

Free tier included. No credit card. Your first expression runs in under a minute.