Gemini CLI MCP Server
Project description
gemini-cli-mcp Python Server
This directory contains the Python implementation of the gemini-cli-mcp server. It uses FastAPI to expose gemini-cli functionalities as MCP-compliant tools.
1. Features
This server exposes the following gemini-cli commands as MCP Tools:
gemini_ask: Ask a question to the Gemini model.gemini_agent: Run a complex prompt with Gemini Agent in auto-execution (--yolo) mode.gemini_git_commit: Generate a conventional commit message from staged changes and perform agit commit.gemini_git_pr: Automatically commit, push, and create a Pull Request.gemini_git_diff: Summarize code changes using Gemini AI.
2. Technology Stack
| Category | Technology |
|---|---|
| Language | Python 3.12+ |
| Web Framework | FastAPI |
| Process Exec | asyncio.subprocess |
| CLI Framework | Typer (via mcp-cli) |
| Packaging | Poetry / pyproject.toml |
3. Setup
Prerequisites
- Python 3.12 or higher.
gemini-cliinstalled globally and accessible in your system's PATH.gitinstalled and configured.
Installation
- Navigate to the
server_pydirectory:cd server_py
- Install dependencies using
uv(recommended) orpip:uv pip install -r requirements.txt # or pip install -r requirements.txt
Environment Variables
The server uses environment variables for configuration. You can set these in a .env file in the project root (/path/to/project_root/.env) or directly in your environment.
GEMINI_MODEL: Specifies the Gemini model to use (e.g.,gemini-2.5-flash).GEMINI_ALL_FILES: Set totrueto include all files in context (--all-files).GEMINI_SANDBOX: Set totrueto enable sandbox mode (--sandbox).GEMINI_API_KEY: Your Gemini API key (required for Docker/server environments).PROJECT_ROOT: The root directory of your project (important forgemini-clioperations).QUERY_TIMEOUT: Timeout forgemini-clicommands in seconds.USE_SHELL: Set totrueto executegemini-clicommands via shell (defaults tofalse).DEBUG: Set totrueto enable detailed logging tolog/{date}.log.
4. Running the Server
The user can select the execution mode via a CLI flag.
- STDIO Mode:
python main.py(for direct CLI interaction) - HTTP Mode:
uvicorn main:app --host 0.0.0.0 --port 8000(for AI agent integration)
Docker
A Dockerfile is provided to build and run the server in a container.
-
Build the Image: From the project root, run:
docker build -t gemini-cli-mcp-python -f server_py/Dockerfile .
-
Run the Container:
# Using an .env file docker run --env-file ../.env -p 8000:8000 gemini-cli-mcp-python # Passing environment variables directly docker run -e GEMINI_API_KEY=your_api_key -p 8000:8000 gemini-cli-mcp-python
5. Packaging & Distribution
The package will be distributed on PyPI. The pyproject.toml file defines a script entry point for the gemini-cli-mcp command, which will be deployed using poetry build and twine.
CLI Usage
After installing the package via pip, you can use the CLI entry point:
$ gemini-cli-mcp
This will launch the server in STDIO mode. To run in HTTP mode, use:
$ gemini-cli-mcp --http
6. Tool Usage
The server acts as a smart wrapper around gemini-cli. It constructs and executes the appropriate gemini-cli command based on the MCP tool invocation.
For example:
gemini_ask(question="What is AI?")translates togemini ask --model {model} --all-files --sandbox --prompt "What is AI?"gemini_agent(prompt="Do something complex.")translates togemini agent --model {model} --all-files --sandbox --yolo --prompt "Do something complex."
7. Logging
Set the DEBUG environment variable to true to enable detailed logging to server_py/log/{YYYY-MM-DD}.log.
8. MCP Client Integration Guide
The gemini-cli-mcp server supports both HTTP and STDIO modes. Below are instructions and configuration examples for integrating as an external MCP server in clients like Cursor, Windsurf, and Claude Code.
8.1 Integration via HTTP Mode
-
Start the server
gemini-cli-mcp --http # or uvicorn main:app --host 0.0.0.0 --port 8000
- Default port is
8000. - Use
--host 0.0.0.0for remote access.
- Default port is
-
Register the MCP server in your client
- MCP server URL:
http://localhost:8000(or your server's IP)
- MCP server URL:
Cursor, Windsurf Example
// cursor: $HOME/.cursor/mcp.json
// windwurf: $HOME/.codeium/windsurf/mcp_config.json
```json
{
"mcpServers": {
"gemini-cli-mcp": {
"url": "http://localhost:8000"
}
}
}
8.2 Integration via STDIO Mode
- No need to start the server manually
- The MCP client will launch the process and communicate via STDIO.
- Just register the following configuration.
Cursor, Windsurf Example
// cursor: $HOME/.cursor/mcp.json
// windwurf: $HOME/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"gemini-cli-mcp": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/project_root/server_py/main.py"
"run",
"main.py"
],
"env": {
"GEMINI_MODEL": "gemini-2.5-flash",
"PROJECT_ROOT": "/path/to/project_root"
}
}
}
}
Claude Code Example
// Settings > Developer > Edit Config > claude_desktop_config.json
// find command location with `which gemini-cli-mcp`
// MUST provide a Gemini API key to use with Claude Desktop
{
"mcpServers": {
"gemini-cli-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/project_root/server_py/main.py"
"run",
"main.py"
],
"env": {
"GEMINI_API_KEY": "your_api_key",
"GEMINI_MODEL": "gemini-2.5-flash",
"PROJECT_ROOT": "/path/to/project_root"
}
}
}
}
8.3 Integration via pip install
- Install package
pip install gemini-cli-mcp
- Register the MCP server in your client
Cursor, Windsurf Example
{
"mcpServers": {
"gemini-cli-mcp": {
"type": "stdio",
"command": "gemini-cli-mcp",
"args": [],
"env": {
"GEMINI_MODEL": "gemini-2.5-flash",
"PROJECT_ROOT": "/path/to/project_root"
}
}
}
}
Claude Code Example
{
"mcpServers": {
"gemini-cli-mcp": {
"command": "gemini-cli-mcp",
"args": [],
"env": {
"GEMINI_API_KEY": "your_api_key",
"GEMINI_MODEL": "gemini-2.5-flash",
"PROJECT_ROOT": "/path/to/project_root"
}
}
}
}
Notes:
- HTTP mode allows multiple clients to connect over the network.
- STDIO mode launches a separate process per client.
- Adjust environment variables (
env) as needed for your use case.- If the server and client are on different machines, ensure firewall/port forwarding is configured appropriately.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gemini_cli_mcp-0.1.5.tar.gz.
File metadata
- Download URL: gemini_cli_mcp-0.1.5.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bb798845ccdf6c2f72efd103165ef6f4aafdc4f28d8593a696b06669e3f6c35
|
|
| MD5 |
109ecc3fec9b024994cb8c312cade106
|
|
| BLAKE2b-256 |
c7f041a0f5d1c1952d1e5332a1c428ca71985aab5ce08b65b075bd62b4a9f4a3
|
File details
Details for the file gemini_cli_mcp-0.1.5-py3-none-any.whl.
File metadata
- Download URL: gemini_cli_mcp-0.1.5-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4b5d389dbf197d2a514e09e4c3154962f71f6f6c50ab4de63669ebc7a2e37a3
|
|
| MD5 |
bcd8c63d7b5b1a8204e73bb82602cca9
|
|
| BLAKE2b-256 |
32c197409cae8d869a8da460f3fe584b5b41713f14b332bc5b17efe03bb7521a
|