ankr-mcp provides 21 well-named, read-only blockchain query tools with complete JSON schemas generated from Zod validators. All tools have descriptions (avg ~80 chars) and typed parameters. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool, dependencies between related tools, or recovery hints for common failures. Parameter descriptions are minimal (often 1-2 sentences). Output schemas are not documented in the tool definitions, LLMs cannot predict response structure. Error handling is absent from tool definitions; no guidance on retryability or user-fixable vs fatal errors. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Composition is strong: tools are single-purpose and chainable (e.g., get_token_balances → get_token_price). Naming follows verb_noun convention consistently.
Gets a breakdown of how a token's price is derived (liquidity pools, pairs). Premium API.
Gets the historical balance of a wallet at a specific block height. Premium/Early Access API.
Gets blockchain statistics including total transactions, block time, and native coin price.
Gets full block data for a specified block range on a blockchain.
Gets a list of all currencies (tokens) available on a specific blockchain.
Gets a list of all blockchains a wallet address has interacted with.
Output schemas not documented. Tool definitions lack return type documentation, forcing LLMs to guess response structure and preventing downstream tool chaining validation.
Descriptions lack LLM-optimized guidance. Descriptions are terse (avg 60 chars) and do not explain WHEN to use each tool, dependencies between related tools (e.g., get_token_balances vs get_token_price), or recovery hints for API failures.
No error handling guidance in tool definitions. Tools do not document which errors are retryable, which are user-fixable, or which are fatal. No recovery hints (e.g., 'If address not found, try search_addresses()' or 'Premium API, upgrade account').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Gets internal transactions (contract-to-contract calls) within a specific block. Premium API.
Gets internal transactions triggered by a specific parent transaction. Premium API.
Gets historical event log data for a block range, with optional filtering by address and topics.
Gets all wallet addresses that hold NFTs from a specific collection. Premium API.
Gets metadata (name, description, image, traits) for a specific NFT by contract address and token ID.
Gets NFT transfer history for specified address(es). Premium API.
Gets all NFTs owned by a specific wallet address across blockchains.
Gets all token balances for a wallet address on a specific blockchain. Returns coin and token balances with USD values.
Gets the list of holder addresses for a specific token. Premium API.
Gets the number of token holders with historical count data. Premium API.
Gets the current USD price for a specific token. Omit contractAddress for native coin price.
Gets historical token price data over time. Premium API.
Gets token transfer history for one or more addresses across blockchains. Premium API.
Gets all transactions for a wallet or contract address. Premium API.
Gets details of a transaction by its hash. Can search across multiple blockchains.
No tool annotations despite all tools being read-only. Missing readOnlyHint annotations prevent clients from optimizing caching, retry logic, and safety checks.
Parameter descriptions are minimal. Many parameters (e.g., 'blockchain', 'pageSize', 'fromBlock') lack format constraints, valid ranges, or examples. LLMs cannot infer whether 'blockchain' accepts 'eth' or 'ethereum' or 'Ethereum'.