The web-search tool has a bare-bones definition that lacks critical documentation. The tool is explicitly registered in src/main.ts with FastMCP (line 24-46), so it is not inferred. However, the definition is severely deficient: the description is vague and generic (8 words, 'Search the web for a topic'), the parameter lacks a description (null), and there is no documented output schema. The input schema is present and uses Zod validation (SearchSchema.parse(args) on line 34), but the parameter 'topic' has no description field, leaving LLMs without clarity on what constitutes a valid topic. The tool does not validate against 54 Agentic Tool Patterns: no idempotency hint, no permission gate, no clear recovery guidance for errors (when res is falsy or organic.length === 0, the response is a generic text message, not actionable guidance). The implementation returns JSON-stringified results as plain text (line 46: 'text: JSON.stringify(results)'), forcing LLMs to parse unstructured output. Error handling returns 'Failed to retrieve results' or 'No results found' without guidance on root cause or next steps.
Search the web for a topic
Tool description is too vague and short (8 words, 'Search the web for a topic'). Does not explain when to use this tool, what prerequisites exist (e.g. SERPER_API_KEY), or what the output format is. Baseline for A+ tools: 50-200 chars with context.
Output schema is not documented. Tool returns JSON-stringified text (line 46), forcing LLMs to parse unstructured output. Should return structured objects with typed fields (title, snippet, link per result).
Error handling returns generic messages ('Failed to retrieve results', 'No results found') without recovery guidance. Should include 'Try a different search term' or 'Check your SERPER_API_KEY' to guide the LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 34 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 33 | - | v1 |
No input validation or constraints on 'topic' parameter. LLMs may pass empty strings, extremely long queries, or non-text values. Parameter description should specify length limits, character restrictions, and examples (as enums or pattern).
No result limit enforced or documented. The tool slices to 10 results (line 45), but this limit is not mentioned in the description. LLMs have no expectation of pagination or result capping.