MCP server providing web search tools via DuckDuckGo and SearXNG
Three tools with clear naming (web_search, search_code, fetch_page) and good descriptions (150-200 chars each). All tools have input schemas with typed parameters and defaults. However, output schemas are not documented in the source code, LLMs cannot predict what fields to expect from responses. Parameter descriptions are present but lack constraint details (e.g., max_results range, URL format validation). Error handling is not visible in the provided code excerpt. The descriptions explicitly guide multi-step workflows ('call fetch_page on the best result'), which is excellent for composition.
Load a web page and return its content as Markdown. Use this after web_search or search_code: pick the best result's URL and pass it here to load and show the full page to the user.
Search for anything programming-related: code, errors, docs, dependencies. Use this instead of web_search for programming questions. Returns short snippets only — you MUST call fetch_page on the best result's href before answering; never answer from the snippet body alone.
Search the web for anything that is not a programming question (use search_code for those). Returns short snippets only — you MUST call fetch_page on the best result's href before answering; never answer from the snippet body alone.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). web_search and search_code return 'short snippets' but no schema shows snippet fields, result count, or next_cursor for pagination.
Parameter constraints missing. max_results has a default (5) but no min/max bounds documented. URL parameter in fetch_page lacks format validation hint. max_chars default is 8000 but no range stated.
Error handling not visible in source. No recovery guidance documented (e.g., 'If no results, try a broader query'). No indication of retryable vs. fatal errors.
Pagination not addressed. search_code and web_search return max_results items but no next_cursor, offset, or total_count. Large result sets could blow context window.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | <=2025-11-25 | v2 |
search_code language parameter is optional with empty default. Unclear if omitting language degrades search quality or if it auto-detects. Should document behavior.