Skip to main content
Glama
yashavsarmal30

Multi-Agent Deep Researcher MCP

πŸ” Multi-Agent Deep Researcher MCP

Python 3.11+ MCP 1.6+ CrewAI FastAPI React 18 License: MIT

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, and read_research_report tools via FastMCP.

    • 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 stdio or sse.

  • 🌐 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.11

  • Node.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 sync

3. 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 .env

Configure 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-web

Open 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 dev

Open 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.json

  • Windows: %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

deep_research

Autonomous multi-agent deep research investigation. Returns complete Markdown report with verified sources.

query (str), depth ("standard" | "deep"), search_engine ("auto" | "linkup" | "duckduckgo"), model, provider

quick_search

Fast web search returning curated title, snippet, and URL citations.

query (str), max_results (int), search_engine

list_research_reports

Lists previously archived research reports from disk.

None

read_research_report

Reads full content of an archived research report.

filename (str)

research://reports/{id}

Dynamic MCP resource to read any report directly into model context.

report_name

research://status

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.py

Features search engine toggles, model selector, API key configuration in the sidebar, and interactive chat history.


βš™οΈ Configuration Reference

Environment Variable

Description

Default / Options

LINKUP_API_KEY

LinkUp Search API key (Sign up)

Optional (falls back to DuckDuckGo)

LLM_PROVIDER

Preferred LLM provider

openai, groq, anthropic, gemini, deepseek, ollama

LLM_MODEL

Custom model name

gpt-4o-mini, llama-3.3-70b-versatile, deepseek-r1:7b

OPENAI_API_KEY

OpenAI API key

Optional

GROQ_API_KEY

Groq Cloud API key (Free console)

Optional

ANTHROPIC_API_KEY

Anthropic Claude API key

Optional

GEMINI_API_KEY

Google AI Studio Gemini API key

Optional

DEEPSEEK_API_KEY

DeepSeek Platform API key

Optional

OLLAMA_BASE_URL

Ollama local API base URL

http://localhost:11434

PORT

Web API & UI port

5000


πŸ§ͺ 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:

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/amazing-feature)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing-feature)

  5. Open a Pull Request


πŸ“„ License

Distributed under the MIT License. See LICENSE for more information.

Available Tools

4 tools
deep_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.
ParametersJSON Schema
NameRequiredDescriptionDefault
depthNodeep
modelNo
queryYes
providerNo
search_engineNoauto

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
filenameYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv1.0.0
    • First observeddeep_research
    • First observedlist_research_reports
    • First observedquick_search
    • First observedread_research_report

TDQS

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables scientific literature research through multi-agent search, analysis, and semantic memory, exposing 9 MCP tools for querying, storing, and retrieving research findings.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables deep research tasks using a multi-agent architecture that integrates any LLM and MCP tools. Available via MCP stdio, streamable HTTP, and SSE transports.
    17
    MIT

Latest Blog Posts

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