A Model Context Protocol (MCP) server that provides access to ChainFETCH API for AI-powered Ethereum blockchain intelligence with advanced semantic search capabilities. Supports both stdio and HTTP transport modes.
ChainFETCH MCP Server presents 12 well-structured tools with complete JSON Schema definitions and consistent naming conventions. However, the implementation exhibits significant gaps in parameter descriptions, output schema documentation, and error handling guidance. All tools follow verb_noun naming (search_*, get_*), and all have input schemas with type definitions. Descriptions are present but vary in quality, most are 80-150 characters (within the 10-1024 baseline) but lack actionable context about when to use each tool or what downstream actions are possible. Critical gaps: (1) No output schemas are documented anywhere in the code, forcing LLMs to infer response structure; (2) 150+ and 254+ parameter search tools expose only a handful of parameters in the schema, creating a false sense of completeness; (3) Error handling appears minimal, no evidence of recovery guidance, retryability classification, or actionable error messages; (4) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only operations. Parameter descriptions are inconsistent, some are bare field names ('Transaction hash', 'Block hash') while others include constraints ('default: 10, max: 50'). The server demonstrates competent baseline quality (all schemas present, naming correct, basic structure sound) but lacks the polish and LLM-optimization needed for production confidence.
Get detailed information about a specific Ethereum address
Get AI-generated summary for a specific address
Get detailed information about a specific transaction
Get AI-generated summary for a specific transaction
JSON search for addresses with 150+ parameters for comprehensive filtering
LLM-powered address search using LLaMA 3.2 3B to intelligently select from 150+ parameters
No output schemas documented. Tools lack explicit documentation of return types, forcing LLMs to infer response structure.
Parameter descriptions are missing or minimal for complex search tools. search_addresses_json claims '150+ parameters' but only 8 are in the schema. For those present, descriptions like 'Minimum ETH balance (in ETH, e.g., "1.5")' include example values, which LLMs tend to reuse literally. No descriptions for hash, value_min, value_max, gas_used_min, gas_used_max in search_transactions_json beyond bare field names.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 74 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Semantic search for Ethereum addresses using AI-powered vector similarity matching
JSON search for blocks with 120+ parameters
Semantic search for blocks using AI-powered vector similarity matching
JSON search for transactions with 254+ carefully curated parameters
LLM-powered transaction search using LLaMA 3.2 3B to select from 254 parameters
Semantic search for transactions using AI-powered vector similarity matching
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 12 tools are read-only operations and should declare readOnlyHint: true to signal to the LLM and client that these operations are safe, can be retried without side effects, and do not require user confirmation.
No error handling guidance. The code shows no evidence of error recovery patterns, retryability classification, or actionable error messages. If an API call fails, the LLM will receive a generic error with no guidance on whether to retry, ask the user, or try a different tool.
Semantic search tools lack context about when to use them vs. JSON/LLM variants. Descriptions don't explain that semantic search is for natural language queries without knowing exact filter criteria, while JSON search is for structured queries. LLMs may conflate the three search tools, wasting reasoning cycles.
Parameter naming inconsistency: get_address_info uses 'address' while get_address_summary uses 'address_hash'. Similarly, get_transaction_info uses 'transaction' while get_transaction_summary uses 'transaction_hash'. This forces LLMs to track which parameter name each tool expects, violating the pattern that parameter names should be consistent across related tools.
No pagination documentation for list-returning tools. search_* tools accept 'limit' but no 'offset' for semantic/block searches, and descriptions do not explain pagination behavior or result count limits.