Single tool with minimal definition quality. Tool name 'search_web' is appropriately verb-prefixed and clear. Description is present (67 chars) but lacks critical context: no mention of when to use it vs alternatives, no output schema documentation, no error recovery guidance. Input schema is minimal, only 'query' parameter with basic string type and description. No parameter constraints (length, format), no pagination support despite search results being inherently paginated. Return type documented as 'str: JSON formatted search results' but actual JSON structure undefined. Error handling exists in code (try/catch) but returns unstructured JSON without actionable recovery guidance. No tool annotations (readOnlyHint, etc.). Composition is single-purpose (appropriate), but lacks the depth expected for production use.
Search the web using Tavily API. Args: query (str): The search query string Returns: str: JSON formatted search results
Output schema completely undocumented. Code returns JSON with 'status', 'results', 'timestamp' fields, but LLM has no visibility into structure. Agents cannot reliably extract search results or chain to downstream tools.
No pagination support. Tavily results are capped at max_results=2 in code, but tool description does not mention this limit or offer offset/limit parameters. Large result sets will be truncated silently.
Parameter 'query' lacks constraints. No length limits, format hints, or examples. Description is generic ('The search query string'). LLM has no guidance on query structure, language, or length bounds.
Error responses are unstructured JSON strings without recovery guidance. Code catches exceptions and returns JSON with 'status: error' and 'message', but does not tell LLM what to do next (retry? ask user? fatal?). Violates recovery-guide pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Tool description (67 chars) is below baseline (194 chars avg for A+ tools). Lacks context on when to use this tool, what 'search results' contain, and how to interpret them. Does not explain Tavily-specific behavior (e.g., 'include_answer=True' means answers are included).