Skip to main content
Glama
aiexp1

Tanod MCP server

chainpeek: a read-only contract call (eth_call) on Ethereum, Base or Robinhood Chain

eth_call
Read-onlyIdempotent

Call a smart contract function read-only on Ethereum, Base, or Robinhood Chain, returning raw ABI-encoded data without signing or sending anything.

Instructions

chainpeek: Call a smart contract function read-only on Ethereum, Base or Robinhood Chain. For gas units use estimate_gas; for a raw storage slot use get_storage_at. Returns the raw ABI-encoded return data (result, result_bytes) of eth_call against to with your calldata at latest, pending, finalized or a block number; nothing is signed or sent. The result is not decoded (decode_calldata decodes calldata; the ABI is yours). A call that reverts is a 422 reverted (not charged); results over 32 kB are a 502. Old blocks need an archive node and may fail. Ethereum, Base and Robinhood only; read-only: nothing is signed or sent. RPC reads are cached up to 30 s. A bad address, hash, hex string, block or range is a 422 before any payment (not charged). Typically under 1 s. Price: USD 0.002. Free: 10 chain reads per IP per UTC day. Docs: https://tanod.dev/learn/ethereum-rpc-reads-api.html

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toYesContract (or account) to call.
dataYesABI-encoded calldata, 0x-hex with an even number of digits, at most 8 kB (4-byte selector + arguments; 0x18160ddd is totalSupply()).
blockNolatest (default), pending, finalized or a block number (older blocks need an archive node and may fail).
chainYesethereum, base or robinhood (Robinhood Chain, chain id 4663).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNo
noteNo
blockNo
chainNo
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
resultNo
is_emptyNo
selectorNo
result_bytesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (which already cover readOnly/idempotent/non-destructive) with operational detail: nothing is signed or sent, a revert is a 422 that is not charged, oversized results are a 502, old blocks require an archive node and may fail, reads are cached up to 30 s, typical latency under 1 s, and the price/free-tier model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then alternatives, then payload semantics, then error/pricing facts — a sensible order. Minor waste from restating the chain list and the read-only/nothing-signed assertion twice ('nothing is signed or sent' appears in two separate clauses).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, the description correctly avoids enumerating return fields but still warns that `result`/`result_bytes` are raw ABI-encoded and undecoded. Error codes, payment behavior, caching and latency are all covered, so an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by explaining block-tag semantics and the archive-node failure mode for old block numbers, plus the meaning of `to` as contract-or-account. It does not restate the field-level hex patterns, which the schema already carries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Call a smart contract function read-only') with an explicit scope of supported chains. It actively distinguishes itself from siblings by naming estimate_gas, get_storage_at and decode_calldata, so an agent can route without opening any other schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not paths: use estimate_gas for gas units, get_storage_at for a raw storage slot. It also pre-empts the most likely mis-selection by clarifying that the result is not decoded and that decode_calldata handles calldata, not return values. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools