geminicli-mcp
The geminicli-mcp server acts as a stateless MCP bridge to the headless Gemini CLI, enabling programmatic interaction with Gemini models through three tools:
gemini_prompt: Send a direct text prompt to a Gemini model and receive a text response.gemini_prompt_with_context: Send a prompt along with a separate context block, automatically prepended inside a<context>tag before the prompt.gemini_prompt_structured: Request a model response conforming to a provided JSON Schema; the server validates and returns canonical JSON, or detailed error diagnostics on failure.
Key characteristics:
Model selection: All tools accept an optional
modelparameter (e.g.,gemini-2.5-pro).Stateless: Each tool call is independent with no sessions or persistent state.
Environment inheritance: The child Gemini CLI process inherits the server's environment, including
GEMINI_API_KEY.Configurable: Binary path via
GEMINI_CLI_BIN, output cap viaGEMINICLI_MCP_MAX_OUTPUT_BYTES, and debug logging viaGEMINICLI_MCP_DEBUG.Error reporting: Surfaces Gemini CLI exit codes with specific codes for auth issues, validation failures, and turn limits.
Security caveat: Hardcodes
--approval-mode yolo, meaning any tool calls or file edits the model requests are auto-approved — only use with trusted MCP clients.
Provides tools to invoke Google's Gemini AI models via the Gemini CLI, enabling prompt-based interactions, context injection, and structured JSON responses.
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., "@geminicli-mcpsummarize this article about AI safety"
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.
geminicli-mcp
Stateless stdio MCP server wrapping the headless Gemini CLI.
stdio transport, spawn-per-client
three tools:
gemini_prompt,gemini_prompt_with_context,gemini_prompt_structuredno sessions, no
working_dir, no timeout enforcementruns in the server process's
cwdchild env inherits the server's env (so
GEMINI_API_KEYflows through) and pinsNO_COLOR=1,TERM=dumb; prompt is always a single argv element — never interpolated into a shell stringsingle runtime dependency:
@modelcontextprotocol/sdk
Prerequisites
Node.js ≥ 20
@google/gemini-cli ≥ 0.6.1 — this server invokes the CLI with
--output-format json, which is only recognised by gemini-cli 0.6.1 and newer (upstream PR #8119).
Install from npm
npm install -g geminicli-mcpThis exposes the geminicli-mcp binary on your PATH. Point your MCP client
at it:
// e.g. ~/.config/<your-client>/mcp.json
{
"mcpServers": {
"gemini": {
"command": "geminicli-mcp"
}
}
}You also need the headless Gemini CLI installed and authenticated:
npm install -g @google/gemini-cli
gemini # one-time interactive authInstall from source
git clone https://github.com/trevoraspencer/geminicli-mcp.git
cd geminicli-mcp
npm install
npm run build
node dist/index.jsTools
gemini_prompt
field | type | required | notes |
prompt | string | yes | prompt text |
model | string | no | e.g. |
Returns the CLI's response text.
gemini_prompt_with_context
field | type | required | notes |
prompt | string | yes | prompt text |
context | string | yes | prepended to the prompt inside |
model | string | no | e.g. |
Returns the CLI's response text.
gemini_prompt_structured
field | type | required | notes |
prompt | string | yes | prompt text |
schema | object | yes | JSON Schema the response must conform to (see below) |
context | string | no | optional context block prepended inside |
model | string | no | e.g. |
The server appends an explicit "respond with JSON conforming to this schema"
instruction to your prompt, extracts JSON from the model's response (it
tolerates surrounding prose or a ```json fence), and validates the
result against schema. On success the tool returns the canonical JSON
string. On failure the result is isError: true with a diagnostic that
includes both the validation errors and the raw response.
A minimal schema looks like:
{
"type": "object",
"required": ["title", "tags"],
"properties": {
"title": { "type": "string" },
"tags": { "type": "array", "items": { "type": "string" } }
},
"additionalProperties": false
}The bundled validator supports a useful subset of JSON Schema: type (with
all primitive types plus array and object), required, properties,
items, additionalProperties, enum, const, minLength/maxLength,
minItems/maxItems, minimum/maximum, pattern, and the anyOf /
oneOf / allOf combinators. It is deliberately small — if you need full
JSON Schema 2020-12, pre-validate on the caller side.
Examples
The examples/ directory contains runnable JSON-RPC request
files you can pipe into the server over stdio. See
examples/README.md for a one-liner that lists tools
or invokes a tool from the command line.
Environment
GEMINI_CLI_BIN— override thegeminibinary path (default:geminionPATH).GEMINICLI_MCP_MAX_OUTPUT_BYTES— cap (per stream) on bytes accumulated from the gemini child's stdout/stderr before the server kills it (default: 33554432 / 32 MiB). Guards against a runaway child OOM-ing the server.GEMINICLI_MCP_DEBUG— when set to1,true, oryes, emits structured JSON diagnostics to stderr (invocation args, exit codes, durations, stderr content, kill-failure markers). Safe for MCP use: diagnostics go to stderr only and never corrupt the stdio protocol on stdout. Leave unset in production; enable only for targeted debugging.Child process env inherits the server's environment, plus forced
NO_COLOR=1/TERM=dumb. Anything the server can read — includingGEMINI_API_KEYand friends — the gemini CLI can read.
Exit codes
The server surfaces the gemini CLI's exit code via the errorKind /
exit= prefix on error responses (e.g. [error exit=1] ...).
code |
| meaning |
|
| success |
|
| general model error or API failure |
|
| gemini CLI is not authenticated; run |
|
| bad arguments (or bad schema, for the structured tool) |
|
| gemini's turn / tool-call budget was exhausted |
|
| gemini binary not found (set |
other |
| gemini reported a code outside the documented set |
Security caveats
--approval-mode yolois always on. The server hardcodes this flag so it can run non-interactively. Any tool calls or file edits the gemini CLI performs are auto-approved. Do not expose this MCP server to MCP clients you don't trust.No quota controls. A caller that can reach this server can make unlimited gemini API calls at your expense. Gate access at the MCP-client layer.
Child inherits the server's env. Don't place secrets in the server's env that you don't want the gemini CLI (and its plugins) to see.
Troubleshooting
Unknown arguments: output-format / Unknown arguments: outputFormat
Your @google/gemini-cli is older than 0.6.1, which is when
--output-format json was added
(upstream PR #8119).
Upgrade:
npm install -g @google/gemini-cli@latest
gemini --version # confirm ≥ 0.6.1"Gemini CLI binary not found" (exit 127)
The server could not spawn the gemini executable. Either:
Install the Google headless Gemini CLI (
npm install -g @google/gemini-cli), then verify withwhich gemini && gemini --version; orSet
GEMINI_CLI_BIN=/absolute/path/to/geminiin the server's environment.
If you launch the MCP server from a GUI (Claude Desktop, IDE), it may not
inherit your shell PATH. Either pass an absolute path via GEMINI_CLI_BIN
or configure your MCP client's env block, e.g.:
{
"mcpServers": {
"gemini": {
"command": "geminicli-mcp",
"env": {
"PATH": "/usr/local/bin:/usr/bin",
"GEMINI_CLI_BIN": "/usr/local/bin/gemini"
}
}
}
}"Auth not configured" / authentication errors
The Gemini CLI handles its own auth (Google account, API key, or Vertex AI). This server does not touch credentials. Run the CLI directly once to authenticate:
gemini # follow the interactive prompts
echo "ping" | gemini -p "Reply with the single word: ping"If you're using an API key, make sure the relevant env vars (e.g.
GEMINI_API_KEY, GOOGLE_APPLICATION_CREDENTIALS) are present in the MCP
server's env block — children inherit the server's environment but the
server's environment is whatever your MCP client gave it.
"Gemini response did not match schema" (gemini_prompt_structured)
The error text includes both the validation errors and the raw response so you can see what the model produced. Common fixes:
Tighten the prompt so it can't ramble (the server already appends a JSON-only instruction).
Make the schema friendlier — e.g. allow
additionalProperties: truefor fields you don't need to constrain.Pick a stronger model (
model: "gemini-2.5-pro").
Design invariants
These are intentional, not omissions. See
CONTRIBUTING.md for the full list.
Stateless: no session IDs, no
--resume, noworking_dir.Spawn-per-client: one server process per MCP client.
No timeout enforcement in the server — the client and CLI are authoritative.
No shell interpolation.
One runtime dependency (
@modelcontextprotocol/sdk).
License
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/trevoraspencer/geminicli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server