Tavily MCP has 6 tools with consistent patterns. All tools have descriptions (10-200+ chars, within acceptable range) and explicit input schemas with typed parameters. However, schema depth varies significantly across tools. tavily_search has the most comprehensive schema with 14 parameters, enums for depth/topic, and detailed descriptions. tavily_extract, tavily_crawl, and tavily_map have basic but adequate schemas. tavily_research has moderate schema completeness. tavily_feedback has minimal schema (3 required params). Output schemas are NOT documented anywhere in the source code, only input schemas are defined. Error handling is present (McpError, ErrorCode imported) but recovery guidance in error messages is not visible in the code sample. No tool annotations (readOnlyHint/destructiveHint) are present despite 5 of 6 being read-only operations. Parameter descriptions are generally present but inconsistent in quality, some are 10 chars ('URL to map'), others 100+ chars (tavily_search parameters). Default values are specified for most parameters, reducing required argument burden. The code shows axios-based API calls and basic parameter validation via type system, but no explicit input sanitization or validation logic is visible.
Crawl and extract content from a given URL. Returns crawled page content.
Extract content from URLs. Returns raw page content in markdown or text format.
Send feedback about search results to improve future results.
Map all URLs and links found on a given website.
Conduct in-depth research by breaking down queries into sub-queries and aggregating comprehensive results.
Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.
Output schemas not documented. LLMs cannot see what fields search/extract/crawl/research/map/feedback return, forcing them to guess at response structure and hindering downstream tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Five tools are read-only but this is not declared to the client. tavily_feedback is a write operation but has no destructiveHint. Clients cannot determine tool safety without documentation outside the schema.
Parameter descriptions lack actionable detail in some tools. tavily_map has only 'URL to map' (10 chars). tavily_crawl's max_depth lacks guidance on what each depth level returns. Descriptions should explain WHAT to pass, WHEN to use it, and WHAT it controls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Error handling code present but error messages not visible in source. No evidence of actionable error recovery guidance (e.g., 'Try tavily_search() first if you only have a partial URL'). Errors should guide the LLM on next steps.
No input validation logic visible. Schemas declare enums and constraints (e.g., max_results 5-20, max_depth 1-3) but no explicit validation or sanitization before making API calls. LLMs can pass malformed inputs if not caught.