Web research MCP server: search, fetch, and compound research tools
Project description
mcp-research
A standalone MCP (Model Context Protocol) server providing web research tools. Three battle-tested tools for AI assistants: search the web, fetch & convert pages to markdown, and run compound multi-source research — all via the MCP stdio protocol.
Tools
| Tool | Description |
|---|---|
web_search |
3-tier search cascade: Brave API → DuckDuckGo → HTML scraper |
fetch_url |
Fetch any URL → clean markdown, with SSRF protection and 24h cache |
research |
Compound pipeline: query rewrite → search → parallel fetch → summarize → synthesize |
All tools are read-only — they fetch and transform public web content, never modify anything.
Install
pip install mcp-research
Or run directly with uvx (zero-install):
uvx mcp-research
Configuration
All configuration is via environment variables — no config files needed.
| Variable | Default | Description |
|---|---|---|
BRAVE_API_KEY |
(empty) | Brave Search API key. Falls back to DuckDuckGo if unset. |
OLLAMA_URL |
http://localhost:11434 |
Ollama endpoint for summarization/synthesis. Set empty to disable. |
OLLAMA_MODEL |
qwen2.5:14b |
Model to use for summarization and synthesis. |
MCP_RESEARCH_CACHE_DIR |
~/.mcp-research/cache/ |
URL fetch cache directory. |
MCP_RESEARCH_CACHE_TTL |
24 |
Cache TTL in hours. |
MCP_RESEARCH_LOG_DIR |
~/.mcp-research/logs/ |
Search log directory (NDJSON). |
MCP_RESEARCH_MAX_RESULTS |
10 |
Default max search results. |
Usage with Claude Code
Add to your Claude Code MCP config (~/.claude/settings.json or project .mcp.json):
{
"mcpServers": {
"research": {
"command": "uvx",
"args": ["mcp-research"],
"env": {
"BRAVE_API_KEY": "BSA...",
"OLLAMA_URL": "http://localhost:11434"
}
}
}
}
Usage with Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"research": {
"command": "uvx",
"args": ["mcp-research"],
"env": {
"BRAVE_API_KEY": "BSA..."
}
}
}
}
Tool Details
web_search
web_search(query, max_results=5, summarize=False, auto_fetch_top=False)
Searches the web using a 3-tier cascade for maximum reliability:
- Brave Search API — fast, high quality (requires
BRAVE_API_KEY) - DuckDuckGo library — no API key needed, retries on rate limit
- DuckDuckGo HTML scraper — last-resort fallback
Options:
summarize: Use Ollama to summarize results (requires running Ollama)auto_fetch_top: Also fetch and return the full content of the top result
fetch_url
fetch_url(url, summarize=False, max_chars=50000)
Fetches a URL and converts it to clean markdown:
- SSRF protection: Blocks localhost, private IPs, non-HTTP schemes
- Smart retry: Exponential backoff on 429/5xx, per-hop redirect validation
- 24h cache: SHA-256 keyed, configurable TTL
- Content support: HTML → markdown, JSON → code block, binary → rejected
- Smart truncation: Breaks at heading/paragraph boundaries, not mid-text
research
research(query, depth="standard", context="")
Compound research pipeline:
- Query rewrite — Ollama optimizes your question into search keywords
- Web search — finds relevant pages (with zero-result retry expansion)
- Parallel fetch — fetches top N pages concurrently
- Summarize — Ollama summarizes each page
- Synthesize — Ollama produces a final cited answer
Depth levels:
| Depth | Pages | Synthesis |
|---|---|---|
quick |
2 | No |
standard |
5 | Yes |
deep |
10 | Yes |
All steps gracefully degrade without Ollama — you still get search results and raw page content.
Development
git clone https://github.com/MABAAM/Maibaamcrawler.git
cd Maibaamcrawler
pip install -e .
python -m mcp_research
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 mcp_research-0.1.0.tar.gz.
File metadata
- Download URL: mcp_research-0.1.0.tar.gz
- Upload date:
- Size: 67.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec53395a91be1353baace818948af42f53440a04710d9bfadc37ce2dfd623531
|
|
| MD5 |
ac1e5e434f5305a37ba9d156312e905f
|
|
| BLAKE2b-256 |
429e433b53d5817b1a51f9cd8f6d12487cb14d9f65c2c05dd6cf6438bb32e473
|
Provenance
The following attestation bundles were made for mcp_research-0.1.0.tar.gz:
Publisher:
publish.yml on MABAAM/Maibaamcrawler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_research-0.1.0.tar.gz -
Subject digest:
ec53395a91be1353baace818948af42f53440a04710d9bfadc37ce2dfd623531 - Sigstore transparency entry: 1253392940
- Sigstore integration time:
-
Permalink:
MABAAM/Maibaamcrawler@b603c8c11fa1f8f91523a27a7124047892a62e89 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MABAAM
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b603c8c11fa1f8f91523a27a7124047892a62e89 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mcp_research-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcp_research-0.1.0-py3-none-any.whl
- Upload date:
- Size: 15.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9194bf29bfb98235d89e3fa4751a4745e036d038fa21bd8b29196c129d97ae64
|
|
| MD5 |
543411d94cf2b9700f7d7d1e95db3585
|
|
| BLAKE2b-256 |
a0d688495325681467ee3da859db535579e71ef051408f06888fc5c3dcc5e5cb
|
Provenance
The following attestation bundles were made for mcp_research-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on MABAAM/Maibaamcrawler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcp_research-0.1.0-py3-none-any.whl -
Subject digest:
9194bf29bfb98235d89e3fa4751a4745e036d038fa21bd8b29196c129d97ae64 - Sigstore transparency entry: 1253393110
- Sigstore integration time:
-
Permalink:
MABAAM/Maibaamcrawler@b603c8c11fa1f8f91523a27a7124047892a62e89 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MABAAM
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b603c8c11fa1f8f91523a27a7124047892a62e89 -
Trigger Event:
release
-
Statement type: