DuckDuckGo搜索服务器

一个提供DuckDuckGo搜索功能的MCP服务器,适用于AI助手,支持区域化结果、时间过滤和内容安全过滤。

  • by ericthered926
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ericthered926/duckduckgo-mcp-server

使用说明

DuckDuckGo MCP服务器

A. 模型上下文协议(MCP) 为AI助手提供DuckDuckGo搜索功能的服务器。

归因这个项目是 zhsama/duckduckgo mcp服务器,最初由 zhsama。这个分支增加了英语本地化、新闻搜索、地区支持、时间过滤和现代工具。

特性

  • 网页搜索 -使用特定地区和时间过滤的结果搜索网络
  • 新闻搜索 -搜索包含来源和日期信息的最新新闻文章
  • 令牌优化 -低VRAM LLM的可配置结果限制、代码段截断和格式化
  • 安全搜索 -内容过滤(严格、适度、关闭)
  • 区域支持 -不同国家的本地化结果
  • 时间过滤 -按天、周、月、年筛选结果
  • 速率限制 -可配置的速率限制,以防止滥用
  • 可配置日志记录 -调试、信息、警告、错误或无

安装

先决条件

  • Node.js>=18.0.0(使用Node 24测试)
  • npm

安装和构建

npm install
npm run build

可用工具

duckduckgo_web_search

使用DuckDuckGo执行网络搜索。

参数 类型 必填 默认 说明
query string 是 - 搜索查询(最多400个字符)
limit number No DDG_MAX_RESULTS 覆盖默认结果限制(1-20)
count number No DDG_MAX_RESULTS [已弃用:使用 limit]结果数量
safeSearch string 否 “中等” 筛选器:“严格”、“中等”或“关闭”
region 字符串 否 “WT-WT” 地区代码(例如,“US-EN”,“UK-EN”,“DE-DE”)
time string 否 “全部” 时间范围:“日”、“周”、“月”、“年”、“全部”

例子:

{
  "query": "TypeScript best practices",
  "count": 5,
  "region": "us-en",
  "time": "month"
}

duckduckgo_news_search

搜索最近的新闻文章。

参数 类型 必填 默认 说明
query string 是 - 新闻搜索查询(最多400个字符)
limit number No DDG_MAX_RESULTS 覆盖默认结果限制(1-20)
count number No DDG_MAX_RESULTS [已弃用:使用 limit]结果数量
safeSearch string 否 “中等” 筛选器:“严格”、“中等”或“关闭”
time string 否 “全部” 时间范围:“日”、“周”、“月”、“年”、“全部”

例子:

{
  "query": "artificial intelligence",
  "count": 10,
  "time": "week"
}

支持的地区

代码 地区
wt-wt 全球范围
us-en 美国
uk-en 联合王国
ca-en 加拿大(英语)
au-en 澳大利亚
de-de 德国
fr-fr 法国
es-es 西班牙
it-it 意大利
jp-jp 日本
br-pt 巴西
mx-es 墨西哥
in-en 印度

其他地区代码如下 xx-xx 格式也可以工作。

配置

环境变量

令牌优化(适用于低VRAM LLM)

变量 默认值 描述
DDG_MAX_RESULTS 3 返回的默认结果数
DDG_MAX_SNIPPET_LENGTH 150 每个代码段的最大字符数(用…截断)
DDG_ENABLE_FULL_CONTENT false 设置为“true”以禁用截断
DDG_STRIP_EMOJI false 设置为“true”以从标题/文本中删除表情符号
DDG_OUTPUT_FORMAT “密集” 选项:“密集”、“json”、“最小”

速率限制

变量 默认值 描述
RATE_LIMIT_PER_SECOND 1 每秒最大请求数
RATE_LIMIT_PER_MONTH 15000 每月最大请求数

日志记录

变量 默认值 描述
LOG_LEVEL “info” 日志级别:调试、信息、警告、错误、无

例子

