Skip to main content
Glama

Gemini Deep Research MCP

PyPI version npm version License: MIT

An MCP server that exposes Gemini's Deep Research Agent for comprehensive web research.

One-Click Install

IDE

Install

Cursor

Install in Cursor

VS Code

Install in VS Code

VS Code Insiders

Install in VS Code Insiders

Note: After clicking, replace your-api-key with your Gemini API key. VS Code requires version 1.101+.


Related MCP server: Gemini Research MCP Server

Installation Methods

Using npx (Node.js)

Requires Node.js 16+ and uv.

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

  1. Open the Agent side panel → click ...MCP Store

  2. Search for your MCP server or click Add Custom Server

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

prompt

string

Your comprehensive research question or topic

Output

Description

job_id

Unique tracking ID for the research job

status

Initial job state (e.g. in_progress)


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

job_id

string

The research tracking ID from start_deep_research

include_citations

boolean

true

Include source URLs in the report

Output

Description

job_id

The tracking ID of the research job

status

Exact current job state (in_progress, completed, failed, or cancelled)

report_text

Synthesized markdown research report (when completed)

uptime

Elapsed time while the job is in progress, when available

error

Failure details, when the API provides them

Configuration

Variable

Required

Default

Description

GEMINI_API_KEY

Your Gemini API key

GEMINI_DEEP_RESEARCH_AGENT

deep-research-preview-04-2026

Deep Research agent to use. Set to deep-research-max-preview-04-2026 for maximum thoroughness, or deep-research-preview-04-2026 for standard speed.

Development

git clone https://github.com/bharatvansh/gemini-deep-research-mcp.git
cd gemini-deep-research-mcp
pip install -e .[dev]
pytest

License

MIT

Available Tools

2 tools
check_deep_researchCheck Gemini Deep ResearchA
Read-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 by start_deep_research (required)

  • include_citations: Whether to include source URLs in the report (default: true)

Returns:

  • job_id: The tracking ID of the research job

  • status: Current job state ('in_progress', 'completed', 'failed', or 'cancelled')

  • report_text: The synthesized research report when completed

  • uptime: Elapsed time while the job is in progress, when available

  • error: Failure details, when the API provides them

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes
include_citationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
job_idNo
statusNo
uptimeNo
report_textNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 job

  • status: Initial job state (typically 'in_progress')

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
job_idYes
statusYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

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/bharatvansh/gemini-deep-research-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server