MCP server for DDGS (Dux Distributed Global Search) - a metasearch library that aggregates results from diverse web search services
DDGS MCP server provides 6 search and content extraction tools with present but inconsistent quality. All tools have descriptions and input schemas with proper types, meeting basic documentation standards. However, descriptions are generic and lack LLM-optimized guidance; parameter descriptions are minimal; output schemas are completely undocumented; error handling provides no recovery guidance; and no tool annotations exist. The server follows verb_noun naming conventions well (search_text, search_images, extract_content), but parameter constraints lack formal enum declarations where applicable (e.g., region, safesearch, timelimit formats are free-form strings with examples in descriptions rather than constrained enums). No composition issues detected, tools are narrowly focused and individually coherent. This is a competent but not polished implementation typical of community-grade search integrations.
Extract content from a URL. Args: url: The URL to fetch and extract content from. fmt: Output format: "text_markdown", "text_plain", "text_rich", "text" (raw HTML), "content" (raw bytes). Returns: Dictionary with url and content keys.
Perform a book search using DDGS. Args: query: Books search query string max_results: Maximum number of results to return page: Page number of results backend: Search backend (auto, or specific engine) Returns: List of book search results with title, author, and metadata
Perform an image search using DDGS. Args: query: Image search query string region: Region for search (e.g., us-en, uk-en, ru-ru) safesearch: Safe search setting (on, moderate, off) timelimit: Time limit (d, w, m, y) or custom date range max_results: Maximum number of results to return page: Page number of results backend: Search backend (auto, or specific engine) size: Image size (Small, Medium, Large, Wallpaper) color: Image color filter type_image: Image type (photo, clipart, gif, transparent, line) layout: Image layout (Square, Tall, Wide) license_image: Image license filter Returns: List of image search results with title, image URL, and source
Perform a news search using DDGS. Args: query: News search query string region: Region for search (e.g., us-en, uk-en, ru-ru) safesearch: Safe search setting (on, moderate, off) timelimit: Time limit (d, w, m, y) or custom date range max_results: Maximum number of results to return page: Page number of results backend: Search backend (auto, or specific engine) Returns: List of news results with title, URL, source, and date
No output schema documentation. All tools lack documented return types, forcing LLMs to infer structure from tool name alone. This violates pattern:tool and pattern:response-shaper requirements.
Parameter constraints not formalized as enums. 'region' (us-en, uk-en, ru-ru), 'safesearch' (on, moderate, off), 'timelimit' (d, w, m, y), and 'fmt' (text_markdown, text_plain, etc.) are documented as free-form strings with examples in descriptions. LLMs cannot parse descriptions reliably, these should be enum/oneOf constraints in JSON Schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 69 | - | v1 |
Perform a text search using DDGS. Args: query: Search query string region: Region for search (e.g., us-en, uk-en, ru-ru) safesearch: Safe search setting (on, moderate, off) timelimit: Time limit (d, w, m, y) or custom date range max_results: Maximum number of results to return page: Page number of results backend: Search backend (auto, or specific engine) Returns: List of search results with title, href, and body
Perform a video search using DDGS. Args: query: Video search query string region: Region for search (e.g., us-en, uk-en, ru-ru) safesearch: Safe search setting (on, moderate, off) timelimit: Time limit (d, w, m) or custom date range max_results: Maximum number of results to return page: Page number of results backend: Search backend (auto, or specific engine) resolution: Video resolution (high, standard) duration: Video duration (short, medium, long) license_videos: Video license (creativeCommon, youtube) Returns: List of video search results with title, URL, and metadata
Descriptions lack LLM optimization and actionable guidance. Tool descriptions are 60-100 characters, mostly restating the function signature (e.g., 'Perform a text search using DDGS.'). They do not answer: When should I use this vs. search_news? What structure do I get back? What prerequisites exist? Per-parameter descriptions are minimal (e.g., 'Search query string' without guidance on multi-word vs. phrase queries, or how special operators affect results).
No error handling guidance. Tool descriptions and schemas provide no indication of error modes, retryability, or recovery steps. E.g., what happens if a query times out, region is invalid, or URL fetch fails? An LLM receives a bare error and cannot reason about next steps.
Missing pagination guidance. search_* tools accept 'page' parameters (default 1) but lack descriptions explaining: Is pagination 0-indexed or 1-indexed? What is max_results default (10) vs. backend limits? Should page default to 0 or 1? How many results can a single call return? Without explicit pagination limits, LLMs may request excessive data.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are marked READ_ONLY in the risk column, but this information is not exposed in the tool schema or via MCP annotations. Agents cannot infer idempotency or read-only semantics without explicit markers.