Fully-typed Python SDK that wraps the Gemini CLI (google-gemini/gemini-cli).
Project description
gemini-cli-sdk-py (Python)
A fully-typed Python SDK that wraps the Gemini CLI (google-gemini/gemini-cli) by executing the installed gemini binary as a subprocess.
Key capabilities
- Headless prompts (text / JSON / streaming JSONL events)
- Strict typing + Pydantic models for structured outputs
- CLI feature parity via:
- Typed options for common flags
- A generic
run()escape hatch for new/unmodeled flags/commands
- MCP server management (
gemini mcp add|list|remove) - Session continuation via
--resume
Prerequisites
- Python 3.10+
- Gemini CLI installed and available as
gemini(or passexecutable=...)
Gemini CLI docs:
- Headless mode and output formats: https://geminicli.com/docs/cli/headless/
- Configuration and flags: https://geminicli.com/docs/get-started/configuration/
- Session management (
--resume): https://geminicli.com/docs/cli/session-management/ - MCP servers: https://geminicli.com/docs/tools/mcp-server/
Install (local dev)
python -m pip install -e .[dev]
Quickstart
Text output
from gemini_cli_sdk import GeminiCLI
cli = GeminiCLI()
text = cli.prompt_text("What is the capital of France?")
print(text)
JSON output (--output-format json)
from gemini_cli_sdk import GeminiCLI
cli = GeminiCLI()
resp = cli.prompt_json("What is the capital of France?")
print(resp.response)
print(resp.stats.models)
Streaming JSON output (--output-format stream-json)
from gemini_cli_sdk import GeminiCLI
cli = GeminiCLI()
for event in cli.prompt_stream_json("List files in this folder and summarize them"):
if event.type == "message" and event.role == "assistant":
# In stream mode, assistant messages can arrive as deltas
print(event.content or "", end="")
Event types are documented in the Gemini CLI headless docs.
Resume a previous session
from gemini_cli_sdk import GeminiCLI, RunOptions
cli = GeminiCLI(default_options=RunOptions(resume=True)) # resume latest
print(cli.prompt_text("Continue where we left off. Summarize next steps."))
MCP server management
from gemini_cli_sdk import GeminiCLI
from gemini_cli_sdk.mcp import McpAddRequest
from gemini_cli_sdk.enums import McpTransport
cli = GeminiCLI()
# List
servers = cli.mcp_list()
print(servers)
# Add an SSE server
cli.mcp_add(McpAddRequest(
transport=McpTransport.SSE,
name="sse-server",
url="https://api.example.com/sse/",
))
# Remove (default scope is handled by Gemini CLI)
cli.mcp_remove("sse-server")
Settings model (.gemini/settings.json)
from pathlib import Path
from gemini_cli_sdk import GeminiSettings
settings = GeminiSettings.load(Path(".gemini/settings.json"))
print(settings.model_dump())
The CLI evolves quickly; this model is forward-compatible via extra="allow".
CLI help/spec discovery
from gemini_cli_sdk import GeminiCLI
cli = GeminiCLI()
spec = cli.help_spec()
print(spec.usage)
print([c.name for c in spec.commands])
Testing
pytest -q
Project details
Release history Release notifications | RSS feed
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_sdk_py-0.1.0.tar.gz.
File metadata
- Download URL: gemini_cli_sdk_py-0.1.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05a8f0c0549d4526a1c2aaa246e219f6695526e1b6a5287a55d26ecd56d31bb8
|
|
| MD5 |
4b04f0c3a134b3e91716de688a78629e
|
|
| BLAKE2b-256 |
3a68c3364fad79153b221642fc20e3429c1fd633aa57d347f8b13df169eab8ef
|
File details
Details for the file gemini_cli_sdk_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: gemini_cli_sdk_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0112e50677fde7fec81ac685271e4c9261780c992f2ec7cf2d23b15fcfebfecd
|
|
| MD5 |
4484871046d467630f496a1ffd33061e
|
|
| BLAKE2b-256 |
6236461815ce1052a6c7ba5814a4e4395d9f546f3b48d404124184ff3d77ee1f
|