ddgs-mcp
Provides web, news, image, and video search using Brave as one of the available metasearch backends, with support for region and time filters.
Provides web, news, image, and video search using DuckDuckGo as one of the available metasearch backends, with support for region and time filters.
Provides web, news, image, and video search using Google as one of the available metasearch backends, with support for region and time filters.
Provides web search using Mojeek as one of the available metasearch backends, with support for region and time filters.
Provides web search using Startpage as one of the available metasearch backends, with support for region and time filters.
Includes Wikipedia as one of the available sources in the metasearch backend pool, contributing results to the aggregated search responses.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ddgs-mcpsearch the web for sustainable packaging innovations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ddgs-mcp
A Model Context Protocol (MCP) server that exposes DDGS (Dux Distributed Global Search) — a keyless, multi-engine web metasearch — to AI agents.
It is a drop-in, more reliable alternative to a single SearXNG instance: instead of one upstream that gets IP-banned and poisons every query, DDGS fans each call out over several backends (DuckDuckGo, Bing, Brave, Google, Mojeek, Startpage, Yahoo, Wikipedia, ...) and deduplicates the union. If one engine rate-limits you, the others still answer.
No API key. No account. Runs over stdio via uvx, matching the other MCP servers in this stack.
Install / run
uvx ddgs-mcp # from PyPI (once published)
uvx --from git+https://github.com/marcinkuk/ddgs-mcp.git ddgs-mcp # direct from gitFor local development:
cd ddgs-mcp
uv sync
uv run ddgs-mcpRelated MCP server: DuckDuckGo Search MCP Server
Tools
Tool | Purpose |
| General web results (title, url, snippet). |
| News results with source + date. |
| Image results with direct image/thumbnail URLs. |
| Video results with embed URL, duration, publisher. |
| Read full readable content (markdown) of 1-5 URLs. |
| Diagnostics: version, configured backend/region, per-category backends, live ping. |
Each search tool accepts backend="auto" (randomized multi-engine, the default and most resilient) or a specific backend name, plus region, timelimit (d/w/m/y) and max_results.
All tools return a uniform envelope {"ok": bool, "engine": str, "count": int, "results": [...]}; on failure ok=false with a hint telling the agent how to retry (e.g. switch to auto or a different region).
Configuration (environment)
Variable | Default | Meaning |
|
| Default backend for search calls. |
|
| Default region code ( |
|
| Per-request timeout (seconds). |
| (unset) | Proxy URL passed to DDGS (e.g. |
|
| Server log verbosity. |
Agent Canvas registration
Register with a stdio MCP entry (no secrets required):
{
"ddgs": {
"transport": "stdio",
"command": "uvx",
"args": ["--from", "git+https://github.com/marcinkuk/ddgs-mcp.git", "ddgs-mcp"],
"enabled": true,
"description": "Keyless DDGS metasearch (DuckDuckGo/Bing/Brave/Google) + page extraction. Resilient SearXNG alternative."
}
}If you want ban-resistance, add an env entry for a rotating proxy:
"env": {"DDGS_PROXY": "http://127.0.0.1:1080"}The value is stored through the normal MCP config path (Fernet-encrypted at rest like the other secrets) — never commit it to this repo.
Why this over SearXNG?
Resilience: multi-backend aggregation survives single-engine bans (your exact
banuję mniesymptom).No key / no server: nothing to host;
uvxself-heals on container/image upgrades liketrailsearch-mcp.Extraction:
web_extractgives clean markdown of a page in one call.
Keep searxng registered alongside it if you like; the two can coexist and you can pick per query.
License
MIT.
Available Tools
6 toolsimage_searchA
Image search via DDGS (DuckDuckGo/Bing image backends). No API key.
Args: query: image query. max_results: number of results (1-25). region: e.g. "us-en", "wt-wt". safesearch: "on" | "moderate" | "off". backend: "auto" or one of: duckduckgo, bing.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No | us-en | |
| backend | No | auto | |
| safesearch | No | moderate | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'No API key' and backend choices, but does not explicitly state that this is a read-only operation, whether results are scraped, how errors are surfaced, or if there are rate limits. The 'search' wording implies non-destructive behavior, but an agent gains little insight beyond a typical search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line purpose statement followed by a tabulated args list. Every line serves a purpose, and the format is easy to scan. It earns its place given the empty schema descriptions, though a shorter phrasing could have been slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with an output schema present, the description covers invocation essentials: purpose, all parameters with allowed values, authentication status (no API key), and backend selection. It omits only explicit sibling-routing guidance and behavioral caveats, which are minor because the output schema already addresses return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by documenting all five parameters: query, max_results with range constraint, region with examples, safesearch with allowed values, and backend with 'auto' plus specific engines. This adds meaningful value beyond the bare schema defaults, though it could further explain the region's effect and safesearch semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Image search via DDGS (DuckDuckGo/Bing image backends)', which names the operation (search) and resource (images) and explicitly distinguishes it from siblings like news_search and video_search. The specific backends further differentiate it from web_search, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'No API key' and lists backend options, implying this is the image-specific search tool among the siblings. However, it never explicitly says 'use this when you need images' or contrasts it with web_search, news_search, etc. The usage context is implied by the resource and sibling names rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
news_searchA
News search via DDGS (DuckDuckGo/Bing/Yahoo news backends). No API key.
Args: query: news query. max_results: number of results (1-25). region: e.g. "us-en", "pl-pl", "wt-wt". timelimit: "d" | "w" | "m" | "y" or None. backend: "auto" or one of: duckduckgo, bing, yahoo. snippet_chars: max snippet length (0 = none).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No | us-en | |
| backend | No | auto | |
| timelimit | No | ||
| max_results | No | ||
| snippet_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure responsibility. It usefully discloses auth requirements, backend options, result limits, and snippet truncation behavior, but it does not mention rate limits, error behavior, or what the returned news results contain. For a non-mutating search tool this is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact two-line summary followed by a scannable Args list. Every line adds useful parameter or behavior information, with no filler and no repetition of schema-default information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no annotations, and an output schema, the description covers the caller-facing details needed to invoke the tool correctly: all parameters, constraints, and the no-key requirement. It is nearly complete, though edge behavior such as rate limits and empty-result handling is left undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only types and defaults, so the description must add the meaning of all six parameters. It does so for every parameter, including allowed ranges, region examples, timelimit values, backend choices, and the meaning of snippet_chars=0.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States that the tool performs news search via DDGS with DuckDuckGo/Bing/Yahoo news backends and no API key. This clearly distinguishes it from image_search, video_search, and web_search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool is positioned as a news-specific search, which implies it should be selected over web/image/video search, but it never explicitly states when to prefer it or when to choose a sibling. Usage guidance is inferred from the news focus rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_statusA
Health/diagnostics: DDGS version, configured backend/region/timeout/proxy, available backends per category, and a live ping search.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool reports configuration details and performs a live ping search, which tells the agent that a live network operation is involved. It does not warn about possible latency or failure modes, but the behavior is adequately described for a diagnostic call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence packs all relevant information with a colon-structured list. Every segment adds a specific piece of diagnostic info; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter status tool with an output schema, the description covers the purpose, the categories of information returned, and the diagnostic nature. The output schema can carry the detailed return structure, so nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the description does not need to explain parameter meaning. The empty schema makes parameter semantics a non-issue; the baseline for zero-parameter tools applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific category 'Health/diagnostics' and enumerates the exact information returned: DDGS version, backend/region/timeout/proxy, available backends per category, and live ping. This distinguishes it clearly from the sibling search tools, which perform searches rather than report system status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Health/diagnostics' prefix gives clear context for when to call this tool: checking configuration and connectivity, not performing a content search. It does not explicitly name alternatives or exclusions, but the purpose is specific enough that an agent should not confuse it with the search siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_searchA
Video search via DDGS (DuckDuckGo video backend). No API key.
Args: query: video query. max_results: number of results (1-25). region: e.g. "us-en", "wt-wt". backend: "auto" or "duckduckgo". snippet_chars: max description length (0 = none).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No | us-en | |
| backend | No | auto | |
| max_results | No | ||
| snippet_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful behavioral context by stating 'No API key' and identifying the DDGS/DuckDuckGo video backend, which tells the agent that no authentication setup is needed. However, it does not disclose rate limits, error behavior, or whether results are live vs cached. The read-only nature of search is reasonably inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a two-sentence overview followed by a clean Args list. Every line adds value, and the key constraint ('No API key') is front-loaded. There is no filler or repetition of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter search tool with an output schema and zero schema-level descriptions, the description covers all invocation essentials: parameter meanings, ranges, allowed values, and auth-free access. It does not discuss rate limits or when to prefer sibling tools, but the core instructions for correct invocation are complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining all five parameters. It includes critical constraints and examples: max_results range (1-25), region formats ('us-en', 'wt-wt'), backend choices ('auto' or 'duckduckgo'), and snippet_chars semantics (max description length, 0 = none). This is far more informative than the bare schema titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Video search via DDGS (DuckDuckGo video backend)', a specific verb and resource that clearly identifies the tool as a video-focused search utility. This distinguishes it from siblings like image_search, web_search, and news_search without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, such as 'use web_search for general web queries' or 'use image_search for images'. The tool name and first line imply it is for videos, but the conditional context for choosing it over siblings is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extractA
Extract readable content from 1-5 web pages (markdown by default).
Use after web_search/news_search to read the actual page content.
Args: urls: 1-5 absolute http(s) URLs to extract. max_chars: max characters of content returned per page (default 6000). fmt: "text_markdown" | "text_plain" | "text_rich" | "text" (raw HTML) | "content" (bytes->str).
| Name | Required | Description | Default |
|---|---|---|---|
| fmt | No | text_markdown | |
| urls | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It reveals that output is markdown by default, that content is truncated via max_chars, and that fmt controls markdown/plain/rich/raw-HTML/bytes-to-str conversion. This gives a strong model of behavior without dependency on schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a one-sentence usage context, then a terse Args list. Every line adds value, and the most critical facts (default format and usage order) are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return value details need no explanation. The description covers the operation, the param family with defaults, and the intended position in a search-then-extract workflow. Nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully: it explains urls are 1-5 absolute http(s) URLs, max_chars caps returned content per page with default 600, and fmt enumerates all accepted values including their semantic differences. This is exactly the parameter clarification the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Extract readable content from 1-5 web pages (markdown by default).' This clearly identifies the operation and scope, and the placement relative to search tools distinguishes it as a follow-up retrieval action rather than a search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use after web_search/news_search to read the actual page content,' giving the agent clear context for when this tool is appropriate. It does not spell out when not to use it, but the intended workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchA
Web search (web results) via DDGS metasearch. No API key.
Args: query: search query. max_results: number of results (1-25). region: e.g. "us-en", "pl-pl", "de-de", "wt-wt" (worldwide, no region). safesearch: "on" | "moderate" | "off". timelimit: "d" (day), "w" (week), "m" (month), "y" (year), or None. backend: "auto" (randomized multi-engine, recommended) or specific: duckduckgo, bing, brave, google, mojeek, startpage, yahoo, wikipedia, grokipedia. snippet_chars: max snippet length per result (0 = no snippet).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No | us-en | |
| backend | No | auto | |
| timelimit | No | ||
| safesearch | No | moderate | |
| max_results | No | ||
| snippet_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals useful behavioral facts, such as no API key required and use of DDGS metasearch, which are not in annotations. However, with no annotations provided., it does not disclose potential limitations like rate limits or network dependency, leaving some behavioral burden uncovered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and API requirement, then uses a clean Args block for parameters. Every line carries useful information and none is redundant with the schema beyond necessary clarification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters and zero schema descriptions, this descrption covers all of them with concrete options and examples. It also notes key operational context such as no API key and backend choice. With an output schema present, return values need not be described here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and this descripiton fully compensates. For every parameter it gives allowed values, formats, examples, defaults, or recommendationex: region examples, timelimit semantics, backend options, and max_results range. This is highly actionable for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: web search via DDGS metasearch. It explicitly says 'web results', which distinguishes it from sibling tools like image_search, news_search, and video_search without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this is a web search tool, distinct from other search types. It does not explicitly name alternatives or list when-not-to-use conditions, but 'web results' plus the sibling tool names make the intended use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
image_search - First observed
news_search - First observed
search_status - First observed
video_search - First observed
web_extract - First observed
web_search
TDQS
Scored across 6 tools
Each tool targets a distinct content type or function: web, image, news, video, page extraction, and service diagnostics. There is no meaningful overlap in purpose, so an agent should rarely misselect among them.
Names are uniformly lowercase snake_case and mostly follow a `<type>_search` pattern for the four search tools. `web_extract` and `search_status` are minor structural deviations, but they remain clear and predictable in style.
Six tools is a well-scoped size for a search-focused server: four content-type searches, one extraction tool, and one diagnostics tool. Every tool has a clear role and none feel redundant or unnecessary.
The server covers the core search lifecycle: querying web, image, news, and video results, then extracting readable content from results, plus health diagnostics. There are no obvious missing operations for its stated purpose.
Maintenance
Related MCP Connectors
Scrape, crawl and search the web for AI agents via MCP.
Your agent needs the open web — searched by more than one engine, and read as clean markdown rather than raw HTML. **What you can ask for** • "Search this question with two providers and tell me where they disagree." • "Scrape these 40 URLs into markdown, in one batch." • "Crawl this documentation site and give me every page." • "Do deep research on this topic and cite the sources." • "Find the academic papers behind this claim." **How to use it** Point any MCP client at https://mcp.aisa.one/search/mcp and sign in with OAuth — there is no key to create or paste. 30 tools across several independent providers: Tavily and Exa search, answers, contents and agent runs; Firecrawl scrape, batch scrape, crawl, map and search; Perplexity Sonar, Sonar Pro, reasoning and deep research; Oxylabs AI search and LLM jobs; OpenAI and Anthropic web search; and scholarly search. **Why this rather than the source** Several independent indexes behind one account, because one engine's blind spot is not visible from inside it. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find the page here, then ask the same agent who links to it or how much traffic it gets — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo-serp/mcp for the Google results page itself, https://mcp.aisa.one/seo-serp-other-engines/mcp for Bing, Baidu and Naver.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
Fetch pages as markdown, search web and news, extract structured data. For AI agents.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to perform multi-engine web search, fetch web pages, and extract clean Markdown content via MCP, with no API keys required.392 PyPI8MIT
- FlicenseNot gradedqualityCmaintenanceBrings DuckDuckGo search (web, news, images, videos) to any MCP-compatible AI client without requiring an API key.-
- AlicenseNot gradedqualityBmaintenanceMCP server for multi-engine web search and web page fetching, supporting parallel search, content extraction, and optional LLM-powered search summarization and deep search.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform web search, extraction, and research across multiple provider backends with persistent multi-key rotation and auditable routing. Supports MCP, CLI, and Agent Skill entry points.MIT