Etherscan MCP — multichain block-explorer API (Etherscan V2). Provides access to 50+ EVM chains (Ethereum, Polygon, BSC, Base, Arbitrum, Optimism, Avalanche, etc.) under a single API key.
Server defines 5 tools with complete input schemas and descriptions. All tools follow verb_noun naming (get_*, list_). Descriptions are adequate (100-200 chars) and explain purpose clearly. However, output schemas are completely undocumented, LLMs cannot predict response structure. Parameter descriptions lack format constraints (e.g., address format, chain ID ranges). No error handling guidance. Missing tool annotations (readOnlyHint). Composition is sound: each tool has one responsibility, and chain parameters enable multi-chain support.
Native-token balance for an address on a supported EVM chain. Defaults to Ethereum mainnet. Accepts chain by slug (ethereum, polygon, bsc, base, arbitrum, optimism, avalanche, fantom, gnosis, linea, scroll, zksync, blast, mantle) or numeric chain ID.
Verified contract ABI as JSON (if the contract is verified on Etherscan).
Verified contract source code, compiler version, optimization settings, and license.
ERC-20 token balance for an address against a specific token contract.
List transactions for an address. type controls which list: "normal" (regular EOA txs), "internal" (contract-internal value transfers), "erc20" (ERC-20 transfers), "erc721" (NFT transfers), "erc1155" (multi-token transfers).
Output schemas completely undocumented. LLMs cannot predict response structure, field names, or types. This forces agents to guess at downstream field mappings and risks hallucinated field access.
Parameter descriptions lack format constraints. 'address' should specify '0x-prefixed hex string, 42 chars'. 'chain' should document valid slugs and numeric ID ranges. 'offset' and 'page' lack min/max bounds.
No error handling guidance. If an address is invalid, contract not verified, or API rate limit hit, LLMs receive no recovery instructions. Errors should guide next steps (e.g., 'Try a different chain' or 'Retry in 60 seconds').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Missing tool annotations. All tools are read-only (no state mutation), but readOnlyHint is not declared. This prevents agents from reasoning about safety and retry semantics.
list_transactions lacks pagination guidance in description. With default limit=25 and max=10000, LLMs may not understand when to paginate or how to iterate. Should state: 'Returns up to 10,000 results; use page/offset for pagination.'