Install
$ agentstack add mcp-ericthered926-duckduckgo-mcp-server ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
DuckDuckGo MCP Server
A Model Context Protocol (MCP) server that provides DuckDuckGo search functionality for AI assistants.
[](https://www.npmjs.com/package/@ericthered926/duckduckgo-mcp-server)
> 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.
| Parameter | Type | Required | Default | Description | | ------------ | ------ | -------- | --------------- | ------------------------------------------------- | | query | string | Yes | - | Search query (max 400 characters) | | limit | number | No | DDGMAXRESULTS | Override default result limit (1-20) | | count | number | No | DDGMAXRESULTS | [Deprecated: use limit] Number of results | | safeSearch | string | No | "moderate" | Filter: "strict", "moderate", or "off" | | region | string | No | "wt-wt" | Region code (e.g., "us-en", "uk-en", "de-de") | | time | string | No | "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.
| Parameter | Type | Required | Default | Description | | ------------ | ------ | -------- | --------------- | ------------------------------------------------- | | query | string | Yes | - | News search query (max 400 characters) | | limit | number | No | DDGMAXRESULTS | Override default result limit (1-20) | | count | number | No | DDGMAXRESULTS | [Deprecated: use limit] Number of results | | safeSearch | string | No | "moderate" | Filter: "strict", "moderate", or "off" | | time | string | No | "all" | Time range: "day", "week", "month", "year", "all" |
Example:
{
"query": "artificial intelligence",
"count": 10,
"time": "week"
}
Supported Regions
| Code | Region | | ------- | ---------------- | | wt-wt | Worldwide | | us-en | United States | | uk-en | United Kingdom | | ca-en | Canada (English) | | au-en | Australia | | de-de | Germany | | fr-fr | France | | es-es | Spain | | it-it | Italy | | jp-jp | Japan | | br-pt | Brazil | | mx-es | Mexico | | in-en | India |
Other region codes following the xx-xx format may also work.
Configuration
Environment Variables
Token Optimization (for low-VRAM LLMs)
| Variable | Default | Description | | ------------------------- | ------- | ----------------------------------------------- | | DDG_MAX_RESULTS | 3 | Default number of results returned | | DDG_MAX_SNIPPET_LENGTH | 150 | Max characters per snippet (truncated with ...) | | DDG_ENABLE_FULL_CONTENT | false | Set to "true" to disable truncation | | DDG_STRIP_EMOJI | false | Set to "true" to remove emojis from titles/text | | DDG_OUTPUT_FORMAT | "dense" | options: "dense", "json", "minimal" |
Rate Limiting
| Variable | Default | Description | | ----------------------- | ------- | --------------------------- | | RATE_LIMIT_PER_SECOND | 1 | Maximum requests per second | | RATE_LIMIT_PER_MONTH | 15000 | Maximum requests per month |
Logging
| Variable | Default | Description | | ----------- | ------- | --------------------------------------------- | | 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
| Command | Description | | ------------------- | ----------------------------- | | npm run build | Compile TypeScript | | npm run start | Run the server | | npm run dev | Watch mode for development | | npm run lint | Run ESLint + Prettier check | | npm run lint:fix | Auto-fix lint issues | | npm run format | Format code with Prettier | | npm run test | Run tests | | npm run typecheck | TypeScript 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
- Check Node.js version:
node --version(should be >= 18) - Rebuild:
npm run build - 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.)
limitparameter - 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](LICENSE) for details.
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ericthered926
- Source: ericthered926/duckduckgo-mcp-server
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.