DuckDuckGo Search MCP Server

Web search via DuckDuckGo and page reading for the agent with no API keys, with built-in rate limiting

MCP serverMedium risk

nickclyde/duckduckgo-mcp-server

Install

claude mcp add ddg-search uvx duckduckgo-mcp-server

This is third-party code. Review the repository files before installing.

What it does

The server gives the agent DuckDuckGo search with region and SafeSearch settings. A separate tool loads result pages, strips markup and returns plain text, the main block or Markdown in chunks. Long result URLs are swapped for short tokens to save context. Requests are rate limited, fetched pages are cached in memory, and requests to internal addresses are blocked by default.

Who it is for. For anyone who wants simple web search in an agent without signing up for paid search APIs.

Good fit when

  • The agent needs fresh web search and you have no search API key
  • You need to read docs or an article by URL
  • You want local search for Claude Desktop or Claude Code

Not a fit when

  • You need high query volumes or stable results for production
  • You need Russian web search on par with Yandex

Example request

Search the web for what changed in the latest Django release and read the release notes

Limitations

The server parses DuckDuckGo's HTML results rather than an official API, so it can break when the search engine changes. DuckDuckGo blocks plain HTTP clients, so reliable search needs the [browser] extra that mimics Chrome's TLS handshake. Defaults are 30 searches and 20 fetches per minute. DuckDuckGo availability from Russia is not guaranteed.

How to disable. Run claude mcp remove ddg-search or delete the ddg-search block from the MCP config.

MCP

Transport
stdio, sse, http
Authentication
not required
Environment variables
Environment variables
DDG_SAFE_SEARCH
STRICT, MODERATE or OFF.
DDG_REGION
Default region, for example us-en or wt-wt.
DDG_SEARCH_BACKEND
auto, httpx or curl.

Security check

  • Accesses the network and loads arbitrary pages
  • Page content may carry prompt injection

README in short

The README shows running via uvx, a Claude Desktop config and a Claude Code command. It describes three tools, search, fetch_content and expand_link, plus variables for region, SafeSearch, limits, cache and page parsing mode. The server runs over stdio, SSE and Streamable HTTP, with settings for reverse proxies and corporate CA bundles. HTTP backends and SSRF protection are explained separately. MIT licensed.

FAQ

Do I need an API key?

No, the server works without keys or sign-up.

Why does search return nothing?

DuckDuckGo rejects the plain HTTP client. Install the [browser] extra so the server can fall back to the alternative client.

Editors’ pick

CLI, skill and Python library for browser control: the agent clicks, fills forms and reads pages over CDP

CLIHigh risk114.6K
Editors’ pick

A skill that gathers the last 30 days of discussion on a topic from Reddit, X, YouTube, HN, Polymarket and GitHub into one brief

SkillHigh risk62K
Editors’ pick

The Chrome DevTools team's official MCP server: the agent drives a live Chrome, reads network and console, and records performance traces

MCP serverMedium risk52K
Editors’ pick

A fast Rust CLI for agent browser automation: accessibility snapshots with element refs, an MCP server and skills

CLIHigh risk42.6K