# Token-optimized for low VRAM (12GB RTX 5070)
DDG_MAX_RESULTS=3 DDG_MAX_SNIPPET_LENGTH=150 npm run start

# Full content for high-VRAM systems
DDG_MAX_RESULTS=10 DDG_MAX_SNIPPET_LENGTH=500 DDG_ENABLE_FULL_CONTENT=true npm run start

# Debug logging
LOG_LEVEL=debug npm run start

整合

克劳德桌面版

添加到您的Claude Desktop配置中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
窗户: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "duckduckgo": {
      "command": "npx",
      "args": ["-y", "@ericthered926/duckduckgo-mcp-server"]
    }
  }
}

MCPO(开放式WebUI)

对于 MCPO 集成:

{
  "mcpServers": {
    "duckduckgo": {
      "command": "npx",
      "args": ["-y", "@ericthered926/duckduckgo-mcp-server"],
      "env": {
        "DDG_MAX_RESULTS": "3",
        "DDG_MAX_SNIPPET_LENGTH": "150",
        "DDG_ENABLE_FULL_CONTENT": "false"
      }
    }
  }
}

本地开发

{
  "mcpServers": {
    "duckduckgo": {
      "command": "node",
      "args": ["/path/to/duckduckgo-mcp-server/build/index.js"],
      "env": {
        "LOG_LEVEL": "debug"
      }
    }
  }
}

发展

脚本

命令 描述
npm run build 编译TypeScript
npm run start 运行服务器
npm run dev 开发观看模式
npm run lint 运行ESLint+预处理检查
npm run lint:fix 自动修复棉绒问题
npm run format 使用Prettier格式化代码
npm run test 运行测试
npm run typecheck 仅用于TypeScript类型检查

调试

使用 MCP检查员:

npx @modelcontextprotocol/inspector node build/index.js

项目结构

duckduckgo-mcp-server/
├── src/
│   └── index.ts          # Main server (web + news search)
├── test/
│   └── server.test.js    # Smoke tests
├── build/                 # Compiled output
├── .husky/               # Pre-commit hooks
├── eslint.config.js      # ESLint 9.x flat config
├── tsconfig.json         # Strict TypeScript config
├── .prettierrc           # Prettier formatting
├── .editorconfig         # Editor settings
└── .nvmrc                # Node version (24)

速率限制

默认利率限制是保守的,以避免被DuckDuckGo阻止:

  • 每秒1个请求 -防止速率限制
  • 每月15000次请求 -合理的月度上限

如果您的用例需要,可以通过环境变量进行调整。

故障排除

服务器无法启动

  1. 检查Node.js版本: node --version (应大于等于18)
  2. 重建: npm run build
  3. 检查构建输出中的TypeScript错误

速率限制错误

  • 等待限制窗口重置(每秒1秒,或调整限制)
  • 检查多个实例是否共享同一计数器

未返回任何结果

  • 尝试其他查询或删除时间筛选器
  • 检查安全搜索是否阻止结果
  • DuckDuckGo可能不会对非常具体的查询返回任何结果

调试记录

启用调试日志以查看详细的请求信息:

LOG_LEVEL=debug npm run start

积分

这个项目是 zhsama/duckduckgo mcp服务器,最初由 zhsama.

这个叉子有什么新功能

  • 令牌优化 -低VRAM LLM的可配置结果限制和代码段截断
  • 密集输出格式 -单行结果,最大限度地减少令牌使用
  • URL清理 -条带跟踪参数(utm_*、fbclid、gclid等)
  • limit 参数 -当需要更多上下文时,LLM可以覆盖默认值
  • 英语本地化(所有评论和输出)
  • 新闻搜索工具(duckduckgo_news_search)
  • 本地化结果的区域/地区支持
  • 时间范围过滤
  • 可通过以下方式配置日志记录 LOG_LEVEL
  • 现代ESLint 9.x平面配置
  • 预处理格式
  • Husky预提交挂钩
  • 全面的测试套件
  • 严格的TypeScript配置

许可证

麻省理工学院-参见 许可证 了解详情。