DuckDuckGo搜索服务

一个提供DuckDuckGo网络搜索能力、内容抓取和解析的模型上下文协议(MCP)服务器。

作者 By nickclyde
本地部署 网络搜索 内容抓取
GitHub

DuckDuckGo搜索MCP服务器

一种模型上下文协议(MCP)服务器,通过DuckDuckGo提供网络搜索功能,并具有用于内容获取和解析的附加功能。

快速开始

BASH``` 1uvx duckduckgo-mcp-server


## 特性


- **网页搜索**:使用高级速率限制和结果格式搜索DuckDuckGo
- **内容获取**:通过智能文本提取检索和解析网页内容
- **速率限制**:内置对搜索和内容获取速率限制的保护
- **错误处理**:全面的错误处理和记录
- **LLM友好输出**:专门为大型语言模型使用而格式化的结果


## 安装


使用以下命令从PyPI安装 `uv`:


BASH```
1uv pip install duckduckgo-mcp-server

用法

使用Claude Desktop运行

  1. 下载 克劳德桌面版
  2. 创建或编辑您的Claude Desktop配置:
  • 在macOS上: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 在Windows上: %APPDATA%\Claude\claude_desktop_config.json

添加以下配置:

基本配置(无安全搜索,无默认区域):

JSON``` 1 2 3 4 5 6 7 8{ “mcpServers”: { “ddg-search”: { “command”: “uvx”, “args”: [“duckduckgo-mcp-server”] } } }


**使用安全搜索和区域配置:**


JSON```
1
2
3
4
5
6
7
8
9
10
11
12{
    "mcpServers": {
        "ddg-search": {
            "command": "uvx",
            "args": ["duckduckgo-mcp-server"],
            "env": {
                "DDG_SAFE_SEARCH": "STRICT",
                "DDG_REGION": "cn-zh"
            }
        }
    }
}

配置选项:

  • DDG_SAFE_SEARCH:安全搜索过滤级别(可选)

  • STRICT:最大内容过滤(kp=1)

  • MODERATE:平衡过滤(kp=-1,如果未指定,则默认值)

  • OFF:无内容过滤(kp=-2)

  • DDG_REGION:默认地区/语言代码(可选,示例如下)

  • us-en:美国(英语)

  • cn-zh:中国(中文)

  • jp-ja:日本(日语)

  • wt-wt:无特定区域

  • 为DuckDuckGo的默认行为留空

  1. 重新启动克劳德桌面

使用Claude代码运行

  1. 下载 克劳德代码
  2. 确保 uvenv 已安装 uvx 命令可用
  3. 添加MCP服务器: claude mcp add ddg-search uvx duckduckgo-mcp-server

使用SSE或流式HTTP运行

服务器支持与其他MCP客户端一起使用的替代传输:

BASH``` 1 2 3 4# SSE transport uvx duckduckgo-mcp-server —transport sse

Streamable HTTP transport

uvx duckduckgo-mcp-server —transport streamable-http


默认传输方式为 `stdio`,由Claude Desktop和Claude Code使用。


### 发展


对于当地发展:


BASH```
1
2
3
4
5
6
7
8
9
10
11
12# Install dependencies
uv sync
# Run with the MCP Inspector
mcp dev src/duckduckgo_mcp_server/server.py
# Install locally for testing with Claude Desktop
mcp install src/duckduckgo_mcp_server/server.py
# Run all tests
uv run python -m pytest src/duckduckgo_mcp_server/ -v
# Run only unit tests
uv run python -m pytest src/duckduckgo_mcp_server/test_server.py -v
# Run only e2e tests
uv run python -m pytest src/duckduckgo_mcp_server/test_e2e.py -v

可用工具

1.搜索工具

PYTHON``` 1async def search(query: str, max_results: int = 10, region: str = "") -> str


在DuckDuckGo上执行网络搜索并返回格式化结果。


**参数:**


- `query`:搜索查询字符串
- `max_results`:要返回的最大结果数(默认值:10)
- `region`:(可选)覆盖默认值的地区/语言代码。留空以使用配置的默认区域。


**地区代码示例:**


- `us-en`:美国(英语)
- `cn-zh`:中国(中文)
- `jp-ja`:日本(日语)
- `de-de`:德国(德语)
- `fr-fr`:法国(法语)
- `wt-wt`:无特定区域


**退货:**
包含带有标题、URL和片段的搜索结果的格式化字符串。


**示例用法:**


- 使用默认设置搜索: `search("python tutorial")`
- 按特定地区搜索: `search("latest news", region="jp-ja")` 日本新闻


### 2.内容获取工具


PYTHON```
1async def fetch_content(url: str) -> str

从网页中获取和解析内容。

参数:

  • url:从中获取内容的网页URL

退货: 已清理并格式化网页中的文本内容。

详细功能

速率限制

  • 搜索:每分钟限制30个请求
  • 内容获取:每分钟限制20个请求
  • 自动队列管理和等待时间

结果处理

  • 删除广告和无关内容
  • 清理DuckDuckGo重定向URL
  • 格式化结果以实现最佳LLM消耗
  • 适当截断长内容

内容安全

  • 安全搜索过滤:在服务器启动时通过配置 DDG_SAFE_SEARCH 环境变量

  • 由管理员控制,不可由AI助手修改

  • 根据所选级别过滤不合适的内容

  • 使用DuckDuckGo官方 kp 参数

  • 区域本地化:

  • 通过设置默认区域 DDG_REGION 环境变量

  • AI助手可以根据搜索请求覆盖

  • 提高特定地理区域的结果相关性

错误处理

  • 全面的错误捕获和报告
  • 通过MCP上下文进行详细日志记录
  • 在速率限制或超时方面表现良好

贡献

欢迎问题和拉取请求!一些有待改进的领域:

  • 增强的内容解析选项
  • 用于频繁访问内容的缓存层
  • 额外的限速策略

许可证

该项目根据MIT许可证获得许可。