MCP server for Ethereum and BSC blockchain data via Etherscan API with multi-chain support, whale detection, and transaction analysis
6 tools with basic-to-moderate quality. All tools have descriptions (meeting minimum bar), and input schemas are present with types and parameter descriptions. However, descriptions are generic and brief (averaging ~100 chars), lacking the LLM-optimized depth (50-200 chars baseline) that helps agents select and invoke correctly. Output schemas are entirely undocumented, the source shows tool registration but no explicit return type specifications, forcing LLMs to infer results. Parameter constraints are minimal: 'chain' accepts free-form strings with only a default of 'ethereum', not enums; block numbers and pagination parameters lack min/max bounds. Error handling is invisible in the provided code, no recovery guidance, no categorization of retryable vs fatal errors. Security: API keys (ETHERSCAN_API_KEY, BSCSCAN_API_KEY) are loaded from environment (good), but there's no evidence of input validation, rate limiting enforcement, or audit logging in the snippet. Tool composition is reasonable, each tool has a single responsibility, but downstream tool chaining is not evident. The 'analyze_whale' tool is the most sophisticated, promising 'comprehensive' analysis, but its return structure is not documented.
Comprehensive whale analysis of an address. Analyzes an address to determine whale classification, activity patterns, and risk metrics based on balance, transaction history, and behavior.
Get native token balance for an address.
Get ABI for a verified smart contract.
Get current gas prices on the network.
Get ERC20/BEP20 token transfer events for an address.
Get transaction history for an address.
Output schemas completely undocumented. No source code shows return type definitions, field names, or structures for any of the 6 tools. LLMs cannot plan downstream calls or extract data without knowing what fields to expect.
'chain' parameter accepts free-form strings ('ethereum', 'bsc') with no enum constraint. Description says 'Blockchain network (ethereum, bsc)' but no formal enum forces LLMs to hallucinate alternative chain names or use bare strings. Should declare enum: ['ethereum', 'bsc'].
Numeric parameters (start_block, end_block, page, offset) lack min/max bounds in schema or description. 'end_block' defaults to 99999999, reasonable for Ethereum, but no documentation warns LLMs not to request blocks beyond the current chain tip. Unbounded ranges invite invalid queries.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No error handling documented. If an address is invalid, API key is missing, or rate limit is hit, what does the tool return? No recovery guidance (e.g., 'Try again in 60 seconds' for rate limits). LLMs cannot distinguish retryable from fatal errors.
Descriptions are generic and brief (average ~55-100 chars). 'Get native token balance for an address' lacks context: WHEN should the LLM call this vs another tool? WHAT does 'native token' mean to a non-crypto user? Does it return wei or ether? Descriptions should be 50-200 chars and answer these questions.
'analyze_whale' description promises 'whale classification, activity patterns, and risk metrics' but does not document the output structure. What fields does it return? How is 'whale class' encoded? Is it a categorical label or a score? LLMs cannot chain results without schema visibility.
Pagination parameters present (page, offset) but no documentation of total results, next_cursor, or result limits. Can the tool return 10,000 transactions? How many? Without pagination guidance, agents cannot safely retrieve large datasets.
No input validation or address format guidance. 'address' parameter described as 'Blockchain address' but no constraints: is it a 42-char hex string (Ethereum) or variable length (other chains)? No regex pattern, length bounds, or checksum validation documented. Invalid addresses will silently fail.