A Model Context Protocol (MCP) server for DuckDuckGo web and news search
Two well-named tools with comprehensive input schemas and clear descriptions. Tool names follow verb_noun convention (search_* pattern). Both tools declare their purposes clearly and include parameter constraints (enums, ranges). However, output schemas are not documented in the visible code, LLMs cannot see what fields to expect in search results. Parameter descriptions are good but could be more explicit about return format and use cases. The deprecated 'count' parameter is present alongside 'limit', adding complexity. No explicit error handling guidance is visible.
News search via DuckDuckGo. Returns max 3 articles with 150-char excerpts. Use 'limit' param to override (1-20).
Web search via DuckDuckGo. Returns max 3 results with 150-char snippets. Use 'limit' param to override (1-20). Supports region/time filters.
Output schema not documented. The tool descriptions and input schemas are clear, but the code does not show what fields (title, url, snippet, source, date, etc.) are returned to the LLM. LLMs need documented output structure to plan downstream tool calls and extract the right data.
Deprecated 'count' parameter coexists with 'limit' in both tools. This creates ambiguity: if an LLM passes both, which takes precedence? The description says 'DEPRECATED: use limit' but does not explain the fallback behavior or warn against using both simultaneously.
Result limits are hardcoded in descriptions ('Returns max 3 results') but configurable via envConfig (DDG_MAX_RESULTS). If an operator changes the environment variable, the description becomes incorrect, misleading LLMs about what to expect.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No error handling guidance visible in tool definitions. The code references rate limiting, snippet truncation, and URL cleaning, but the tool descriptions do not explain what happens on query failure, rate limit hit, or API timeout. LLMs cannot plan recovery without this guidance.
Parameter 'region' in duckduckgo_web_search includes a descriptive list of examples ('us-en', 'uk-en', 'de-de', 'wt-wt') in the description but does not declare an enum. LLMs may invent invalid region codes. The VALID_REGIONS list exists in code but is not reflected in the inputSchema.