5-stage deep research pipeline using DuckDuckGo MCP — free, no API key, no rate limits
Project description
🧠 ddg-deep-research
5-stage deep research pipeline using DuckDuckGo MCP — free, no API key, no rate limits.
pip install ddg-deep-research
ddg-deep-research search "your query"
Why this exists
Every other deep research agent requires OpenAI / Anthropic / Google API keys — or runs expensive local models. This one uses DuckDuckGo MCP for both search and content extraction. Completely free. Zero API keys. Zero rate limits.
Pipeline
Stage 1: Decompose ──→ 3-6 sub-questions + search strategy
Stage 2: Gather ──→ DuckDuckGo MCP search (parallel, unlimited)
Stage 3: Deep Read ──→ DuckDuckGo MCP fetch_content + browser_use
Stage 4: Verify ──→ Cross-reference claims, flag contradictions
Stage 5: Synthesize ──→ Cited brief.md + .provenance.md sidecar
Quick Start
# Search the web (free, no API key!)
ddg-deep-research search "latest advances in AI reasoning"
# Fetch a webpage
ddg-deep-research fetch "https://example.com/article"
Full Pipeline
# Stage 1: Break question into sub-questions (template)
ddg-deep-research decompose --question "How is RAG evolving?" --output plan.json
# Stage 2: Search
ddg-deep-research ddg_search --query "RAG architectures 2026" --output results.json
# Stage 3: Fetch content
ddg-deep-research ddg_fetch --url "https://..." --output-dir extracted/
# Stage 4: Merge results
ddg-deep-research merge --input-dir raw/ --output merged.json
# Stage 5: Clean & verify
ddg-deep-research clean --input extracted/ --output cleaned/
ddg-deep-research verify --input cleaned/cleaned.json --output verified.json
# Stage 6: Generate final brief
ddg-deep-research synthesize --verified verified.json --question "..." --output-dir outputs/ --today $(date +%Y-%m-%d)
Parallel DAG Execution
ddg-deep-research dag --plan workflow.json --verbose
Input JSON:
{
"tasks": [
{"id": "search_1", "depends_on": [], "command": "ddg_search --query ..."},
{"id": "fetch_1", "depends_on": ["search_1"], "command": "ddg_fetch --url ..."},
{"id": "synthesize", "depends_on": ["search_1", "fetch_1"], "command": "synthesize ..."}
]
}
Python API
import asyncio
from ddg_deep_research.ddg_mcp import search_web, fetch_content
async def main():
results = await search_web("your query", max_results=10)
for r in results:
print(f"{r['title']}: {r['url']}")
content = await fetch_content("https://example.com")
print(content[:500])
asyncio.run(main())
Requirements
- Python 3.10+
uvinstalled (for duckduckgo-mcp-server):curl -LsSf https://astral.sh/uv/install.sh | sh- No API keys. No subscriptions. Nothing.
How it works
This package wraps duckduckgo-mcp-server via Python's MCP stdio transport. All search and content extraction goes through DuckDuckGo's free anonymous API. The 5-stage pipeline is modeled after production research agents but without the API costs.
Comparison
| Feature | OpenAI Deep Research | LangChain Deep Research | ddg-deep-research |
|---|---|---|---|
| API key needed | ✅ $200/mo | ✅ OpenAI key | ❌ Free |
| Search engine | Bing/Browser | Custom | DuckDuckGo |
| Content extraction | Built-in | Built-in | DuckDuckGo MCP |
| Provenance tracking | ✅ | ✅ | ✅ .provenance.md |
| DAG orchestration | ❌ | ❌ | ✅ Built-in |
| Open source | ❌ | ✅ | ✅ MIT |
pip install |
❌ | ❌ | ✅ pip install |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ddg_deep_research-0.2.0.tar.gz.
File metadata
- Download URL: ddg_deep_research-0.2.0.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9aa6db0f04a77e77fc3acd4ea34d10d8c8bc7dde8f2945ec949894a9b1d75b5
|
|
| MD5 |
b92a44576e82c97997680f26e418ab01
|
|
| BLAKE2b-256 |
2eb613b93265c8fc43f8fcc14124f6f6842f75749dbbd6fbe1d59e52acbdb2b6
|
File details
Details for the file ddg_deep_research-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ddg_deep_research-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa5c034d5fbcc74bce3d0af8c3622b4f19bcbb63f3a9ea53b39cfb401245b9f9
|
|
| MD5 |
6e0bec2acebedc1d0e332d410f262b8f
|
|
| BLAKE2b-256 |
9a9c033481e8a628a638447c7e6e6448ea0687bb2af9cbe162fc6f7a78c63be9
|