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).
Related MCP server: gemini-cli-mcp
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). On Windows this must point at the CLI's JavaScript entry (npm'sgemini.cmd/gemini.ps1shims cannot be spawned without a shell); see the Windows note under Troubleshooting.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"
}
}
}
}Windows: exit 127 even though gemini works in your terminal
On Windows, npm installs the gemini command as a gemini.cmd /
gemini.ps1 shim. The server spawns the child without a shell (by design —
shell-spawning .cmd files is restricted since CVE-2024-27980), so the
default gemini binary name cannot be executed and every call returns the
exit-127 "binary not found" result. On Windows you must point
GEMINI_CLI_BIN at the CLI's JavaScript entry; the server runs
.js/.cjs/.mjs paths with its own Node runtime:
{
"mcpServers": {
"gemini": {
"command": "geminicli-mcp",
"env": {
"GEMINI_CLI_BIN": "C:\\Users\\you\\AppData\\Roaming\\npm\\node_modules\\@google\\gemini-cli\\bundle\\gemini.js"
}
}
}
}Find the right path with npm root -g — the entry point is
<npm root -g>\@google\gemini-cli\bundle\gemini.js.
"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
Maintenance
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
- 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/trevoraspencer/geminicli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server