Deep Research MCP performs iterative, AI-powered research on user-specified topics by generating targeted search queries, evaluating source reliability with detailed scoring, and synthesizing findings into comprehensive markdown reports. The server provides tools for controlling research scope through depth and breadth parameters, filtering sources by reliability thresholds (≥0.7), and accepting natural-language source preferences to avoid low-quality content like listicles and affiliate reviews. It solves the problem of conducting thorough, multi-layered research by automating query generation, source evaluation, and report generation while supporting multiple LLM providers (OpenAI, Anthropic, Google, xAI) and deployment options (CLI, MCP, or HTTP).
This repo is an experiment on agent coding. 95% of the code is written by LLM's
An AI-powered research assistant that performs deep, iterative research on any topic. It combines search engines, web scraping, and AI to explore topics in depth and generate comprehensive reports. Available as a Model Context Protocol (MCP) tool or standalone CLI. Look at exampleout.md to see what a report might look like.
git clone https://github.com/Ozamatash/deep-research
cd deep-research
npm install
.env.local:# Copy the example environment file
cp .env.example .env.local
# Build the server
npm run build
npm run start
For remote servers: Streamable HTTP
npm run start:http
Server runs on http://localhost:3000/mcp without session management.
Pick a provider and model per run.
openai + gpt-5.2.model, e.g. openai:gpt-5.2 (also accepts openai/gpt-5.2).Set the corresponding API key in .env.local:
OPENAI_API_KEY=...
ANTHROPIC_API_KEY=...
GOOGLE_API_KEY=...
XAI_API_KEY=...
Optionally set default models per provider:
OPENAI_MODEL=gpt-5.2
ANTHROPIC_MODEL=claude-opus-4-5
GOOGLE_MODEL=gemini-3-pro-preview
XAI_MODEL=grok-4-1-fast-reasoning
If you use a non-default OpenAI endpoint:
OPENAI_ENDPOINT=https://api.openai.com/v1
flowchart TB
subgraph Input
Q[User Query]
B[Breadth Parameter]
D[Depth Parameter]
FQ[Feedback Questions]
end
subgraph Research[Deep Research]
direction TB
SQ[Generate SERP Queries]
SR[Search]
RE[Source Reliability Evaluation]
PR[Process Results]
end
subgraph Results[Research Output]
direction TB
L((Learnings with
Reliability Scores))
SM((Source Metadata))
ND((Next Directions:
Prior Goals,
New Questions))
end
%% Main Flow
Q & FQ --> CQ[Combined Query]
CQ & B & D --> SQ
SQ --> SR
SR --> RE
RE --> PR
%% Results Flow
PR --> L
PR --> SM
PR --> ND
%% Depth Decision and Recursion
L & ND --> DP{depth > 0?}
DP -->|Yes| SQ
%% Final Output
DP -->|No| MR[Markdown Report]
%% Styling
classDef input fill:#7bed9f,stroke:#2ed573,color:black
classDef process fill:#70a1ff,stroke:#1e90ff,color:black
classDef output fill:#ff4757,stroke:#ff6b81,color:black
classDef results fill:#a8e6cf,stroke:#3b7a57,color:black,width:150px,height:150px
class Q,B,D,FQ input
class SQ,SR,RE,PR process
class MR output
class L,SM,ND results
Instead of using the Firecrawl API, you can run a local instance. You can use the official repo or my fork which uses searXNG as the search backend to avoid using a searchapi key:
git clone https://github.com/Ozamatash/localfirecrawl
cd localfirecrawl
# Follow setup in localfirecrawl README
.env.local:FIRECRAWL_BASE_URL="http://localhost:3002"
Add observability to track research flows, queries, and results using Langfuse:
# Add to .env.local
LANGFUSE_PUBLIC_KEY="your_langfuse_public_key"
LANGFUSE_SECRET_KEY="your_langfuse_secret_key"
The app works normally without observability if no Langfuse keys are provided.
MIT License
csoai-org/pdf-document-mcp
xt765/mcp-document-converter
io.github.xjtlumedia/markdown-formatter
io.github.ai-aviate/better-notion
suekou/mcp-notion-server
meterlong/mcp-doc