duckduckgo-mcp-server
让 AI 助手实时搜索网络的 MCP 服务器插件,无需 API Key,支持搜索与网页内容抓取
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让 AI 助手实时搜索网络的 MCP 服务器插件,无需 API Key,支持搜索与网页内容抓取
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你正在和一个 AI 助手对话,突然想问它:「特斯拉最新股价是多少?」——大多数 AI 模型只知道训练数据截止日期之前的信息,无法回答这类实时问题。DuckDuckGo MCP Server 正是为解决这一痛点而生的工具:它以 Model Context Protocol(MCP)协议为桥梁,让 AI 助手能够实时调用 DuckDuckGo 搜索引擎,获取最新网络信息。
图1:DuckDuckGo MCP Server _star 增长曲线
大语言模型(LLM)的知识有天然的截止日期——无论是最新的新闻、股价、天气,还是某个库的最新版 API 文档,模型都无法直接获取。更根本的问题是,模型存在「幻觉」(hallucination)风险:它可能用流畅的语言自信地编造一个不存在的事实。
为了解决这两个问题,业界发展出 RAG(检索增强生成)和 Tool Use(工具调用)两条路径。DuckDuckGo MCP Server 属于后者:它将一个完整的网络搜索 + 内容抓取工具注册为 MCP 服务器,使 AI 能够在对话过程中主动发起搜索请求,实时拉取最新数据后再组织回答。
该项目的作者是独立开发者 Nick Clyde,仓库于 2024 年初上线,迅速在 MCP 生态中获得关注,目前 GitHub 星标数超过 1200,是 MCP 官方生态中最受欢迎的非官方搜索工具之一。
MCP 服务器提供两个核心工具:
1. search 工具 — 网络搜索
基于 DuckDuckGo HTML 端点(html.duckduckgo.com/html)构建,支持参数化配置:
query:搜索关键词,支持自然语言查询max_results:返回结果数量(默认 10,最大 20)region:区域语言代码(如 us-en、cn-zh、jp-ja),可覆盖服务器默认配置DDG_SAFE_SEARCH:安全搜索级别(STRICT / MODERATE / OFF),通过 DuckDuckGo 官方 kp 参数实现搜索结果经过格式化处理后返回给 AI,包含标题、URL 和摘要片段,专门优化为「易于 LLM 理解」的输出格式。
2. fetch_content 工具 — 内容抓取与解析
拿到搜索结果中的 URL 后,AI 可以调用此工具抓取完整网页内容。系统会:
start_index + max_length,默认 8000 字符)特别值得注意的是 fetch_content 的反爬虫绕过机制:默认使用轻量级的 httpx 库,但对 Cloudflare Bot Management 等 TLS 指纹检测无法绕过。此时用户可安装可选的 [browser] 扩展,启用 curl_cffi 后端——它会模拟真实 Chrome 浏览器的 TLS 握手指纹,以假乱真地通过 Bot 检测。这是整个项目中最体现工程深度的一个细节。
项目代码结构极为清晰,总计约 500 行 Python 代码,全部逻辑集中在 src/duckduckgo_mcp_server/server.py 一个文件中。核心技术栈:
| 组件 | 技术选型 | 作用 |
|---|---|---|
| MCP 框架 | mcp[cli] >= 1.26.0 (FastMCP) | 快速构建 MCP 服务器 |
| HTTP 客户端 | httpx | 异步 HTTP 请求 |
| HTML 解析 | beautifulsoup4 | 网页内容提取 |
| 可选反爬 | curl_cffi | TLS 指纹模拟 |
| 构建工具 | Hatchling | Python 包构建 |
代码分为三个核心类:
RateLimiter:令牌桶式限流,对搜索请求(30次/分钟)和内容抓取(20次/分钟)分别限速,防止触发 DuckDuckGo 的反爬机制。实现方式是滑动时间窗口:acquire() 时清理 1 分钟前的记录,若当前请求数已达上限则阻塞等待。
DuckDuckGoSearcher:封装搜索逻辑。向 DuckDuckGo HTML 端点发送 POST 请求(而非官方 API,避免 API Key),解析 HTML 返回结构化结果。关键细节:使用了 DuckDuckGo 的 kl 参数(区域/语言)和 kp 参数(安全搜索),这些都是官方免费端点支持的参数。
WebContentFetcher:支持三种 HTTP 后端的策略模式:httpx(默认/快速)、curl(反爬绕过)、auto(智能降级)。auto 模式下,若 httpx 收到 403 或检测到 Cloudflare 挑战页面文本,则透明重试 curl 后端。
main() 函数处理传输层选择:默认 stdio 协议(用于 Claude Desktop / Claude Code),也支持 SSE 和 Streamable HTTP 两种网络协议,供其他 MCP 客户端(如自定义 Web 应用)使用。HTTP 模式使用 Starlette + Uvicorn 启动,并自动合并 SSE 和 HTTP 路由。
项目对不同用户群体提供了三种部署路径:
路径一(推荐):uvx 一行命令
uvx duckduckgo-mcp-server
只需安装 uv 包管理器,一条命令即可运行。Claude Desktop 和 Claude Code 用户可在此基础上通过 MCP 配置直接集成。
路径二:Docker 容器
官方提供了 Dockerfile,基于 python:3.13-slim 镜像,构建后约 150-200MB。启动命令为 python -m duckduckgo_mcp_server.server(stdio 模式,容器内无需暴露端口)。
路径三:PyPI 安装
uv pip install duckduckgo-mcp-server
# 如需反爬绕过能力:
uv pip install "duckduckgo-mcp-server[browser]"
然后直接运行 duckduckgo-mcp-server 命令即可。
三种方式均支持通过环境变量 DDG_SAFE_SEARCH 和 DDG_REGION 配置安全搜索级别和默认区域。
1. DuckDuckGo 的局限性:DuckDuckGo 在中国大陆无法直接访问,项目本身没有提供代理配置选项。如果用户在中国大陆使用,需要自行配置网络代理。
2. 无 Web UI:作为纯 MCP 服务器,项目不提供图形界面,所有交互通过 AI 助手发起。对于不熟悉 AI 工具的用户,有一定的上手门槛。
3. 反爬机制的灰色地带:curl_cffi 模拟浏览器 TLS 指纹在技术上存在争议——虽然项目明确声明了用途(通过 Cloudflare 等 Bot 检测),但这一能力也可被用于其他目的。建议用户仅将其用于合法的内容抓取场景。
4. 搜索结果质量依赖 DuckDuckGo:搜索结果的相关性和新鲜度完全取决于 DuckDuckGo 本身,无法更换搜索引擎后端(如 Google/Bing)。
截至 2025 年,MCP 生态正在快速扩张,GitHub 已有数千个 MCP 服务器项目。在这场生态竞争中,搜索能力几乎是所有 AI 应用的基础需求——无论是研究助手、数据分析还是内容创作,「查资料」是第一步。
DuckDuckGo MCP Server 凭借以下几点,在同类项目中保持竞争力:
curl_cffi 反爬方案的加入展示了工程团队对真实生产环境的理解随着 MCP 协议逐渐成为 AI 工具互操作的事实标准,这类基础设施型项目的价值会持续增长。对于 AI 开发者而言,了解并掌握一个搜索 MCP 服务器的工作原理,是构建更复杂 AI Agent 系统的必经之路。