Opik
comet-ml/opik-mcp
Reference for the Opik SDK — tracing, span types, framework integrations, threads, and the prompt library (Python, TypeScript, REST).
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.
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .claude/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcpType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/deep-research-mcp .agents/skills/deep-research-mcp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .agents/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/deep-research-mcp .cursor/skills/deep-research-mcp && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .cursor/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pminervini/deep-research-mcp.git --path skills/deep-research-mcp--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/deep-research-mcp .gemini/skills/deep-research-mcp && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .gemini/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pminervini/deep-research-mcp deep-research-mcpInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/deep-research-mcp .github/skills/deep-research-mcp && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .github/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pminervini/deep-research-mcp --skill deep-research-mcp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pminervini/deep-research-mcp deep-research-mcp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pminervini/deep-research-mcp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/deep-research-mcp .opencode/skills/deep-research-mcp && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "deep-research-mcp" agent skill from https://github.com/pminervini/deep-research-mcp/tree/main/skills/deep-research-mcp into .opencode/skills/deep-research-mcp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "deep-research-mcp", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
deep-research-mcpExplains 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. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 31213c1. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
uvpippythonFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
api.openai.comgenerativelanguage.googleapis.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OPENAI_API_KEYGEMINI_API_KEYRESEARCH_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from pminervini/deep-research-mcp at commit 31213c1, republished under its MIT licence (© pminervini). 1,358 words, ~5,829 tokens.
.claude/skills/deep-research-mcp/SKILL.md (or your agent's skills folder).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
deep-research-mcp repository/project.deep-research-cli in direct agent mode.DeepResearchAgent and ResearchConfig from Python.deep-research-mcp project as an MCP server with deep-research-mcp.~/.deep_research.cli/deep-research-tui.py.deep-research-mcp codebase.There are three layers:
deep-research-cli is the installed user-facing CLI.src/deep_research_mcp/agent.py orchestrates research, callbacks, and status checks.src/deep_research_mcp/backends/*.py performs provider-specific work.The CLI can run in two modes:
DeepResearchAgent directly.--server-url.The MCP server entrypoint is the console script:
uv run deep-research-mcpIt exposes two tools:
deep_researchresearch_statusThe commands below assume you are running from the repository root.
uv sync --upgrade --extra devpython -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -e .uv sync --upgrade --extra dev --extra open-deep-researchOpenAI:
export OPENAI_API_KEY="YOUR_OPENAI_API_KEY"Gemini:
export GEMINI_API_KEY="YOUR_GEMINI_API_KEY"DR-Tulu:
deep-research-mcp itselfPOST {base_url}/chat| Provider | Backend module | How research is executed | Status polling | Notes |
|---|---|---|---|---|
openai + api_style=responses | openai_backend.py | OpenAI Responses API in background mode with GPT-5.6 Sol, web_search, and optionally code_interpreter | Yes | Default deep-research path |
openai + api_style=chat_completions | openai_backend.py | One-shot Chat Completions call | No persistent status | Useful for OpenAI-compatible providers like Perplexity, Groq, Ollama, vLLM |
gemini | gemini_backend.py | Gemini Interactions API with background=True | Yes | Uses google-genai; include_analysis is ignored by the backend |
dr-tulu | dr_tulu_backend.py | POST {base_url}/chat | No | Requires a separately running DR-Tulu service |
open-deep-research | open_deep_research_backend.py | Local Open Deep Research stack via smolagents | No | Needs extra optional dependencies |
ResearchConfig.load() merges:
~/.deep_researchThis 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:
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--modelSafe pattern when switching providers from the command line:
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 "..."[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[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[research]
provider = "dr-tulu"
model = "dr-tulu"
base_url = "http://localhost:8080"
api_key = ""
timeout = 1800
poll_interval = 30dr-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.
Direct agent mode is the default when you do not pass --server-url.
uv run deep-research-cli research "Your research query"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.mdKey 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 onlyCommand:
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.mdIllustrative output excerpt from an earlier OpenAI model (not a GPT-6 verification):
============================================================
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:
deep-research-mcp.total_steps and search_queries are meaningful for this backend.Command:
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.mdObserved output excerpt:
============================================================
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:
Sources: section.include_analysis does not map to a Gemini code-execution tool toggle in this backend.Command:
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.mdObserved output excerpt:
============================================================
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:
dr-tulu backend works against a live POST /chat service.total_steps comes from metadata.total_tool_calls.metadata.searched_links.status CLI ExampleCommand:
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_IDObserved output:
Task ID: YOUR_OPENAI_TASK_ID
Status: completed
Created: <provider_created_timestamp>
Completed: <provider_completed_timestamp>Note that timestamp formatting is provider-specific:
research_status returned formatted datetimes in this environment.ResearchConfig + DeepResearchAgentThe direct Python API is the cleanest way to embed the framework in another program.
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())Code:
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:
{
"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.uv run deep-research-mcpUse this when another client will spawn the server as a subprocess.
uv run deep-research-mcp --transport http --host 127.0.0.1 --port 8080The Streamable HTTP endpoint is:
http://127.0.0.1:8080/mcpThis pattern avoids accidental reuse of a different provider's saved credentials:
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 8081deep_researchUse for normal research. Key inputs:
querysystem_instructionsinclude_analysiscallback_urlThe 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_statusUse to poll a known task ID.
When you pass --server-url, the CLI becomes an MCP client instead of creating DeepResearchAgent itself.
Command:
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.mdObserved client-side progress output:
[progress] 0.0 Research started...
[progress] 1.0 Research in progress (1 minute)
[progress] 100.0% Research completed successfullyObserved report excerpt:
# 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 secondsresearch_status ExampleCode:
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:
{'result': 'Task YOUR_TASK_ID status: completed\nCreated at: <created_at>\nCompleted at: <completed_at>'}src/deep_research_mcp/backends/openai_backend.pyclient.responses.create(..., background=True)client.responses.retrieve(task_id)web_search for Responses modelscode_interpreter only when include_code_interpreter=Truecode_interpreter for legacy Pro models that do not support itxhigh reasoning effort for GPT-5.2+ and GPT-6 research models and high for earlier GPT-5 models unless reasoning_effort overrides itreasoning_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 settingsUse this when you want:
research_statusdeep-research-mcp repo's intended "deep research" pathStill provider="openai", but set:
--api-style chat_completionsDifferences:
research_status trackingcode_interpretersrc/deep_research_mcp/backends/gemini_backend.pygoogle.genai.Client(...).interactionsstore=Truecompletedinclude_code_interpreterObserved real-world consequences from live runs:
total_steps is smallSources: section directlysrc/deep_research_mcp/backends/dr_tulu_backend.pyPOST {base_url}/chatresponsemetadata.searched_linksmetadata.total_tool_callsresearch_status() always returns unknownCorrect direct CLI shape:
uv run deep-research-cli \
--provider dr-tulu \
--model dr-tulu \
--base-url http://localhost:8080 \
research "Your query here"Correct Python shape:
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:
deep-research-mcp repository does not bootstrap DR-Tulu for you./chat.base_url without the /chat suffix, because it appends /chat internally./chat.Cause:
~/.deep_research file already has research.api_key or research.base_url for another providerFix:
--api-key--base-url--model--configresearch_status is not usefulCause:
chat_completions, dr-tulu, or open-deep-researchFix:
openai + responses or gemini if you need task pollingcitations is emptyCause:
Fix:
final_report as the canonical user-facing outputresult.citations as best-effort normalizationOPENAI_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"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"Terminal 1:
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 8081Terminal 2:
uv run deep-research-cli \
research "Your query" \
--server-url http://127.0.0.1:8081/mcpIf you only remember three things, remember these:
openai + responses or gemini when you need status polling.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
Just SKILL.md in skills/deep-research-mcp of pminervini/deep-research-mcp.
Open the folder on GitHubat commit 31213c1
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Deep Research MCP Guide this skillpminervini/deep-research-mcp | 114 | — | ~5.8k | Automated safety check: Pass | MIT | |
| Opikcomet-ml/opik-mcp | 220 | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Tool Designagentailor/fullstack-langgraph-nextjs-agent | 132 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Facturasgustavoeenriquez/MakerAi | 212 | — | ~127 | Automated safety check: Pass | MIT | |
| Mcpa Certificationfancyboi999/ai-engineering-from-scratch-zh | 1.2k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Ydc Openai Agent SDK IntegrationLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.4k | Automated safety check: Notes | MIT |
comet-ml/opik-mcp
Reference for the Opik SDK — tracing, span types, framework integrations, threads, and the prompt library (Python, TypeScript, REST).
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).
gustavoeenriquez/MakerAi
Úsalo cuando el usuario pida redactar una factura, una cuenta de cobro o una nota de cobro.
fancyboi999/ai-engineering-from-scratch-zh
AI Engineering from Scratch 中文版中的 MCPA(Model Context Protocol Associate)AI 原生导师与入门流程。学习者需要备考 MCPA、继续认证路线、 交互式学习下一课、运行并验证实践实验、参加诊断或全真模拟、根据薄弱领域 补弱时使用。适用于 Claude Code、Codex、ChatGPT、Cursor 或其他 agent。
LeoYeAI/openclaw-master-skills
Integrate OpenAI Agents SDK with You.com MCP server - Hosted and Streamable HTTP support for Python and TypeScript.
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…
Categories
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.