Multi-Agent Deep Researcher MCP
Provides a free, privacy-preserving live web search engine for research, with no API key required and automatic fallback support.
Allows the research agents to use Google Gemini models as the LLM backend for deep research and report writing.
Allows the research agents to use local Ollama models, such as DeepSeek-R1 and Llama 3, for fully local LLM-powered research.
Allows the research agents to use OpenAI models such as GPT-4o and GPT-4o mini for reasoning, synthesis, and report generation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Multi-Agent Deep Researcher MCPResearch the latest breakthroughs in solid-state batteries and save a report with sources"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π Multi-Agent Deep Researcher MCP
An open-source, production-grade Autonomous Multi-Agent Deep Research System powered by CrewAI, Model Context Protocol (MCP), and dual live web search engines (LinkUp & DuckDuckGo).
Features a full Model Context Protocol (MCP) server for AI clients (Cursor, Claude Desktop, Antigravity, Windsurf), a sleek modern React.js Web UI (no authentication required), a Streamlit UI, and a standalone CLI.
π Highlights & Key Features
π€ 3-Stage Autonomous Multi-Agent Crew:
Lead Web Researcher: Formulates multi-angle search queries, harvests live web results, and extracts primary source URLs.
Principal Research Analyst: Synthesizes conflicting data, cross-references claims, filters hype, and detects emerging trends.
Senior Technical Writer: Authors publication-grade Markdown reports structured with Executive Summaries, Thematic Deep Dives, Comparative Tables, Strategic Implications, and Verified Citations.
π Official Model Context Protocol (MCP) Server:
Exposes
deep_research,quick_search,list_research_reports, andread_research_reporttools viaFastMCP.Includes dynamic research report resources (
research://reports/{report_name}) and status monitoring (research://status).Pre-configured MCP prompts (
deep_research_brief,competitive_analysis).Compatible with Cursor, Claude Desktop, Windsurf, and any standard MCP client over
stdioorsse.
π Dual Web Search Engines:
LinkUp Deep Search: Deep web search providing curated, sourced answers and structured data.
DuckDuckGo (Free): Zero setup, privacy-preserving live web search out of the boxβno API key required!
Intelligent Fallback: Seamlessly uses LinkUp when configured, and falls back to DuckDuckGo automatically.
π§ Multi-Provider LLM Orchestration:
Auto-detects and connects to Google Gemini (
gemini-3.6-flash,gemini-3.8-flash,gemini-2.5-flash), OpenAI (gpt-4o,gpt-4o-mini), Groq (llama-3.3-70b), Anthropic (claude-3-5-sonnet), DeepSeek, or local Ollama (deepseek-r1,llama3).
π» Modern React.js Web UI:
No login or authentication neededβstart researching immediately.
Live animated multi-agent activity stages with real-time status updates (SSE).
Rich Markdown report viewer with formatted typography, tables, and code snippets.
Extracted source links shelf with clickable citations.
1-Click Copy Markdown, Download
.md, and Print / Save to PDF.Local research history archive drawer and in-browser settings modal.
π₯οΈ Developer CLI:
Command-line research utility with configurable depth and direct file export.
β‘ Streamlit Interface:
Retained and upgraded for users preferring python-only dashboards.
Related MCP server: scholar-memory
ποΈ System Architecture
flowchart TD
User["User / MCP Client / Web UI"] --> Orchestrator["Deep Researcher Orchestrator"]
subgraph MultiAgentCrew["CrewAI Multi-Agent Team"]
Agent1["Lead Web Researcher\n(Query Formulation & Scraping)"]
Agent2["Principal Research Analyst\n(Fact Verification & Synthesis)"]
Agent3["Senior Technical Writer\n(Markdown Report Authoring)"]
Agent1 -->|Raw Sources & URLs| Agent2
Agent2 -->|Thematic Insights| Agent3
end
subgraph SearchEngines["Search Infrastructure"]
LinkUp["LinkUp Deep Web Search API"]
DDG["DuckDuckGo Live Search (Free)"]
Unified["Unified Search Tool (Auto-Fallback)"]
Unified --> LinkUp
Unified --> DDG
end
subgraph LLMProviders["Supported LLMs"]
OpenAI["OpenAI (GPT-4o / 4o-mini)"]
Groq["Groq (Llama-3.3-70B)"]
Anthropic["Anthropic (Claude 3.5)"]
Gemini["Google Gemini (2.0 Flash)"]
Ollama["Local Ollama (DeepSeek-R1)"]
end
Orchestrator --> MultiAgentCrew
Agent1 --> Unified
MultiAgentCrew -.-> LLMProviders
Agent3 --> FinalReport["Markdown Research Report\n(Executive Summary + Deep Dive + Citations)"]
FinalReport --> DiskArchive["Local Disk Archive\n(reports/*.md)"]π Quickstart Guide
1. Prerequisites
Python:
>= 3.11Node.js:
>= 18.0(for building the React frontend)uv (recommended) or
pip
2. Clone & Install
git clone https://github.com/your-username/Multi-Agent-deep-researcher-mcp.git
cd Multi-Agent-deep-researcher-mcp
# Option A: Quick installation with pip
pip install -r requirements.txt
# Option B: Synchronize virtual environment with uv (recommended)
uv sync3. Build the React Web UI
cd frontend
npm install
npm run build
cd ..(Note: The production build is pre-compiled into frontend/dist/ so the backend serves it automatically!)
4. Configure Environment Variables
Copy .env.example to .env:
cp .env.example .envConfigure your preferred keys (DuckDuckGo search works immediately without any search key):
# Optional Search Key (if omitted, DuckDuckGo is used automatically)
LINKUP_API_KEY=your_linkup_key_here
# Choose at least ONE LLM provider:
# Google Gemini (Default: Gemini 3.6 Pro - get key at https://aistudio.google.com/apikey)
GEMINI_API_KEY=AIzaSy...
# OR OpenAI:
OPENAI_API_KEY=sk-...
# OR Groq (free & ultra-fast):
GROQ_API_KEY=gsk_...
# OR Anthropic:
ANTHROPIC_API_KEY=sk-ant-...
# OR Local Ollama (default http://localhost:11434 with deepseek-r1:7b)π₯οΈ Using the React Web UI
Launch the unified FastAPI server:
uv run python api.py
# or using the CLI command:
uv run deep-researcher-webOpen your browser at http://localhost:5000.
Frontend Development Mode (Optional)
If you are developing or modifying the React components:
# Terminal 1: Backend API
uv run python api.py
# Terminal 2: React Vite Dev Server
cd frontend
npm run devOpen http://localhost:5173 with hot module reloading.
π Connecting as an MCP Server
The project implements the official Model Context Protocol (MCP) specification. AI assistants like Cursor, Claude Desktop, Antigravity, or Windsurf can call the research agents directly as native tools.
1. Configuration for Cursor (.cursor/mcp.json)
Add to your project's .cursor/mcp.json or global configuration:
{
"mcpServers": {
"deep_researcher": {
"command": "uv",
"args": [
"--directory",
"C:/path/to/Multi-Agent-deep-researcher-mcp",
"run",
"server.py"
],
"env": {
"OPENAI_API_KEY": "your_openai_api_key",
"LINKUP_API_KEY": "your_linkup_api_key"
}
}
}
}2. Configuration for Claude Desktop
Edit your Claude Desktop configuration:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"deep-researcher": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/Multi-Agent-deep-researcher-mcp",
"run",
"server.py"
],
"env": {
"OPENAI_API_KEY": "your_openai_api_key",
"LINKUP_API_KEY": "your_linkup_api_key"
}
}
}
}Available MCP Tools & Capabilities
MCP Tool / Resource | Description | Parameters |
| Autonomous multi-agent deep research investigation. Returns complete Markdown report with verified sources. |
|
| Fast web search returning curated title, snippet, and URL citations. |
|
| Lists previously archived research reports from disk. | None |
| Reads full content of an archived research report. |
|
| Dynamic MCP resource to read any report directly into model context. |
|
| Dynamic MCP resource providing server configuration & provider availability. | None |
π» Developer Command Line (CLI)
Perform deep research straight from your terminal:
# Standard research on a topic
uv run deep-researcher-cli "Advancements in Quantum Computing 2026"
# Deep exhaustive research using DuckDuckGo and Groq
uv run deep-researcher-cli "Solid-state battery commercialization" --depth deep --engine duckduckgo --provider groq
# Quick live search lookup
uv run deep-researcher-cli "Python 3.13 release features" --quick
# Save output directly to a file
uv run deep-researcher-cli "Next-generation nuclear SMRs" -o smr_report.mdβ‘ Streamlit Web Interface
If you prefer the lightweight Streamlit dashboard:
uv run streamlit run app.pyFeatures search engine toggles, model selector, API key configuration in the sidebar, and interactive chat history.
βοΈ Configuration Reference
Environment Variable | Description | Default / Options |
| LinkUp Search API key (Sign up) | Optional (falls back to DuckDuckGo) |
| Preferred LLM provider |
|
| Custom model name |
|
| OpenAI API key | Optional |
| Groq Cloud API key (Free console) | Optional |
| Anthropic Claude API key | Optional |
| Google AI Studio Gemini API key | Optional |
| DeepSeek Platform API key | Optional |
| Ollama local API base URL |
|
| Web API & UI port |
|
π§ͺ Running Tests
Run the automated test suite verifying search tools, agent modules, MCP server registration, and FastAPI endpoints:
uv run python tests/test_researcher.pyπ€ Contributing
Contributions are warmly welcomed! Feel free to:
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
π License
Distributed under the MIT License. See LICENSE for more information.
Available Tools
4 toolsdeep_researchA
Run an autonomous multi-agent deep research investigation on a topic.
Coordinates a Web Researcher, Research Analyst, and Technical Writer
to gather live web data, synthesize insights, and produce a fully cited
Markdown report.
Args:
query: The research topic, query, or question to investigate.
depth: Thoroughness level - 'standard' for concise, 'deep' for exhaustive.
search_engine: Search engine to use - 'auto' (preferred), 'linkup', or 'duckduckgo'.
model: Optional model identifier (e.g., 'gpt-4o-mini', 'llama-3.3-70b-versatile').
provider: Optional provider ('openai', 'groq', 'anthropic', 'gemini', 'ollama').
Returns:
The complete publication-grade Markdown research report with source citations.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | deep | |
| model | No | ||
| query | Yes | ||
| provider | No | ||
| search_engine | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on full behavioral disclosure. It transparently explains the autonomous multi-agent process, including coordination of Web Researcher, Research Analyst, and Technical Writer, and states that it gathers live web data and produces a cited Markdown report. It does not mention runtime expectations, potential costs, or side effects, but the core behavior is well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: a clear one-sentence summary, a brief explanation of the agent workflow, a compact Args list with inline value explanations, and a Returns line. Every sentence adds value and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, no output schema, and no annotations, the description covers the essential information: purpose, workflow, all parameters, and the return value as a Markdown report. It could be more complete with explicit guidance on when to select this tool over quick_search and what resource or time implications exist, but nothing critical is missing for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must carry the parameter documentation burden. It succeeds by explaining the query as the research topic, defining 'depth' values ('standard' vs 'deep'), listing valid search_engine options with a preferred default, and providing concrete examples for optional model and provider values. Every parameter receives meaningful semantic context beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Run an autonomous multi-agent deep research investigation on a topic.' It also differentiates itself from sibling tools like quick_search by emphasizing 'deep research' and a 'publication-grade Markdown report with source citations,' making the outcome and scope distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for thorough, cited research through phrases like 'deep research investigation' and 'exhaustive' depth, but it never explicitly explains when to use this tool over quick_search or when not to use it. No alternatives or exclusions are mentioned, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_research_reportsA
List all previously generated research reports saved in the reports directory.
Returns:
JSON list of available reports with filename, query, and creation date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden and it does disclose the action (list) and outcome shape (JSON with filename, query, creation date). It does not mention ordering, empty-directory behavior, or error conditions, leaving minor ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences; the purpose appears in the first sentence and the return format is cleanly separated. No filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool, the description is nearly complete: it names the source, scope, and return fields. With no output schema, explaining the return fields is essential and done well; it only lacks an explicit pointer to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are trivially complete; per calibration, baseline 4. The description reinforces that no arguments are needed by focusing entirely on the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), resource ('previously generated research reports'), and location ('reports directory'). Differentiates from siblings by explicitly scoping to saved reports rather than generating or reading one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through 'previously generated' β it is the inventory step before read_research_report and separate from deep_research/quick_search. However, it does not explicitly state when to use it or name alternatives, so the agent must infer placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_searchA
Conduct a fast web search and return structured snippets with source URLs.
Args:
query: The search term or question.
max_results: Maximum number of links to return (default: 5, max: 15).
search_engine: Search engine to use ('auto', 'linkup', or 'duckduckgo').
Returns:
Formatted search results with titles, snippets, and URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| search_engine | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains what the tool does and what it returns, but it does not describe how 'auto' selects a search engine, potential failures, rate limits, or other behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, front-loading the purpose and using clear Args/Returns sections. Every sentence contributes useful information without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool, the description includes all invocation-relevant details: required query, optional parameters with defaults, engine choices, and return format. It is only missing explicit usage context relative to the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by documenting all three parameters: query, max_results with default and max, and search_engine with its enum options. This is exactly the information an agent needs beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('fast web search') and resource (the web), and specifies the return format (structured snippets with source URLs). It is distinguishable from the sibling research-report tools, though it does not explicitly name or contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'fast' implies it is for quick searches rather than deep research, but there is no explicit guidance about when to choose this tool over siblings like deep_research. No exclusions or alternative-selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_research_reportA
Retrieve and read a saved research report from disk.
Args:
filename: The filename of the report (e.g., '20260306_quantum_computing.md').
Returns:
The full text of the research report.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the core behavior (read from disk) and return value (full text), but does not explicitly state that it is read-only with no side effects, nor describe error behavior for missing files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sections (summary, Args, Returns) with no redundant content. The example filename earns its place by illustrating the expected format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For one parameter and no output schema, the description adequately explains input and return. The only notable gap is the missing connection to list_research_reports for valid filenames, which is a usage-guidance issue rather than a completeness issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description compensates by providing an Args section that explains the purpose of 'filename' and includes a concrete date-format example. It could add where the filename comes from, but the meaning is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve and read'), a resource ('saved research report'), and the storage location ('from disk'), making it clearly distinct from siblings like list_research_reports (which lists) and deep_research (which creates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context β it is for saved reports β but does not explicitly say when not to use it or point to list_research_reports for discovering available filenames. The alternatives are inferable from sibling names but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.0- First observed
deep_research - First observed
list_research_reports - First observed
quick_search - First observed
read_research_report
TDQS
Each tool maps to a distinct task: generating a synthesized report, running a lightweight search, listing existing reports, and reading a specific report. Deep_research and quick_search are related but clearly separated by output depth and purpose.
The names are clear and mostly follow a readable pattern, with list_research_reports and read_research_report using verb_noun construction. deep_research and quick_search break that pattern by leading with a modifier, but all names are concise snake_case and easy to predict.
Four tools is a well-scoped size for a research server: one for investigation, one for quick lookup, and two for managing generated reports. No tool feels redundant or unnecessary.
The set covers the core research workflow and report retrieval end-to-end. A delete/remove report operation would make report lifecycle management more complete, but agents can still list, read, and generate reports without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
AI research on companies and industries β one MCP tool per research domain.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Shared, peer-validated knowledge archive for AI agents β search, contribute, and validate via MCP
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform grounded web research with injection resistance, claim verification, and cost-aware routing through MCP tools like web_search, fetch_url, extract_claims, and check_grounding.MIT
- AlicenseNot gradedqualityDmaintenanceEnables scientific literature research through multi-agent search, analysis, and semantic memory, exposing 9 MCP tools for querying, storing, and retrieving research findings.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables deep research tasks using a multi-agent architecture that integrates any LLM and MCP tools. Available via MCP stdio, streamable HTTP, and SSE transports.17MIT
- FlicenseNot gradedqualityAmaintenanceEnables iterative deep web research through MCP clients, using SearXNG search, Crawl4AI parsing, and LLM synthesis.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yashavsarmal30/Multi-Agent-Deepresearch-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server