gemini-deep-research-mcp
Enables comprehensive web research using Google's Gemini Deep Research Agent via the MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gemini-deep-research-mcpresearch the latest developments in quantum computing and their potential impact on cryptography"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Gemini Deep Research MCP
An MCP server that exposes Gemini's Deep Research Agent for comprehensive web research.
One-Click Install
IDE | Install |
Cursor | |
VS Code | |
VS Code Insiders |
Note: After clicking, replace
your-api-keywith your Gemini API key. VS Code requires version 1.101+.
Related MCP server: Gemini Research MCP Server
Installation Methods
Using npx (Node.js)
npx @bharatvansh/gemini-deep-research-mcp{
"servers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows):
{
"mcpServers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.claude/settings.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codex/config.toml:
[mcp_servers.gemini-deep-research]
command = "npx"
args = ["-y", "@bharatvansh/gemini-deep-research-mcp"]
[mcp_servers.gemini-deep-research.env]
GEMINI_API_KEY = "your-api-key"Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to your Antigravity mcp_config.json:
{
"gemini-deep-research": {
"command": "npx",
"args": ["-y", "@bharatvansh/gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}Using uvx (Python)
Requires uv.
uvx gemini-deep-research-mcp{
"servers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows):
{
"mcpServers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.claude/settings.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codex/config.toml:
[mcp_servers.gemini-deep-research]
command = "uvx"
args = ["gemini-deep-research-mcp"]
[mcp_servers.gemini-deep-research.env]
GEMINI_API_KEY = "your-api-key"Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to your Antigravity mcp_config.json:
{
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}Using pip
pip install gemini-deep-research-mcp{
"servers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows):
{
"mcpServers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}{
"mcpServers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.claude/settings.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to ~/.codex/config.toml:
[mcp_servers.gemini-deep-research]
command = "gemini-deep-research-mcp"
[mcp_servers.gemini-deep-research.env]
GEMINI_API_KEY = "your-api-key"Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}Add to your Antigravity mcp_config.json:
{
"gemini-deep-research": {
"command": "gemini-deep-research-mcp",
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}Antigravity
Open the Agent side panel → click ... → MCP Store
Search for your MCP server or click Add Custom Server
Add this configuration to your
mcp_config.json:
{
"gemini-deep-research": {
"command": "uvx",
"args": ["gemini-deep-research-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}Prerequisites
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"Tools
1. start_deep_research
Initiates a deep, multi-step web research job in the background using Google's Deep Research Agent. Returns a job_id, which you can use to check the status of completion using check_deep_research(job_id=...).
Parameter | Type | Required | Default | Description |
| string | ✓ | — | Your comprehensive research question or topic |
Output | Description |
| Unique tracking ID for the research job |
| Initial job state (e.g. |
2. check_deep_research
Checks the status of a Deep Research job using its job_id and returns the complete report once finished.
Parameter | Type | Required | Default | Description |
| string | ✓ | — | The research tracking ID from |
| boolean |
| Include source URLs in the report |
Output | Description |
| The tracking ID of the research job |
| Exact current job state ( |
| Synthesized markdown research report (when |
| Elapsed time while the job is in progress, when available |
| Failure details, when the API provides them |
Configuration
Variable | Required | Default | Description |
| ✓ | — | Your Gemini API key |
|
| Deep Research agent to use. Set to |
Development
git clone https://github.com/bharatvansh/gemini-deep-research-mcp.git
cd gemini-deep-research-mcp
pip install -e .[dev]
pytestLicense
MIT
Available Tools
2 toolscheck_deep_researchCheck Gemini Deep ResearchARead-onlyIdempotent
Checks the status of a Deep Research job using its job_id and returns the complete report once finished.
Parameters:
job_id: The tracking ID returned bystart_deep_research(required)include_citations: Whether to include source URLs in the report (default: true)
Returns:
job_id: The tracking ID of the research jobstatus: Current job state ('in_progress', 'completed', 'failed', or 'cancelled')report_text: The synthesized research report when completeduptime: Elapsed time while the job is in progress, when availableerror: Failure details, when the API provides them
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| include_citations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| job_id | No | |
| status | No | |
| uptime | No | |
| report_text | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, which cover most behavioral traits. The description adds that it returns status updates and elapsed time while in progress, which is useful context for polling. It doesn't contradict annotations. The description is adequate given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence and a parameter/return list. It front-loads the core purpose. Some redundancy exists with the input schema (e.g., parameter defaults are repeated), but it's compact and organized for scanning. Slightly verbose with the return fields listed, but acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential purpose, parameters, and return behavior. It mentions statuses and error handling. Given that an output schema exists and annotations are strong, the description is nearly complete. Minor gap: it doesn't explain the polling pattern or when the job expires, but that's acceptable for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explicitly documents both parameters: job_id as the tracking ID and include_citations with its default. It adds meaning beyond the bare schema by explaining what the job_id is and what include_citations does. This matches the baseline for tools where the description compensates for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks the status of a Deep Research job and returns the complete report once finished. It names the verb 'checks', the resource 'Deep Research job', and the specific outcome. It distinguishes itself from its sibling start_deep_research by focusing on status checking and report retrieval rather than initiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool: after starting a job with start_deep_research, passing the job_id. It also clarifies that it returns the report upon completion, implying polling behavior. However, it doesn't explicitly state when not to use it or mention alternatives beyond the sibling, but the context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_deep_researchStart Gemini Deep ResearchA
Initiates a deep, multi-step web research job in the background using Google's Deep Research Agent. Returns a job_id, which you can use to check the status of completion using check_deep_research(job_id=...).
Parameters:
prompt: The comprehensive research question or topic to investigate (required)
Returns:
job_id: Unique tracking ID for the research jobstatus: Initial job state (typically 'in_progress')
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| job_id | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only behavior (readOnlyHint=false), non-idempotency (idempotentHint=false), and open-world interaction (openWorldHint=true). The description adds that the job runs 'in the background' and returns an initial status of 'in_progress', which explains the asynchronous nature and what to expect immediately. It does not mention rate limits or failure modes, but with annotations covering the basic safety profile, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is focused and front-loaded: the core action and asynchronous nature are in the first sentence, followed by the return values and parameter. The bullet-point structure for parameters and returns makes it scannable. It is slightly longer than absolutely necessary but every clause adds value, and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that starts a background job, the description covers the essential contract: what it does, what it returns, and how to proceed (via check_deep_research). It doesn't discuss preconditions like authentication or possible long execution times, but these are not critical for an initial call. With an output schema present, the return-value details are likely expanded there. Overall, an agent has enough to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for parameter meaning. It defines 'prompt' as 'The comprehensive research question or topic to investigate' and marks it required. This exceeds the schema's bare 'prompt' field and gives the agent guidance on what kind of input is expected. It could add more detail like length or format, but it's sufficiently clear for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear action: 'Initiates a deep, multi-step web research job in the background.' It identifies both the resource (Google's Deep Research Agent) and the output (job_id), which distinguishes it from check_deep_research, the only sibling that polls status. The purpose is unambiguous and not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly connects to the sibling: 'you can use to check the status of completion using check_deep_research(job_id=...)'. This tells the agent when to use this tool (to start research) and how to follow up. It doesn't state when not to use it, but given only one sibling, the workflow is clear. A minor omission is a direct 'use this when you have a new research question' phrasing, but the intent is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The two tools have completely distinct responsibilities: one initiates a research job accordion to a prompt, and the other polls for status and retrieves the report. There is no overlap in functionality or ambiguity about which tool to use in any given situation.
Both tools follow a consistent verb_noun pattern: 'start_deep_research' and 'check_deep_research'. The action (start/check) clearly precedes the domain (deep_research), making the naming predictable and intuitive.
With only two tools, the surface is minimal but matches the narrow scope of managing a deep research job. However, per the calibration this falls in the borderline category (1-2 tools). It is slightly thin, though not unreasonable for such a specific workflow.
The lifecycle is essentially complete: start a job and retrieve the final report. The absence of a cancel or list tools is a minor gap, but the core workflow (initiate and poll) is fully covered from the agent's perspective.
Maintenance
Related MCP Connectors
An MCP server for deep research or task groups
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that utilizes LangGraph and Google Gemini to conduct comprehensive research through multi-iteration deep searches and quick results. It provides high-quality analysis with automated citations and grounding metadata for thorough investigations.2MIT
- AlicenseAqualityBmaintenanceMCP server for AI-powered research using Gemini. Provides fast grounded web search, deep autonomous research, URL extraction, and session management.69MIT
- AlicenseAqualityCmaintenanceAn advanced MCP server that provides an agentic interface to Google's Gemini 3.1 models via Vertex AI, combining real-time Google Search, URL analysis, and Python code execution to solve complex multi-step research and data tasks.1MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that performs iterative deep research using Google Gemini 2.5 Flash with search grounding and URL context, producing professional Markdown reports.1071MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bharatvansh/gemini-deep-research-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server