MCP server for free web search using DuckDuckGo and free APIs
Server has 4 tools with basic descriptions and partial parameter schemas. The tools themselves are well-named with action verbs (web_search, fetch_webpage, wikipedia_search, instant_answer) and non-trivial descriptions (60-110 chars), but lack the depth needed for reliable LLM selection and execution. Baseline comparison: tool descriptions average 194 chars (these average ~85 chars); all params need descriptions (these lack depth); 100% of A+ tools have documented return types (this server has zero).
Fetch and extract content from a webpage URL, removing scripts, styles, ads and formatting content
Get instant answer from DuckDuckGo for the query if available
Search the web using multiple search engines and return relevant results with fallback support
Search Wikipedia and return article information including title, URL, and extract
No output schemas documented. Tools return search results or webpage content, but descriptions never specify return field names, types, or structure. LLMs cannot plan downstream tool calls or extract specific fields without knowing what to expect.
Parameter descriptions are too brief and lack constraints. 'Number of search results to return (default: 10)' is only 48 chars; no min/max bounds specified. LLMs can pass absurd values (0, 1000, negative).
No error handling or recovery guidance. Code catches exceptions and logs to console, but tools never return actionable error messages. If a search fails, the LLM sees nothing except that the call failed, no hint on whether to retry, try a different tool, or ask the user.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
fetch_webpage parameter description is extremely minimal. 'The URL of the webpage to fetch' (33 chars) provides no guidance on format, acceptable protocols, or failure modes. Does it accept data: URIs? javascript: URLs? What happens if the domain is blocked or the page is 100MB?
No composition guidance. Tools return snippets and titles, but it's unclear what IDs or references are included in results. If web_search returns a URL, can fetch_webpage accept it directly, or does the URL need transformation? What fields do downstream tools expect?
No pagination or result limits documented. web_search has a numResults parameter and defaults to 10, but descriptions never state a hard cap (e.g., 'max 50') or explain what happens if the number exceeds available results.