An MCP server that fetches and searches for DeFi-related news from targeted cryptocurrency news websites using the Tavily API, with Redis caching and scheduled updates.
The server defines 3 tools with partial schemas and descriptions. Tool names follow verb_noun convention (search_, get_), which is good. However, descriptions are generic (10-60 chars), parameter descriptions are minimal or missing entirely, and output schemas are completely undocumented. The server lacks error handling guidance, has no input validation documentation, and provides no recovery paths. Definitions are visible in src/index.ts and properly registered via ListToolsRequestSchema, but fall well below production baselines (A+ tools average 194 chars for descriptions; these average ~45 chars). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present, though all three tools are READ_ONLY. The schema quality is inconsistent: search_with_fallback_targetted_websites has good parameter constraints (enums, min/max), but get_full_content and get_latest_defi_news lack output documentation entirely.
Get the full content of a web page from a URL
Get the latest DeFi news from the cache
Search for information from targeted DeFi news websites with fallback to general search when needed
Output schemas completely undocumented. No documentation of what fields are returned, their types, or how downstream tools should consume results.
Descriptions are too short (10-60 chars; baseline 194 chars). 'Get the full content of a web page from a URL' (45 chars) lacks context on when to use this vs search, what format content is returned in, and whether HTML is stripped. 'Get the latest DeFi news from the cache' (42 chars) omits cache freshness, update frequency, and sortedness.
No error handling guidance. Error responses in CallToolRequestSchema handler return generic {content, isError: true} without actionable recovery steps. Per pattern:recovery-guide, agents need 'what should I do next?'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 51 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Tool annotations absent. All three tools are READ_ONLY but lack readOnlyHint annotation. This prevents clients from optimizing caching, retry logic, or audit trails.
Parameter descriptions incomplete or missing. 'url' parameter in get_full_content has a description, but 'limit' in get_latest_defi_news lacks explanation of units (articles? bytes?). 'query' in search is described but 'search_depth' enum values (basic vs advanced) are not explained.
No pagination or result limits documented. search_with_fallback_targetted_websites defaults to max_results=5 and caps at 20, but description does not explain default behavior or why capping exists. get_latest_defi_news defaults to 10 and caps at 50, cap rationale is absent.