DuckDuckGo搜索MCP服务器
一种模型上下文协议(MCP)服务器,通过DuckDuckGo提供网络搜索功能,并具有用于内容获取和解析的附加功能。
快速开始
BASH``` 1uvx duckduckgo-mcp-server
## 特性
- **网页搜索**:使用高级速率限制和结果格式搜索DuckDuckGo
- **内容获取**:通过智能文本提取检索和解析网页内容
- **速率限制**:内置对搜索和内容获取速率限制的保护
- **错误处理**:全面的错误处理和记录
- **LLM友好输出**:专门为大型语言模型使用而格式化的结果
## 安装
使用以下命令从PyPI安装 `uv`:
BASH```
1uv pip install duckduckgo-mcp-server
用法
使用Claude Desktop运行
- 下载 克劳德桌面版
- 创建或编辑您的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的默认行为留空
- 重新启动克劳德桌面
使用Claude代码运行
使用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许可证获得许可。