MCP server providing access to Tavily search and content extraction APIs with API key authentication
This server has clear tool naming and comprehensive input schemas, but suffers from missing output schema documentation and lacks error guidance that would help LLMs recover from failures. Both tools follow the verb_noun naming convention well ('tavily-search', 'tavily-extract'). Input parameters are well-typed with proper enums and defaults. However, the server exposes no documented output schema structure, only an implicit TavilyResponse model that LLMs cannot see. Error handling is generic ('Tavily API error' with no recovery hints). Parameter descriptions are present but some lack format constraints (e.g., 'query' could be more specific about length/character limits).
Extract content from URLs using the Tavily API.
Perform a search using the Tavily API.
Output schema not documented in tool definitions. LLMs cannot see the TavilyResponse structure (query, follow_up_questions, answer, images, results fields). This forces LLMs to guess at available output fields and plan downstream operations blindly.
Error messages provide no recovery guidance. 'Tavily API error' and generic exception messages ('Tavily API error' in both endpoints) do not tell LLMs what to do next (retry? ask user? check params?). Per pattern:recovery-guide, errors should suggest next steps.
Missing parameter format constraints. The 'query' parameter for tavily-search has no documented length limit, character restrictions, or format guidance. Per review:param-validation-rules, expected format and constraints should be stated in descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 61 | - | v1 |
No documented limits on result counts. While max_results has a default of 10, the tool description does not state the maximum allowed value or warn that large result sets could exhaust token limits. Per mxe:enforce-result-limits, caps and pagination limits must be documented.
Tool descriptions lack WHEN-to-use guidance. Descriptions state WHAT the tool does but not WHEN an LLM should call tavily-search vs tavily-extract, or when to use 'basic' vs 'advanced' search_depth. Per pattern:tool-description, descriptions should guide tool selection.