Agent skill

Deep Research MCP Guide

by pminervini in pminervini/deep-research-mcp

Explains how to run, integrate and debug the deep-research-mcp project through its CLI, Python API or MCP server, with OpenAI, Gemini and DR-Tulu backends.

MITAuto-check passedResearch & Science

Install Deep Research MCP Guide

skills CLI
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/deep-research-mcp .claude/skills/deep-research-mcp && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
deep-research-mcp
GitHub stars
114
Token cost
~5.8k tokens
SKILL.md length
1,358 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Explains how to run, integrate and debug the deep-research-mcp project through its CLI, Python API or MCP server, with OpenAI, Gemini and DR-Tulu backends.

  • Works in 3 steps: deep-research-cli is the installed… → src/deep_research_mcp/agent.py… → src/deep_research_mcp/backends/*.py…
  • Running deep-research-cli in direct agent mode against a research question
  • SKILL.md covers Use When, Do Not Use When, Mental Model and Setup, plus 7 more sections
  • Calls uv, pip and python; reaches api.openai.com and generativelanguage.googleapis.com; needs OPENAI_API_KEY and GEMINI_API_KEY

What it does

This guide applies only to the deep-research-mcp repository. It describes three layers: the installed `deep-research-cli`, an agent module that orchestrates research, callbacks and status checks, and provider-specific backends. The CLI either builds a `DeepResearchAgent` directly or connects to a running HTTP MCP server with `--server-url`, and the server started by `uv run deep-research-mcp` exposes two tools, `deep_research` and `research_status`.

Setup is covered with `uv sync` or a virtualenv and pip, plus an optional Open Deep Research extra. OpenAI needs `OPENAI_API_KEY`, Gemini needs `GEMINI_API_KEY`, and DR-Tulu needs a separately running service with a chat endpoint. The guide also helps untangle provider mix-ups caused by values saved in `~/.deep_research`. It is not meant for the Textual TUI, general Deep Research advice or other MCP servers.

When your agent uses it

  • Running deep-research-cli in direct agent mode against a research question
  • Calling DeepResearchAgent and ResearchConfig from Python code
  • Exposing the project as an HTTP or stdio MCP server for another client
  • Debugging why the wrong provider is used after earlier configuration

Example prompts

  • “Start the deep-research-mcp server over HTTP and connect deep-research-cli to it.”
  • “Run a Gemini research query from Python using ResearchConfig.”
  • “My research jobs keep going to OpenAI instead of Gemini. Check what is stored in ~/.deep_research.”

Requirements

  • Python with `uv` or pip
  • OPENAI_API_KEY or GEMINI_API_KEY for the chosen provider
  • A running DR-Tulu service for the DR-Tulu backend

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. deep-research-cli is the installed user-facing CLI.
  2. src/deep_research_mcp/agent.py orchestrates research, callbacks, and status checks.
  3. src/deep_research_mcp/backends/*.py performs provider-specific work.

What it can do on your machine

Read from SKILL.md and the folder at commit 31213c1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • pip
    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.openai.com
    • generativelanguage.googleapis.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY
    • GEMINI_API_KEY
    • RESEARCH_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Deep Research MCP Guide loads about 5.8k tokens when it runs. Until then it costs about 119 tokens; SKILL.md has 1,358 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~119
When it runs · the whole SKILL.md, loaded when a task matches
~5.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from pminervini/deep-research-mcp at commit 31213c1, republished under its MIT licence (© pminervini). 1,358 words, ~5,829 tokens.

Download SKILL.mdSave it as .claude/skills/deep-research-mcp/SKILL.md (or your agent's skills folder).
name
deep-research-mcp
description
Use this guide only for the `deep-research-mcp` repository/project when you need to run, integrate, or debug its CLI, Python API, or MCP server. It covers this repo's direct agent execution, provider/backend selection, OpenAI Responses with GPT-5.6 Sol, Gemini Deep Research, DR-Tulu integration requirements, status polling, and HTTP or stdio MCP usage. Do not use it for Deep Research systems in general, for unrelated MCP servers, or for the Textual TUI.

Deep Research MCP

This document is specifically about the deep-research-mcp project/repository, not Deep Research systems in general.

Repository: https://github.com/pminervini/deep-research-mcp

Use When

  • You are working in or against the deep-research-mcp repository/project.
  • You need to run deep-research-cli in direct agent mode.
  • You need to call DeepResearchAgent and ResearchConfig from Python.
  • You need to expose the deep-research-mcp project as an MCP server with deep-research-mcp.
  • You need to connect to the MCP server from another client over HTTP.
  • You need to understand which backend is used for OpenAI, Gemini, DR-Tulu, or Open Deep Research.
  • You need to troubleshoot provider mix-ups caused by values already stored in ~/.deep_research.

Do Not Use When

  • You only need the Textual TUI in cli/deep-research-tui.py.
  • You need a generic guide to Deep Research agents, generic research workflows, or MCP outside the deep-research-mcp codebase.
  • You are looking for model-selection advice outside the providers this repository already implements.

Mental Model

There are three layers:

  1. deep-research-cli is the installed user-facing CLI.
  2. src/deep_research_mcp/agent.py orchestrates research, callbacks, and status checks.
  3. src/deep_research_mcp/backends/*.py performs provider-specific work.

The CLI can run in two modes:

  • Agent mode: instantiate DeepResearchAgent directly.
  • MCP client mode: connect to a running HTTP MCP server with --server-url.

The MCP server entrypoint is the console script:

bash
uv run deep-research-mcp

It exposes two tools:

  • deep_research
  • research_status

Setup

The commands below assume you are running from the repository root.

bash
uv sync --upgrade --extra dev
Compatible editable install
bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
Optional Open Deep Research extras
bash
uv sync --upgrade --extra dev --extra open-deep-research
Environment variables by provider

OpenAI:

bash
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"

Gemini:

bash
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"

DR-Tulu:

  • there is no single required key defined by deep-research-mcp itself
  • you must have a running DR-Tulu service that exposes POST {base_url}/chat

Provider Matrix

ProviderBackend moduleHow research is executedStatus pollingNotes
openai + api_style=responsesopenai_backend.pyOpenAI Responses API in background mode with GPT-5.6 Sol, web_search, and optionally code_interpreterYesDefault deep-research path
openai + api_style=chat_completionsopenai_backend.pyOne-shot Chat Completions callNo persistent statusUseful for OpenAI-compatible providers like Perplexity, Groq, Ollama, vLLM
geminigemini_backend.pyGemini Interactions API with background=TrueYesUses google-genai; include_analysis is ignored by the backend
dr-tuludr_tulu_backend.pyPOST {base_url}/chatNoRequires a separately running DR-Tulu service
open-deep-researchopen_deep_research_backend.pyLocal Open Deep Research stack via smolagentsNoNeeds extra optional dependencies

Config Precedence And The Most Important Pitfall

ResearchConfig.load() merges:

  1. Built-in defaults
  2. ~/.deep_research
  3. Environment variables
  4. CLI flags, which are injected as environment variables

This matters because the TOML file is flattened into keys like RESEARCH_API_KEY and RESEARCH_BASE_URL. If your saved config is pinned to Gemini and you run:

bash
uv run deep-research-cli --provider openai research "..."

you may still send the request to Gemini or send the Gemini key to OpenAI unless you also override:

  • --api-key
  • --base-url
  • sometimes --model

Safe pattern when switching providers from the command line:

bash
uv run deep-research-cli \
  --provider openai \
  --api-style responses \
  --model gpt-6-sol \
  --api-key "$OPENAI_API_KEY" \
  --base-url https://api.openai.com/v1 \
  research "..."
OpenAI Responses
toml
[research]
provider = "openai"
api_style = "responses"
model = "gpt-6-sol"
api_key = "YOUR_OPENAI_API_KEY"
base_url = "https://api.openai.com/v1"
timeout = 1800
poll_interval = 30
Gemini Deep Research
toml
[research]
provider = "gemini"
model = "deep-research-pro-preview-12-2025"
api_key = "YOUR_GEMINI_API_KEY"
base_url = "https://generativelanguage.googleapis.com"
timeout = 1800
poll_interval = 30
DR-Tulu
toml
[research]
provider = "dr-tulu"
model = "dr-tulu"
base_url = "http://localhost:8080"
api_key = ""
timeout = 1800
poll_interval = 30

dr-tulu is different from the others: the deep-research-mcp repository does not ship the DR-Tulu service itself. The backend only expects something else to be listening at POST {base_url}/chat.

CLI: Direct Agent Mode

Direct agent mode is the default when you do not pass --server-url.

Basic Shape
bash
uv run deep-research-cli research "Your research query"
Useful Flags
bash
uv run deep-research-cli \
  --provider openai \
  --api-style responses \
  --model gpt-6-sol \
  --api-key "$OPENAI_API_KEY" \
  --base-url https://api.openai.com/v1 \
  --timeout 900 \
  --poll-interval 10 \
  research "Your research query" \
  --system-prompt "Custom instructions" \
  --output-file report.md

Key flags:

  • --provider
  • --model
  • --api-key
  • --base-url
  • --api-style
  • --timeout
  • --poll-interval
  • --system-prompt or --system-prompt-file
  • --no-analysis
  • --output-file
  • --json in agent mode only
Live OpenAI CLI Example

Command:

bash
OPENAI_API_KEY="$OPENAI_API_KEY" \
uv run deep-research-cli \
  --provider openai \
  --api-style responses \
  --model gpt-6-sol \
  --api-key "$OPENAI_API_KEY" \
  --base-url https://api.openai.com/v1 \
  --timeout 900 \
  --poll-interval 10 \
  research "What are flow matching models in generative AI, and how do they differ from diffusion models?" \
  --system-prompt "Answer in exactly 3 bullets and one final takeaway sentence. Keep the whole answer under 180 words. Prefer recent, high-signal sources." \
  --output-file openai-report.md

Illustrative output excerpt from an earlier OpenAI model (not a GPT-6 verification):

text
============================================================
RESEARCH REPORT
============================================================
Task ID: <openai_task_id>
Total steps: 72
Search queries: 35
Citations: 8
Execution time: 216.15s

- **Flow-matching models** train continuous normalizing flows by learning a time-dependent vector field that pushes a simple prior (e.g. Gaussian noise) into the data distribution along a chosen probability path ...
- **Diffusion models** instead progressively add noise to data (via an SDE) and learn a score-based denoiser to reverse that process ...
- **Sampling differences:** Flow-matching generates samples by solving a learned ODE in (often) one shot ...

**Takeaway:** Flow-matching models use smooth ODE flows (vector fields) to map noise->data, subsuming diffusion's process as a special case; they typically allow a more direct, faster sampling path.

What this tells you:

  • OpenAI Responses mode is genuinely multi-step in deep-research-mcp.
  • total_steps and search_queries are meaningful for this backend.
  • Direct agent mode blocks until the task completes.
Live Gemini CLI Example

Command:

bash
GEMINI_API_KEY="$GEMINI_API_KEY" \
uv run deep-research-cli \
  --provider gemini \
  --model deep-research-pro-preview-12-2025 \
  --timeout 900 \
  --poll-interval 10 \
  research "What are flow matching models in generative AI, and how do they differ from diffusion models?" \
  --system-prompt "Answer in exactly 3 bullets and one final takeaway sentence. Keep the whole answer under 180 words. Prefer recent, high-signal sources." \
  --output-file gemini-report.md

Observed output excerpt:

text
============================================================
RESEARCH REPORT
============================================================
Task ID: <gemini_task_id>
Total steps: 1
Execution time: 99.00s

# Flow Matching vs. Diffusion Models

* **Core Concept:** Flow matching is a generative modeling framework that learns a deterministic, continuous velocity field ...
* **Key Differences:** While diffusion models rely on a fixed, stochastic process ...
* **Efficiency:** Because these generation trajectories are straighter and deterministic ...

Ultimately, while the two paradigms share deep mathematical connections, flow matching streamlines the generative process ...

Important Gemini-specific behavior:

  • The normalized citation list may be empty even when the report text includes a Sources: section.
  • Grounding URLs may appear as Google redirect URLs rather than the final origin URL.
  • include_analysis does not map to a Gemini code-execution tool toggle in this backend.
Live DR-Tulu CLI Example

Command:

bash
uv run deep-research-cli \
  --provider dr-tulu \
  --model dr-tulu \
  --base-url http://localhost:8080 \
  --timeout 1800 \
  research "What is flow matching in generative AI?" \
  --system-prompt "Answer in exactly 2 bullets and one takeaway sentence. Keep the whole answer under 120 words." \
  --no-analysis \
  --output-file dr-tulu-report.md

Observed output excerpt:

text
============================================================
RESEARCH REPORT
============================================================
Task ID: <dr_tulu_task_id>
Total steps: 3
Citations: 25
Execution time: 177.66s

- Flow matching trains a continuous normalizing flow by regressing a conditional drift (vector field) that deterministically maps noise to data in one straight-line ODE ...
- In practice, sampling solves the learned ODE forward ... and recent variants remove ODE solvers at generation time ...

Takeaway: Flow matching defines generative models as learned deterministic transport maps from noise to data via a conditional vector field ...

What this tells you:

  • The current dr-tulu backend works against a live POST /chat service.
  • total_steps comes from metadata.total_tool_calls.
  • Citation extraction works by normalizing metadata.searched_links.
  • DR-Tulu latency can still be substantial even for short prompts.
Live status CLI Example

Command:

bash
OPENAI_API_KEY="$OPENAI_API_KEY" \
uv run deep-research-cli \
  --provider openai \
  --api-key "$OPENAI_API_KEY" \
  --base-url https://api.openai.com/v1 \
  status YOUR_OPENAI_TASK_ID

Observed output:

text
Task ID: YOUR_OPENAI_TASK_ID
Status: completed
Created: <provider_created_timestamp>
Completed: <provider_completed_timestamp>

Note that timestamp formatting is provider-specific:

  • OpenAI Responses returned Unix timestamps here.
  • Gemini research_status returned formatted datetimes in this environment.

Python API: ResearchConfig + DeepResearchAgent

The direct Python API is the cleanest way to embed the framework in another program.

Generic Pattern
python
import asyncio
from deep_research_mcp import DeepResearchAgent, ResearchConfig

async def main() -> None:
    config = ResearchConfig(
        provider="openai",
        api_style="responses",
        model="gpt-5.6-sol",
        api_key="YOUR_OPENAI_API_KEY",
        base_url="https://api.openai.com/v1",
        timeout=900,
        poll_interval=10,
    )

    agent = DeepResearchAgent(config)
    result = await agent.research(
        query="What are the current tradeoffs between flow matching and diffusion?",
        system_prompt="Answer in 3 bullets.",
        include_code_interpreter=False,
    )

    print(result.status)
    print(result.task_id)
    print(result.final_report)

asyncio.run(main())
Live Gemini Python Example

Code:

python
import asyncio
import json
from deep_research_mcp import DeepResearchAgent, ResearchConfig

async def main() -> None:
    config = ResearchConfig(
        provider="gemini",
        model="deep-research-pro-preview-12-2025",
        base_url="https://generativelanguage.googleapis.com",
        timeout=900,
        poll_interval=10,
    )

    agent = DeepResearchAgent(config)
    result = await agent.research(
        query="Why can flow matching models sample faster than diffusion models?",
        system_prompt="Answer in exactly 2 bullets and one takeaway sentence. Keep the whole answer under 140 words. Prefer papers or technical sources.",
        include_code_interpreter=False,
    )

    payload = {
        "status": result.status,
        "task_id": result.task_id,
        "execution_time": result.execution_time,
        "total_steps": result.total_steps,
        "report": result.final_report,
        "citations": [
            {"index": c.index, "title": c.title, "url": c.url}
            for c in result.citations[:5]
        ],
    }
    print(json.dumps(payload, ensure_ascii=False, indent=2))

asyncio.run(main())

Observed output excerpt:

json
{
  "status": "completed",
  "task_id": "<gemini_task_id>",
  "execution_time": 99.92130708694458,
  "total_steps": 1,
  "report": "# Acceleration in Generative Models\nResearch suggests that flow matching fundamentally accelerates generative sampling by replacing the complex stochasticity of diffusion with a highly efficient, straight-line mathematical path ...",
  "citations": []
}

What to expect from the Python result model:

  • result.status is normalized across backends.
  • result.task_id is always the backend task or synthetic task ID.
  • result.final_report is the main payload.
  • result.citations is normalized when the backend can extract them. Do not assume every provider fills it equally.

MCP Server

Start In Stdio Mode
bash
uv run deep-research-mcp

Use this when another client will spawn the server as a subprocess.

Start In HTTP Mode
bash
uv run deep-research-mcp --transport http --host 127.0.0.1 --port 8080

The Streamable HTTP endpoint is:

text
http://127.0.0.1:8080/mcp
Provider-Pinned HTTP Server Example

This pattern avoids accidental reuse of a different provider's saved credentials:

bash
RESEARCH_PROVIDER=gemini \
RESEARCH_API_KEY="$GEMINI_API_KEY" \
RESEARCH_BASE_URL=https://generativelanguage.googleapis.com \
RESEARCH_MODEL=deep-research-pro-preview-12-2025 \
RESEARCH_POLL_INTERVAL=10 \
uv run deep-research-mcp --transport http --host 127.0.0.1 --port 8081

MCP Tools

Show full SKILL.md (559 more words)Show less
deep_research

Use for normal research. Key inputs:

  • query
  • system_instructions
  • include_analysis
  • callback_url

The query must contain the complete research question and any user-provided context needed to answer it. Use system_instructions for research methodology, source, scope, and output requirements. Conversational hosts should ask any necessary follow-up questions before calling the tool.

research_status

Use to poll a known task ID.

CLI As MCP Client

When you pass --server-url, the CLI becomes an MCP client instead of creating DeepResearchAgent itself.

Live CLI-over-MCP Example

Command:

bash
uv run deep-research-cli \
  research "Why can flow matching models use fewer inference steps than diffusion models?" \
  --server-url http://127.0.0.1:8081/mcp \
  --system-prompt "Answer in exactly 2 bullets and one takeaway sentence. Keep the whole answer under 140 words. Prefer technical sources." \
  --no-analysis \
  --output-file mcp-report.md

Observed client-side progress output:

text
[progress] 0.0 Research started...
[progress] 1.0 Research in progress (1 minute)
[progress] 100.0% Research completed successfully

Observed report excerpt:

text
# Research Report: Why can flow matching models use fewer inference steps than diffusion models?

# Inference Efficiency of Flow Matching

* **Optimal Transport Trajectories:** Unlike diffusion models that reverse stochastic, highly curved random walks, flow matching models learn a continuous, deterministic vector field ...
* **Reduced Discretization Error:** Because these straight flow trajectories possess near-minimal curvature ...

**Takeaway:** Flow matching models require significantly fewer inference steps because they replace tortuous stochastic diffusion processes with highly rectified, deterministic ODEs ...

## Research Metadata
- **Total research steps**: 1
- **Search queries executed**: 0
- **Citations found**: 0
- **Task ID**: <mcp_task_id>
- **Execution time**: 88.10 seconds

Python Speaking MCP Directly

Live research_status Example

Code:

python
import asyncio
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

TASK_ID = "YOUR_TASK_ID"

async def main() -> None:
    async with streamablehttp_client("http://127.0.0.1:8081/mcp") as (read_stream, write_stream, _):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()
            result = await session.call_tool("research_status", {"task_id": TASK_ID})
            print(result.structuredContent)

asyncio.run(main())

Observed output:

text
{'result': 'Task YOUR_TASK_ID status: completed\nCreated at: <created_at>\nCompleted at: <completed_at>'}

Backend-Specific Notes

OpenAI Responses Backend
  • Implemented in src/deep_research_mcp/backends/openai_backend.py
  • Uses client.responses.create(..., background=True)
  • Polls with client.responses.retrieve(task_id)
  • Uses web_search for Responses models
  • Uses an unlimited returned-token budget for supported GPT-5/6 reasoning models
  • Adds code_interpreter only when include_code_interpreter=True
  • Omits code_interpreter for legacy Pro models that do not support it
  • Uses xhigh reasoning effort for GPT-5.2+ and GPT-6 research models and high for earlier GPT-5 models unless reasoning_effort overrides it
  • Set reasoning_effort in [research], RESEARCH_REASONING_EFFORT, or CLI --reasoning-effort for OpenAI Responses, Chat Completions, and Codex subscription (model support varies)
  • enable_reasoning_summaries=True adds summary="auto" to the reasoning settings

Use this when you want:

  • background execution
  • search-query accounting
  • best support for research_status
  • the deep-research-mcp repo's intended "deep research" path
OpenAI Chat Completions Backend

Still provider="openai", but set:

bash
--api-style chat_completions

Differences:

  • no background task
  • no research_status tracking
  • no code_interpreter
  • good for compatible third-party endpoints
Gemini Backend
  • Implemented in src/deep_research_mcp/backends/gemini_backend.py
  • Uses google.genai.Client(...).interactions
  • Creates background interactions with store=True
  • Polls until the interaction is completed
  • Ignores include_code_interpreter

Observed real-world consequences from live runs:

  • often total_steps is small
  • the report may embed a Sources: section directly
  • the normalized citation list may still be empty
  • URLs may be grounding redirects
DR-Tulu Backend
  • Implemented in src/deep_research_mcp/backends/dr_tulu_backend.py
  • Sends one request to:
text
POST {base_url}/chat
  • Expects JSON response fields:
    • response
    • metadata.searched_links
    • metadata.total_tool_calls
  • research_status() always returns unknown

Correct direct CLI shape:

bash
uv run deep-research-cli \
  --provider dr-tulu \
  --model dr-tulu \
  --base-url http://localhost:8080 \
  research "Your query here"

Correct Python shape:

python
from deep_research_mcp import DeepResearchAgent, ResearchConfig

config = ResearchConfig(
    provider="dr-tulu",
    model="dr-tulu",
    base_url="http://localhost:8080",
)
agent = DeepResearchAgent(config)

Important limitation:

  • The deep-research-mcp repository does not bootstrap DR-Tulu for you.
  • You need a separately running DR-Tulu service that exposes /chat.
  • Without that service, DR-Tulu examples fail immediately with a connection error.
  • The current backend expects base_url without the /chat suffix, because it appends /chat internally.
  • A live run was verified against a separately running DR-Tulu deployment whose base URL pointed at the service root; the current backend uses /chat.

Troubleshooting

Symptom: OpenAI call hits Gemini or sends the wrong key

Cause:

  • your ~/.deep_research file already has research.api_key or research.base_url for another provider

Fix:

  • override --api-key
  • override --base-url
  • optionally override --model
  • or use a provider-specific config file with --config
Symptom: research_status is not useful

Cause:

  • you are using chat_completions, dr-tulu, or open-deep-research

Fix:

  • use openai + responses or gemini if you need task polling
Symptom: Gemini report has sources in text but citations is empty

Cause:

  • the Gemini backend only populates normalized citations when it can map annotations/output objects cleanly

Fix:

  • treat final_report as the canonical user-facing output
  • treat result.citations as best-effort normalization

Short Recipes

Fastest safe OpenAI command
bash
OPENAI_API_KEY="$OPENAI_API_KEY" \
uv run deep-research-cli \
  --provider openai \
  --api-style responses \
  --model gpt-6-sol \
  --api-key "$OPENAI_API_KEY" \
  --base-url https://api.openai.com/v1 \
  research "Your query"
Fastest safe Gemini command
bash
GEMINI_API_KEY="$GEMINI_API_KEY" \
uv run deep-research-cli \
  --provider gemini \
  --model deep-research-pro-preview-12-2025 \
  --api-key "$GEMINI_API_KEY" \
  --base-url https://generativelanguage.googleapis.com \
  research "Your query"
Start an HTTP MCP server and use the CLI as the client

Terminal 1:

bash
RESEARCH_PROVIDER=gemini \
RESEARCH_API_KEY="$GEMINI_API_KEY" \
RESEARCH_BASE_URL=https://generativelanguage.googleapis.com \
uv run deep-research-mcp --transport http --host 127.0.0.1 --port 8081

Terminal 2:

bash
uv run deep-research-cli \
  research "Your query" \
  --server-url http://127.0.0.1:8081/mcp

Final Guidance

If you only remember three things, remember these:

  1. Use full provider overrides when your saved TOML file is already specialized.
  2. Use openai + responses or gemini when you need status polling.
  3. Treat DR-Tulu as an external dependency: the deep-research-mcp repo's DR-Tulu backend is a client, not the service itself.

© pminervini, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/deep-research-mcp of pminervini/deep-research-mcp.

Open the folder on GitHubat commit 31213c1

Compare with similar skills

Deep Research MCP Guide next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Deep Research MCP Guide compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Deep Research MCP Guide this skillpminervini/deep-research-mcp114—~5.8kAutomated safety check: PassMIT
Opikcomet-ml/opik-mcp220—~2.1kAutomated safety check: PassApache-2.0
Tool Designagentailor/fullstack-langgraph-nextjs-agent132—~3.2kAutomated safety check: PassMIT
Facturasgustavoeenriquez/MakerAi212—~127Automated safety check: PassMIT
Mcpa Certificationfancyboi999/ai-engineering-from-scratch-zh1.2k—~1.4kAutomated safety check: PassMIT
Ydc Openai Agent SDK IntegrationLeoYeAI/openclaw-master-skills2.2k—~4.4kAutomated safety check: NotesMIT

Similar skills

  • Opik

    comet-ml/opik-mcp

    Reference for the Opik SDK — tracing, span types, framework integrations, threads, and the prompt library (Python, TypeScript, REST).

    220 GitHub stars~2.1k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Tool Design

    agentailor/fullstack-langgraph-nextjs-agent

    Design and verify tools that AI agents can actually use — for any framework or language (MCP servers, LangChain/LangGraph, function-calling, raw JSON schema; TypeScript, Python, or otherwise).

    132 GitHub stars~3.2k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Facturas

    gustavoeenriquez/MakerAi

    Úsalo cuando el usuario pida redactar una factura, una cuenta de cobro o una nota de cobro.

    212 GitHub stars~127 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Mcpa Certification

    fancyboi999/ai-engineering-from-scratch-zh

    AI Engineering from Scratch 中文版中的 MCPA(Model Context Protocol Associate)AI 原生导师与入门流程。学习者需要备考 MCPA、继续认证路线、 交互式学习下一课、运行并验证实践实验、参加诊断或全真模拟、根据薄弱领域 补弱时使用。适用于 Claude Code、Codex、ChatGPT、Cursor 或其他 agent。

    1.2k GitHub stars~1.4k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • Ydc Openai Agent SDK Integration

    LeoYeAI/openclaw-master-skills

    Integrate OpenAI Agents SDK with You.com MCP server - Hosted and Streamable HTTP support for Python and TypeScript.

    2.2k GitHub stars~4.4k tokensUpdated 2 mo ago
    AI & LLM EngineeringAuto-check: notes
  • Unraid

    dinglebear-ai/unraid

    This skill should be used when the user mentions Unraid, asks to check server health, monitor array or disk status, list or restart Docker containers, start or stop VMs, read system logs, check…

    135 GitHub stars~5.4k tokensUpdated 6 days ago
    DevOps & CloudAuto-check: notes

Questions about Deep Research MCP Guide

What does Deep Research MCP Guide do?

Explains how to run, integrate and debug the deep-research-mcp project through its CLI, Python API or MCP server, with OpenAI, Gemini and DR-Tulu backends. This guide applies only to the deep-research-mcp repository. It describes three layers: the installed `deep-research-cli`, an agent module that orchestrates research, callbacks and status checks, and provider-specific backends.

When should I use Deep Research MCP Guide?

Deep Research MCP Guide fits situations like: running deep-research-cli in direct agent mode against a research question; calling DeepResearchAgent and ResearchConfig from Python code; exposing the project as an HTTP or stdio MCP server for another client; debugging why the wrong provider is used after earlier configuration.

How do I install Deep Research MCP Guide in Claude Code?

Run `npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a claude-code`. Or copy the skill folder (skills/deep-research-mcp in pminervini/deep-research-mcp) into .claude/skills/deep-research-mcp in your project. Claude Code loads it when a task matches its description.

How do I install Deep Research MCP Guide in Codex?

Run `npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a codex`. Or copy the skill folder (skills/deep-research-mcp in pminervini/deep-research-mcp) into .agents/skills/deep-research-mcp in your project. Codex loads it when a task matches its description.

Can I use Deep Research MCP Guide in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/deep-research-mcp, .gemini/skills/deep-research-mcp, .github/skills/deep-research-mcp and .opencode/skills/deep-research-mcp in your project.

What does Deep Research MCP Guide need to run?

Going by SKILL.md and its folder, Deep Research MCP Guide needs the command-line tools its instructions call (uv, pip and python) and credentials named OPENAI_API_KEY, GEMINI_API_KEY and RESEARCH_API_KEY. Our summary lists: Python with `uv` or pip; OPENAI_API_KEY or GEMINI_API_KEY for the chosen provider; A running DR-Tulu service for the DR-Tulu backend.

Does Deep Research MCP Guide access the network?

SKILL.md names 2 domains. In commands or code: api.openai.com and generativelanguage.googleapis.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Deep Research MCP Guide safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Deep Research MCP Guide use?

Deep Research MCP Guide is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Deep Research MCP Guide use?

About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Deep Research MCP Guide?

Skills that share tags, products or a category with Deep Research MCP Guide: Opik (comet-ml/opik-mcp, 220 stars), Tool Design (agentailor/fullstack-langgraph-nextjs-agent, 132 stars), Facturas (gustavoeenriquez/MakerAi, 212 stars) and Mcpa Certification (fancyboi999/ai-engineering-from-scratch-zh, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Deep Research MCP Guide?

pminervini (a GitHub user) maintains it in pminervini/deep-research-mcp, which has 114 GitHub stars. The repository was last updated on September 28, 2026.

Source: pminervini/deep-research-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.