DuckDuckGo MCP Server
by misanthropic-ai
Verified
# ddg-mcp MCP server
DuckDuckGo search API MCP - A server that provides DuckDuckGo search capabilities through the Model Context Protocol.
## Components
### Prompts
The server provides the following prompts:
- **search-results-summary**: Creates a summary of DuckDuckGo search results
- Required "query" argument for the search term
- Optional "style" argument to control detail level (brief/detailed)
### Tools
The server implements the following DuckDuckGo search tools:
- **ddg-text-search**: Search the web for text results using DuckDuckGo
- Required: "keywords" - Search query keywords
- Optional: "region", "safesearch", "timelimit", "max_results"
- **ddg-image-search**: Search the web for images using DuckDuckGo
- Required: "keywords" - Search query keywords
- Optional: "region", "safesearch", "timelimit", "size", "color", "type_image", "layout", "license_image", "max_results"
- **ddg-news-search**: Search for news articles using DuckDuckGo
- Required: "keywords" - Search query keywords
- Optional: "region", "safesearch", "timelimit", "max_results"
- **ddg-video-search**: Search for videos using DuckDuckGo
- Required: "keywords" - Search query keywords
- Optional: "region", "safesearch", "timelimit", "resolution", "duration", "license_videos", "max_results"
- **ddg-ai-chat**: Chat with DuckDuckGo AI
- Required: "keywords" - Message or question to send to the AI
- Optional: "model" - AI model to use (options: "gpt-4o-mini", "llama-3.3-70b", "claude-3-haiku", "o3-mini", "mistral-small-3")
## Installation
### Prerequisites
- Python 3.9 or higher
- [uv](https://github.com/astral-sh/uv) (recommended) or pip
### Install from PyPI
```bash
# Using uv
uv install ddg-mcp
# Using pip
pip install ddg-mcp
```
### Install from Source
1. Clone the repository:
```bash
git clone https://github.com/misanthropic-ai/ddg-mcp.git
cd ddg-mcp
```
2. Install the package:
```bash
# Using uv
uv install -e .
# Using pip
pip install -e .
```
## Configuration
### Required Dependencies
The server requires the `duckduckgo-search` package, which will be installed automatically when you install `ddg-mcp`.
If you need to install it manually:
```bash
uv install duckduckgo-search
# or
pip install duckduckgo-search
```
## DuckDuckGo Search Parameters
### Common Parameters
These parameters are available for most search types:
- **region**: Region code for localized results (default: "wt-wt")
- Examples: "us-en" (US English), "uk-en" (UK English), "ru-ru" (Russian)
- See [DuckDuckGo regions](https://duckduckgo.com/params) for more options
- **safesearch**: Content filtering level (default: "moderate")
- "on": Strict filtering
- "moderate": Moderate filtering
- "off": No filtering
- **timelimit**: Time range for results
- "d": Last day
- "w": Last week
- "m": Last month
- "y": Last year (not available for news/videos)
- **max_results**: Maximum number of results to return (default: 10)
### Search Operators
You can use these operators in your search keywords:
- `cats dogs`: Results about cats or dogs
- `"cats and dogs"`: Results for exact term "cats and dogs"
- `cats -dogs`: Fewer dogs in results
- `cats +dogs`: More dogs in results
- `cats filetype:pdf`: PDFs about cats (supported: pdf, doc(x), xls(x), ppt(x), html)
- `dogs site:example.com`: Pages about dogs from example.com
- `cats -site:example.com`: Pages about cats, excluding example.com
- `intitle:dogs`: Page title includes the word "dogs"
- `inurl:cats`: Page URL includes the word "cats"
### Image Search Specific Parameters
- **size**: "Small", "Medium", "Large", "Wallpaper"
- **color**: "color", "Monochrome", "Red", "Orange", "Yellow", "Green", "Blue", "Purple", "Pink", "Brown", "Black", "Gray", "Teal", "White"
- **type_image**: "photo", "clipart", "gif", "transparent", "line"
- **layout**: "Square", "Tall", "Wide"
- **license_image**: "any", "Public", "Share", "ShareCommercially", "Modify", "ModifyCommercially"
### Video Search Specific Parameters
- **resolution**: "high", "standard"
- **duration**: "short", "medium", "long"
- **license_videos**: "creativeCommon", "youtube"
### AI Chat Models
- **gpt-4o-mini**: OpenAI's GPT-4o mini model
- **llama-3.3-70b**: Meta's Llama 3.3 70B model
- **claude-3-haiku**: Anthropic's Claude 3 Haiku model
- **o3-mini**: OpenAI's O3 mini model
- **mistral-small-3**: Mistral AI's small model
## Quickstart
### Install
#### Claude Desktop
On MacOS: `~/Library/Application\ Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`
<details>
<summary>Development/Unpublished Servers Configuration</summary>
```
"mcpServers": {
"ddg-mcp": {
"command": "uv",
"args": [
"--directory",
"/Users/shannon/Workspace/artivus/ddg-mcp",
"run",
"ddg-mcp"
]
}
}
```
</details>
<details>
<summary>Published Servers Configuration</summary>
```
"mcpServers": {
"ddg-mcp": {
"command": "uvx",
"args": [
"ddg-mcp"
]
}
}
```
</details>
## Usage Examples
### Text Search
```
Use the ddg-text-search tool to search for "climate change solutions"
```
Advanced example:
```
Use the ddg-text-search tool to search for "renewable energy filetype:pdf site:edu" with region "us-en", safesearch "off", timelimit "y", and max_results 20
```
### Image Search
```
Use the ddg-image-search tool to find images of "renewable energy" with color set to "Green"
```
Advanced example:
```
Use the ddg-image-search tool to find images of "mountain landscape" with size "Large", color "Blue", type_image "photo", layout "Wide", and license_image "Public"
```
### News Search
```
Use the ddg-news-search tool to find recent news about "artificial intelligence" from the last day
```
Advanced example:
```
Use the ddg-news-search tool to search for "space exploration" with region "uk-en", timelimit "w", and max_results 15
```
### Video Search
```
Use the ddg-video-search tool to find videos about "machine learning tutorials" with duration set to "medium"
```
Advanced example:
```
Use the ddg-video-search tool to search for "cooking recipes" with resolution "high", duration "short", license_videos "creativeCommon", and max_results 10
```
### AI Chat
```
Use the ddg-ai-chat tool to ask "What are the latest developments in quantum computing?" using the claude-3-haiku model
```
### Search Results Summary
```
Use the search-results-summary prompt with query "space exploration" and style "detailed"
```
## Claude config
"ddg-mcp": {
"command": "uv",
"args": [
"--directory",
"/PATH/TO/YOUR/INSTALLATION/ddg-mcp",
"run",
"ddg-mcp"
]
},
## Development
### Building and Publishing
To prepare the package for distribution:
1. Sync dependencies and update lockfile:
```bash
uv sync
```
2. Build package distributions:
```bash
uv build
```
This will create source and wheel distributions in the `dist/` directory.
3. Publish to PyPI:
```bash
uv publish
```
Note: You'll need to set PyPI credentials via environment variables or command flags:
- Token: `--token` or `UV_PUBLISH_TOKEN`
- Or username/password: `--username`/`UV_PUBLISH_USERNAME` and `--password`/`UV_PUBLISH_PASSWORD`
### Automated Publishing with GitHub Actions
This repository includes a GitHub Actions workflow for automated publishing to PyPI. The workflow is triggered when:
1. A new GitHub Release is created
2. The workflow is manually triggered via the GitHub Actions interface
To set up automated publishing:
1. Generate a PyPI API token:
- Go to https://pypi.org/manage/account/token/
- Create a new token with scope limited to the `ddg-mcp` project
- Copy the token value (you'll only see it once)
2. Add the token to your GitHub repository secrets:
- Go to your repository on GitHub
- Navigate to Settings > Secrets and variables > Actions
- Click "New repository secret"
- Name: `PYPI_API_TOKEN`
- Value: Paste your PyPI token
- Click "Add secret"
3. To publish a new version:
- Update the version number in `pyproject.toml`
- Create a new release on GitHub or manually trigger the workflow
### Debugging
Since MCP servers run over stdio, debugging can be challenging. For the best debugging
experience, we strongly recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector).
You can launch the MCP Inspector via [`npm`](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) with this command:
```bash
npx @modelcontextprotocol/inspector uv --directory /path/to/your/ddg-mcp run ddg-mcp
```
Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.