@ericthered926/duckduckgo-mcp-server

中文文档
0.6.0发布于 2025/12/18MITTypeScriptES Module近 30 天下载 15.2万

A Model Context Protocol (MCP) server for DuckDuckGo web and news search

原始使用文档
文档目录28 节
  1. Features
  2. Installation
  3. Prerequisites
  4. Install & Build
  5. Available Tools
  6. duckduckgo_web_search
  7. duckduckgo_news_search
  8. Supported Regions
  9. Configuration
  10. Environment Variables
  11. Examples
  12. Integration
  13. Claude Desktop
  14. MCPO (Open WebUI)
  15. Local Development
  16. Development
  17. Scripts
  18. Debugging
  19. Project Structure
  20. Rate Limits
  21. Troubleshooting
  22. Server won't start
  23. Rate limit errors
  24. No results returned
  25. Debug logging
  26. Credits
  27. What's New in This Fork
  28. License

DuckDuckGo MCP Server

A Model Context Protocol (MCP) server that provides DuckDuckGo search functionality for AI assistants.

npm version

Attribution: This project is a fork of zhsama/duckduckgo-mcp-server, originally created by zhsama. This fork adds English localization, news search, region support, time filtering, and modern tooling.

Features

  • Web Search - Search the web with region-specific and time-filtered results
  • News Search - Search recent news articles with source and date information
  • Token Optimization - Configurable result limits, snippet truncation, and formatting for low-VRAM LLMs
  • SafeSearch - Content filtering (strict, moderate, off)
  • Region Support - Localized results for different countries
  • Time Filtering - Filter results by day, week, month, year
  • Rate Limiting - Configurable rate limits to prevent abuse
  • Configurable Logging - Debug, info, warn, error, or none

Installation

Prerequisites

  • Node.js >= 18.0.0 (tested with Node 24)
  • npm

Install & Build

npm install
npm run build

Available Tools

duckduckgo_web_search

Performs a web search using DuckDuckGo.

ParameterTypeRequiredDefaultDescription
querystringYes-Search query (max 400 characters)
limitnumberNoDDG_MAX_RESULTSOverride default result limit (1-20)
countnumberNoDDG_MAX_RESULTS[Deprecated: use limit] Number of results
safeSearchstringNo"moderate"Filter: "strict", "moderate", or "off"
regionstringNo"wt-wt"Region code (e.g., "us-en", "uk-en", "de-de")
timestringNo"all"Time range: "day", "week", "month", "year", "all"

Example:

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

duckduckgo_news_search

Search for recent news articles.

ParameterTypeRequiredDefaultDescription
querystringYes-News search query (max 400 characters)
limitnumberNoDDG_MAX_RESULTSOverride default result limit (1-20)
countnumberNoDDG_MAX_RESULTS[Deprecated: use limit] Number of results
safeSearchstringNo"moderate"Filter: "strict", "moderate", or "off"
timestringNo"all"Time range: "day", "week", "month", "year", "all"

Example:

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

Supported Regions

CodeRegion
wt-wtWorldwide
us-enUnited States
uk-enUnited Kingdom
ca-enCanada (English)
au-enAustralia
de-deGermany
fr-frFrance
es-esSpain
it-itItaly
jp-jpJapan
br-ptBrazil
mx-esMexico
in-enIndia

Other region codes following the xx-xx format may also work.

Configuration

Environment Variables

Token Optimization (for low-VRAM LLMs)

VariableDefaultDescription
DDG_MAX_RESULTS3Default number of results returned
DDG_MAX_SNIPPET_LENGTH150Max characters per snippet (truncated with ...)
DDG_ENABLE_FULL_CONTENTfalseSet to "true" to disable truncation
DDG_STRIP_EMOJIfalseSet to "true" to remove emojis from titles/text
DDG_OUTPUT_FORMAT"dense"options: "dense", "json", "minimal"

Rate Limiting

VariableDefaultDescription
RATE_LIMIT_PER_SECOND1Maximum requests per second
RATE_LIMIT_PER_MONTH15000Maximum requests per month

