MCP server providing DuckDuckGo search and site fetching tools
Two tools with basic descriptions and minimal input schemas. search_list and access_site both have single-parameter inputs with type declarations but lack depth in parameter descriptions and output schema documentation. Descriptions are present (60-80 chars) but generic, they state WHAT but not WHEN or WHY to use each tool. No error recovery guidance, no pagination support for search results, no output schema documented. Error handling returns JSON with success/error fields but does not guide the LLM on next steps (e.g., 'Try a different query' or 'Check URL format'). Naming is clear (verb_noun pattern) and tools are single-responsibility, which is good. However, parameter descriptions are minimal ('The search query string', 'The URL to fetch'), they do not explain constraints, formats, or expected behavior.
Fetch the contents of a URL, following redirects, and return as plain text.
Search the web using DuckDuckGo and return ranked results.
Output schemas not documented. search_list returns JSON with 'success', 'query', 'results_count', 'results' (array of rank/title/url/snippet), but LLMs cannot plan downstream calls without knowing this structure. access_site returns 'success', 'requested_url', 'final_url', 'status_code', 'content_type', 'truncated', 'content', undocumented.
Parameter descriptions lack actionable constraints. 'The search query string' does not explain max length, character restrictions, or expected format. 'The URL to fetch' does not mention timeout (15s), size cap (2 MB), or supported protocols. LLMs cannot validate inputs without explicit constraints.
Error responses do not guide recovery. When search_list fails, it returns {'success': false, 'error': str(e)}, no suggestion to retry, refine query, or check network. When access_site hits HTTP 404, it returns 'HTTP 404: Not Found' with no guidance. Errors should be actionable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
search_list returns up to 10 results with no pagination support. If an LLM needs more results, it must call again with a different query, no offset/limit parameters. Large result sets risk context window exhaustion; no limit stated in description.
Tool descriptions are generic and do not explain WHEN to use each tool or dependencies. 'Search the web using DuckDuckGo' does not say 'Use this to find URLs, then call access_site to fetch content.' No discovery hints or multi-step guidance.