MCP server that provides web search capabilities using the Tavily API
Single tool 'tavily-search' has well-structured schema with all parameters typed and described. Tool name is action-verb-based (search_*). Description is clear (97 chars, within 10-1024 range). All 5 parameters have type definitions and descriptions. Output schema is documented in code (query, answer, responseTimeSeconds, results array with title/url/snippet/score). Error handling includes actionable messages ('Missing TAVILY_API_KEY', HTTP status + response text, fetch error details). Tool annotations present (readOnlyHint, openWorldHint). Main gaps: no pagination support despite potentially large result sets (maxResults capped at 10 but no offset/limit pattern), output schema not formally documented in tool registration, and no recovery guidance in error messages (e.g., 'API key missing, set TAVILY_API_KEY env var').
Search the web with Tavily and return structured results for the given query.
Output schema not formally documented in tool registration. While code shows return structure (query, answer, responseTimeSeconds, results[]), the tool definition lacks an explicit outputSchema field. LLMs cannot reliably infer downstream field availability.
Error messages lack recovery guidance. 'Tavily request failed with 401: Unauthorized' tells the agent nothing actionable. Should be: 'Tavily API returned 401 Unauthorized, verify TAVILY_API_KEY is valid and has search permissions.'
No pagination or result limiting guidance. maxResults capped at 10, but tool description does not explain why or suggest pagination patterns. If Tavily returns 10 results by default, agents may expect more and retry unnecessarily.
Parameter 'topic' enum values ('general', 'news') lack context in description. Should clarify: 'Use news for recent events/breaking news; general for timeless information, product docs, etc.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 82 | 2026-07-28+ | v2 |
No validation of TAVILY_API_KEY format before calling API. Early validation with clear error ('TAVILY_API_KEY must be a non-empty string') prevents wasted API calls and clearer debugging.