Logging

VariableDefaultDescription
LOG_LEVEL"info"Logging level: debug, info, warn, error, none

Examples

# 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

Integration

Claude Desktop

Add to your Claude Desktop config:

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

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

MCPO (Open WebUI)

For MCPO integration:

{
  "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"
      }
    }
  }
}

Local Development

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

Development

Scripts

CommandDescription
npm run buildCompile TypeScript
npm run startRun the server
npm run devWatch mode for development
npm run lintRun ESLint + Prettier check
npm run lint:fixAuto-fix lint issues
npm run formatFormat code with Prettier
npm run testRun tests
npm run typecheckTypeScript type checking only

Debugging

Use the MCP Inspector:

npx @modelcontextprotocol/inspector node build/index.js

Project Structure

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)

Rate Limits

Default rate limits are conservative to avoid being blocked by DuckDuckGo:

  • 1 request per second - Prevents rate limiting
  • 15,000 requests per month - Reasonable monthly cap

Adjust via environment variables if needed for your use case.

Troubleshooting

Server won't start

  1. Check Node.js version: node --version (should be >= 18)
  2. Rebuild: npm run build
  3. Check for TypeScript errors in build output

Rate limit errors

  • Wait for the limit window to reset (1 second for per-second, or adjust limits)
  • Check if multiple instances are sharing the same counter

No results returned

  • Try a different query or remove time filters
  • Check if SafeSearch is blocking results
  • DuckDuckGo may return no results for very specific queries

Debug logging

Enable debug logs to see detailed request information:

LOG_LEVEL=debug npm run start

Credits

This project is a fork of zhsama/duckduckgo-mcp-server, originally created by zhsama.

What's New in This Fork

  • Token optimization - Configurable result limits & snippet truncation for low-VRAM LLMs
  • Dense output format - Single-line results to minimize token usage
  • URL cleaning - Strips tracking params (utm_*, fbclid, gclid, etc.)
  • limit parameter - LLM can override defaults when more context needed
  • English localization (all comments and output)
  • News search tool (duckduckgo_news_search)
  • Region/locale support for localized results
  • Time range filtering
  • Configurable logging via LOG_LEVEL
  • Modern ESLint 9.x flat config
  • Prettier formatting
  • Husky pre-commit hooks
  • Comprehensive test suite
  • Strict TypeScript configuration

License

MIT - See LICENSE for details.

版本与发布记录

@ericthered926/duckduckgo-mcp-server 共发布 3 个版本,首次发布于 2025/12/18;过去 12 个月发布了 3 个版本。

版本发布日期距今
0.6.0latest2025/12/1810 个月前
0.5.02025/12/1810 个月前
0.3.02025/12/1810 个月前

关于 @ericthered926/duckduckgo-mcp-server 的常见问题

@ericthered926/duckduckgo-mcp-server 是什么?

A Model Context Protocol (MCP) server for DuckDuckGo web and news search

如何安装 @ericthered926/duckduckgo-mcp-server?

在项目目录运行 npm install @ericthered926/duckduckgo-mcp-server,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 duckduckgo-mcp-server,可以用 npx duckduckgo-mcp-server 直接运行。

@ericthered926/duckduckgo-mcp-server 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ericthered926/duckduckgo-mcp-server 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@ericthered926/duckduckgo-mcp-server 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ericthered926/duckduckgo-mcp-server 可以商用吗?

@ericthered926/duckduckgo-mcp-server 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ericthered926/duckduckgo-mcp-server 的下载量有多少?

根据 npm 官方下载统计,@ericthered926/duckduckgo-mcp-server 在 2026/10/14 – 2026/11/12 这 30 天内被下载 151,858 次,日均约 5,062 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ericthered926/duckduckgo-mcp-server 还在维护吗?

最新版本 0.6.0 发布于 2025/12/18(10 个月前);至今共发布 3 个版本,其中过去 12 个月发布了 3 个;首次发布于 2025/12/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。