# io.github.chrischall/gemini-mcp (npm · @chrischall/gemini-mcp)

Generate and edit images with Google Gemini (Nano Banana / Nano Banana Pro) image models.

- Trust score: 49/100 (low)
- Change this week: +15
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-08

## Components

- npm · `@chrischall/gemini-mcp`: 49/100 (this document), [markdown](https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp.md), [page](https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp)

## Channel facts

- Registry: `npm`
- Package: `@chrischall/gemini-mcp`
- Version: `1.6.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-08.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 30 of 97 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to chrischall/gemini-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 0/100
  - Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- **Capabilities**: 0/100
  - Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.

**Unverified: 4 categories.** Categories scored 0 because our sandbox run of this package has not given us the schema these checks need to read. That is a gap on our side rather than a finding about the package, and we only credit what we can confirm, so the score stands at 0 until the capture succeeds. We are working through the fleet, so this normally clears without any action from you.

## Install

### Claude

```bash
claude mcp add chrischall-gemini-mcp -- npx -y @chrischall/gemini-mcp
```

### Codex

```bash
codex mcp add chrischall-gemini-mcp -- npx -y @chrischall/gemini-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrischall-gemini-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@chrischall/gemini-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add chrischall-gemini-mcp --command npx --arg -y --arg @chrischall/gemini-mcp
```

### Hermes

```yaml
mcp_servers:
  chrischall-gemini-mcp:
    command: "npx"
    args: ["-y", "@chrischall/gemini-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "chrischall-gemini-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/gemini-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-08 (score 49, 0)

- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.10
- [functional improvement] Tool coverage: unverified → 100
- [functional] Package version: 1.6.0 → 1.6.1
- [functional] Package version: 1.5.1 → 1.6.0

### 2026-08-07 (score 49, −21)

- [security improvement] Known CVEs: partial → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Dependency health: partial → 0.86
- [functional] Package version: 1.5.1 → 1.6.0

### 2026-08-06 (score 70, +24)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Tool coverage: 100
- [functional] First check of Schema quality: good
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: fail

### 2026-08-05 (score 46, +2)

- [security improvement] CVE-2026-69207 no longer affects this package
- [security improvement] Known CVEs: fail → partial

### 2026-08-04 (score 44, −2)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-02 (score 46, +12)

- [security regression] Known CVEs: partial → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Dependency health: partial → unverified

### 2026-08-01 (score 34, 0)

- [security regression] Known CVEs: partial → unverified
- [functional regression] Dependency health: partial → unverified
- [functional] Package version: 1.4.0 → 1.5.1

### 2026-07-31 (score 34, +28)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

## MCP tools (11)

### `gemini_list_models` (~36 tokens)

List the Gemini image-generation models available to your API key (Nano Banana / Nano Banana Pro family), and the current default model.

### `gemini_image_generate` (~1165 tokens)

Generate image(s) from a text prompt with a Gemini image model (Nano Banana / Nano Banana Pro). If the result will likely be refined iteratively, prefer gemini_interact (multi-turn) as the entry point.

Input parameters:

- `aspect_ratio` (string): Output aspect ratio
- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `characters` (array): Names of saved characters (see gemini_list_characters / gemini_save_character): each one's reference image and description are attached to the request automatically, keeping recurring subjects consis…
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `count` (integer): Number of independent images (default 1)
- `filename` (string): Base filename for the output image (extension stripped; default: slugified prompt)
- `from_clipboard` (boolean): Use the image currently on the macOS system clipboard as an input (downscaled to JPEG)
- `google_search` (boolean): Ground the image in live Google Search results (current events, weather, data)
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `image_size` (string): Output resolution (512 = 0.5K, Flash-only)
- `images` (array): Paths to reference input images (image-conditioned generation)
- `images_base64` (array): Reference images as base64 strings or data URIs. Last resort: prefer images_url or images_file_uris, which keep image bytes out of the conversation
- `images_file_uris` (array): Reference images by Gemini Files API reference ("files/<id>", or the full uri) from gemini_upload_file or POST /upload. Upload once, then reference it across as many calls as you like — no bytes are…
- `images_r2_keys` (array): Reference images by r2_key from THIS connector's store: a signed upload (gemini_get_upload_url → curl PUT) or an earlier generation's media[].r2_key. The server reads its own bucket directly — no byt…
- `images_url` (array): Reference images as public https URLs — the SERVER downloads them, so no image bytes travel through the conversation. Preferred over images_base64, which costs ~14k tokens per photo and breaks if a f…
- `inline` (boolean): Return base64 images inline instead of writing to disk
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Model id override (default: server default; see gemini_list_models). gemini-3.1-flash-image (Nano Banana 2) is the versatile generalist workhorse — balances speed with state-of-the-art 4K generation,…
- `output_dir` (string): Directory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
- `prompt` (string, required): Text prompt describing the image
- `seed` (integer): Seed for reproducible generation; random if omitted
- `style` (string): Name of a saved style preset (see gemini_list_styles / gemini_save_style): its prompt fragment — and reference image, if it has one — is applied to the request automatically. Hosted connector only.
- `thinking_level` (string): Reasoning depth (Gemini 3 models); higher can help complex/structural edits
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)
- `video_path` (string): Path to a local video file — uploaded to the Gemini Files API (~48h retention, 2 GB max) and used as the video reference. Alternative to video_url.
- `video_url` (string): Public YouTube URL (or a previously uploaded Files API uri) as a video reference (video→image; use a Flash model e.g. gemini-3.1-flash-image)

### `gemini_image_edit` (~1131 tokens)

Edit or compose images: provide one or more input images (paths or base64), plus a text instruction. For a SERIES of successive edits to the same image, prefer gemini_interact (multi-turn) — it keeps edit context and avoids re-processing the full image each round; use gemini_image_edit for one-off edits or composing multiple distinct inputs. Gemini over-preserves the input; there is no edit-strength control — for large structural changes, reroll with a different `seed` or more forceful wording.

Input parameters:

- `aspect_ratio` (string): Output aspect ratio
- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `characters` (array): Names of saved characters (see gemini_list_characters / gemini_save_character): each one's reference image and description are attached to the request automatically, keeping recurring subjects consis…
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `filename` (string): Base filename for the output image (extension stripped; default: slugified prompt)
- `from_clipboard` (boolean): Use the image currently on the macOS system clipboard as an input (downscaled to JPEG)
- `google_search` (boolean): Ground the image in live Google Search results (current events, weather, data)
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `image_size` (string): Output resolution (512 = 0.5K, Flash-only)
- `images` (array): Paths to input image file(s) (1 = edit, 2+ = compose)
- `images_base64` (array): Input images as base64 strings or data URIs. Last resort: prefer images_url or images_file_uris, which keep image bytes out of the conversation
- `images_file_uris` (array): Input images by Gemini Files API reference ("files/<id>", or the full uri) from gemini_upload_file or POST /upload. Upload once, then reference it across as many calls as you like — no bytes are re-s…
- `images_r2_keys` (array): Input images by r2_key from THIS connector's store: a signed upload (gemini_get_upload_url → curl PUT) or an earlier generation's media[].r2_key. The server reads its own bucket directly — no bytes i…
- `images_url` (array): Input images as public https URLs — the SERVER downloads them, so no image bytes travel through the conversation. Preferred over images_base64, which costs ~14k tokens per photo and breaks if a file…
- `inline` (boolean): Return base64 images inline instead of writing to disk
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Model id override (default: server default; see gemini_list_models). gemini-3.1-flash-image (Nano Banana 2) is the versatile generalist workhorse — balances speed with state-of-the-art 4K generation,…
- `output_dir` (string): Directory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
- `prompt` (string, required): Instruction describing the edit or composition
- `seed` (integer): Seed for reproducible generation; random if omitted
- `style` (string): Name of a saved style preset (see gemini_list_styles / gemini_save_style): its prompt fragment — and reference image, if it has one — is applied to the request automatically. Hosted connector only.
- `thinking_level` (string): Reasoning depth (Gemini 3 models); higher can help complex/structural edits
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)

### `gemini_image_set` (~1246 tokens)

Generate a consistent SET of images: a master image from master_prompt, then one image per scene that references the master so the subject/style stays consistent. Provide `scenes` (explicit per-image prompts) OR `count` (variations of the master). Scene generations run in parallel (reference_mode "master", the default). On the hosted connector: saved `characters` and a saved `style` can seed the whole set by name, multi-image results include a `bundle_url` zip of every image (one curl instead of N), and `max_wait_ms` returns a pollable job handle if the batch runs long.

Input parameters:

- `aspect_ratio` (string): Output aspect ratio
- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `basename` (string): Base filename prefix for output images (default: slugified master_prompt)
- `characters` (array): Names of saved characters (see gemini_list_characters / gemini_save_character): each one's reference image and description are attached to the request automatically, keeping recurring subjects consis…
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `count` (integer): Number of variations of master_prompt (when scenes omitted)
- `from_clipboard` (boolean): Use the image currently on the macOS system clipboard as an input (downscaled to JPEG)
- `google_search` (boolean): Ground the image in live Google Search results (current events, weather, data)
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `image_size` (string): Output resolution (512 = 0.5K, Flash-only)
- `inline` (boolean): Return base64 images inline instead of writing to disk
- `master_images` (array): Reference image paths passed to the master generation call
- `master_images_base64` (array): Reference images as base64 strings or data URIs for master generation. Last resort: prefer master_images_url or master_images_file_uris, which keep image bytes out of the conversation
- `master_images_file_uris` (array): Reference images passed to the master AND to every scene call by Gemini Files API reference ("files/<id>", or the full uri) from gemini_upload_file or POST /upload. Upload once, then reference it acr…
- `master_images_r2_keys` (array): Reference images passed to the master AND to every scene call by r2_key from THIS connector's store: a signed upload (gemini_get_upload_url → curl PUT) or an earlier generation's media[].r2_key. The…
- `master_images_url` (array): Reference images passed to the master AND to every scene call (fetched once) as public https URLs — the SERVER downloads them, so no image bytes travel through the conversation. Preferred over images…
- `master_prompt` (string, required): Prompt for the master/reference image
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Model id override (default: server default; see gemini_list_models). gemini-3.1-flash-image (Nano Banana 2) is the versatile generalist workhorse — balances speed with state-of-the-art 4K generation,…
- `output_dir` (string): Directory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
- `reference_mode` (string): master: every image references the master (default). chain: each references the previous.
- `scenes` (array): Per-image prompts (1-8); each references the master
- `seed` (integer): Seed for reproducible generation; random if omitted
- `style` (string): Name of a saved style preset (see gemini_list_styles / gemini_save_style): its prompt fragment — and reference image, if it has one — is applied to the request automatically. Hosted connector only.
- `thinking_level` (string): Reasoning depth (Gemini 3 models); higher can help complex/structural edits
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)

### `gemini_interact` (~1492 tokens)

Preferred tool for iterative or multi-step refinement of a single image — multi-turn generation/editing via Gemini's Interactions API. To refine, capture the returned interaction `id` and pass it as `previous_interaction_id` on the next call — do NOT start a new interaction or re-upload the image for each tweak. `continue_last: true` chains from this session's most recent interaction without threading the id. If a call times out on the client side, the generation usually still completes: the image plus a `<image>.json` sidecar recording its interaction id land in the output dir, and `continue_last: true` still resumes that interaction — check the output dir before re-issuing (a re-issue is a second billable generation). If a chained call 404s, this tool re-anchors itself on the prior output image and re-issues un-chained: success is reported as `chain_recovered` (the chain was the problem, and you get your image anyway); a second 404 is reported as the interaction id NOT being the cause (check the model id / files uri instead). Output is JPEG.

Input parameters:

- `aspect_ratio` (string): Output aspect ratio
- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `continue_last` (boolean): Continue from the most recent interaction this server created (convenience for previous_interaction_id; an explicit id wins). Survives a server restart by falling back to the newest <image>.json side…
- `filename` (string): Base filename for the output image (extension stripped; default: slugified input)
- `from_clipboard` (boolean): Use the image currently on the macOS system clipboard as an input (downscaled to JPEG)
- `google_search` (boolean): Ground the image in live Google Search results (current events, weather, data)
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `image_size` (string): Output resolution (512 = 0.5K, Flash-only)
- `images` (array): Paths to reference input images. NEW reference images only (e.g. a style or target photo). When chaining with previous_interaction_id, do NOT re-attach the prior turn's output — the interaction alrea…
- `images_base64` (array): Reference images as base64 strings or data URIs. Last resort: prefer images_url or images_file_uris, which keep image bytes out of the conversation. NEW reference images only (e.g. a style or target…
- `images_file_uris` (array): Reference images. NEW reference images only (e.g. a style or target photo). When chaining with previous_interaction_id, do NOT re-attach the prior turn's output — the interaction already contains it,…
- `images_url` (array): Reference images. NEW reference images only (e.g. a style or target photo). When chaining with previous_interaction_id, do NOT re-attach the prior turn's output — the interaction already contains it,…
- `inline` (boolean): Return base64 images inline instead of writing to disk
- `input` (string, required): Text prompt or editing instruction
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Model id override (default: server default; see gemini_list_models). gemini-3.1-flash-image (Nano Banana 2) is the versatile generalist workhorse — balances speed with state-of-the-art 4K generation,…
- `output_dir` (string): Directory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
- `previous_interaction_id` (string): ID from a prior gemini_interact call — continues that multi-turn conversation
- `search_types` (array): Grounding search types (implies google_search). image_search (gemini-3.1-flash-image only) uses Google Image Search results as visual references; per Google ToS the returned grounding.search_suggesti…
- `thinking_level` (string): Reasoning depth; higher can help complex/structural edits
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)
- `video_path` (string): Path to a local video file — uploaded to the Gemini Files API (~48h retention, 2 GB max) and used as the video reference. Alternative to video_url.
- `video_url` (string): Public YouTube URL (or a previously uploaded Files API uri) as a video reference (video→image; use a Flash model e.g. gemini-3.1-flash-image)

### `gemini_video_generate` (~824 tokens)

Generate a short video via the Gemini omni model (preview): text→video, image→video / reference→video (supply reference image[s]), or edit a prior video (task: "edit" + previous_interaction_id / continue_last). Output is written to disk as MP4 (video has no inline MCP block). Video runs long — use `async: true` to get a job_id immediately and poll gemini_get_result, or raise `timeout_ms`. Preview model: needs a funded account.

Input parameters:

- `aspect_ratio` (string): Output aspect ratio (omni: 16:9 or 9:16)
- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `continue_last` (boolean): Continue from the most recent video interaction this server created (explicit previous_interaction_id wins)
- `filename` (string): Base filename for the output video (extension stripped; default: slugified prompt)
- `from_clipboard` (boolean): Use the image currently on the macOS clipboard as a reference
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `images` (array): Reference image path(s) for image_to_video / reference_to_video
- `images_base64` (array): Reference images as base64 strings or data URIs. Last resort: prefer images_url or images_file_uris, which keep image bytes out of the conversation
- `images_file_uris` (array): Reference stills by Gemini Files API reference ("files/<id>", or the full uri) from gemini_upload_file or POST /upload. Upload once, then reference it across as many calls as you like — no bytes are…
- `images_url` (array): Reference stills as public https URLs — the SERVER downloads them, so no image bytes travel through the conversation. Preferred over images_base64, which costs ~14k tokens per photo and breaks if a f…
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Model id override (default: gemini-omni-flash-preview)
- `output_dir` (string): Directory to write the video to (default: $GEMINI_OUTPUT_DIR or cwd)
- `previous_interaction_id` (string): Interaction id to edit/continue (with task: "edit")
- `prompt` (string, required): Description of the video to generate (or the edit instruction when task=edit)
- `task` (string): text_to_video (default), image_to_video / reference_to_video (need image input), or edit (needs previous_interaction_id)
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)

### `gemini_music_generate` (~800 tokens)

Generate music from a text prompt (mood, genre, instruments, structure, or lyrics inline) via a Lyria model (preview): lyria-3-clip-preview (~30s clips, default) or lyria-3-pro-preview (longer, WAV-capable). Written to disk as MP3/WAV (or returned inline). Runs long — use `async: true` + gemini_get_result, or raise `timeout_ms`. Preview model: needs a funded account.

Input parameters:

- `async` (boolean): Run in the background and return a job_id immediately instead of the image, so a long (Pro/4K) generation cannot hit the host tools/call timeout (-32001). Poll gemini_get_result with the job_id to fe…
- `audio_format` (string): Output format (default mp3). wav is lyria-3-pro-preview-only.
- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `continue_last` (boolean): Continue from the most recent music interaction this server created (explicit previous_interaction_id wins)
- `filename` (string): Base filename for the output audio (extension stripped; default: slugified prompt)
- `from_clipboard` (boolean): Use the image currently on the macOS clipboard as a reference
- `idempotency_key` (string): Opaque idempotency key: a repeat call with the same key returns the recorded result (reused: true) instead of billing a new generation. Set it when retrying after a host timeout (-32001) to avoid a d…
- `images` (array): Optional reference image path(s) to condition the music
- `images_base64` (array): Reference images as base64 strings or data URIs. Last resort: prefer images_url or images_file_uris, which keep image bytes out of the conversation
- `images_file_uris` (array): Reference images by Gemini Files API reference ("files/<id>", or the full uri) from gemini_upload_file or POST /upload. Upload once, then reference it across as many calls as you like — no bytes are…
- `images_url` (array): Reference images as public https URLs — the SERVER downloads them, so no image bytes travel through the conversation. Preferred over images_base64, which costs ~14k tokens per photo and breaks if a f…
- `inline` (boolean): Return base64 audio inline instead of writing to disk
- `max_wait_ms` (integer): Wait up to this many ms for the result; if generation is still running when the budget expires, return { job_id, status: "running" } immediately instead (poll gemini_get_result). Keeps fast results i…
- `model` (string): Lyria model (default: lyria-3-clip-preview). Pro is longer-form and supports WAV.
- `output_dir` (string): Directory to write audio to (default: $GEMINI_OUTPUT_DIR or cwd)
- `previous_interaction_id` (string): Interaction id to continue from
- `prompt` (string, required): Description of the music: mood, genre, instruments, tempo, structure, or lyrics
- `timeout_ms` (integer): Upstream request timeout in ms for this call (default: $GEMINI_TIMEOUT_MS, else 60000 — or 120000 when image_size is 4K, which routinely runs past 60s)

### `gemini_get_result` (~113 tokens)

Retrieve an async generation started with `async: true`. Pass the returned `job_id`: while running it reports status "running"; on completion it returns the normal result (image paths / inline images + meta); on failure it raises the recorded error. Jobs belong to your session and expire ~10 min after completion — if a job id is unknown, check the output dir / <image>.json sidecar.

Input parameters:

- `job_id` (string, required): The job_id returned by a generation tool called with async: true

### `gemini_upload_file` (~367 tokens)

Upload a file — an image, reference photo, picture, screenshot, video or audio clip — to the Gemini Files API ONCE, and get back a reusable `file_uri` (`files/<id>`) to attach to later image, video or music generations. Keywords: upload, upload file, upload image, upload photo, attach, reference image, reference photo, file_uri, files api, image reference, reuse across calls. Use this instead of pasting base64 into a tool call: the reference is a short string, so no image bytes ever enter the conversation, and it can be reused across many generations until it expires (~48h). Provide exactly one of `url` (the server downloads it), `data_base64`, or `path` (a local file).

Input parameters:

- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `data_base64` (string): Raw base64 or a data: URI. Last resort — this is the one form that costs model context (~14k tokens for a modest JPEG).
- `display_name` (string): Human-readable name recorded against the upload
- `mime_type` (string): Override the detected MIME type (sniffed from the bytes / taken from the server response otherwise)
- `path` (string): Path to a local file (absolute, or resolved against $GEMINI_INPUT_DIR). Confirm-gated like every other local-file input.
- `r2_key` (string): Unavailable on this server (media is written to local disk) — pass the file path via `path` instead.
- `url` (string): Public https URL the SERVER downloads and uploads (image/video/audio, up to 100MB). No bytes pass through the conversation.

### `gemini_list_files` (~88 tokens)

List files, images and photos currently uploaded to the Gemini Files API under this API key, with their reusable `file_uri` (`files/<id>`) references, MIME types and expiry times. Retention is ~48h, so an entry that has vanished has expired rather than failed.

Input parameters:

- `page_size` (integer): Maximum files to return (1-100, default 100)

### `gemini_delete_file` (~102 tokens)

Delete an uploaded file, image or photo (by file_uri) from the Gemini Files API before its ~48h expiry. Any tool call still referencing it will then fail with a generic 404, so delete only references you are finished with.

Input parameters:

- `confirm` (boolean): Must be true to proceed. Without this, the tool returns a preview.
- `file_uri` (string, required): The `files/<id>` reference (or full uri) to delete

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp#diagnostics

## Score history

- 2026-08-08: 49
- 2026-08-07: 49
- 2026-08-06: 70
- 2026-08-05: 46
- 2026-08-04: 44
- 2026-08-03: 46
- 2026-08-02: 46
- 2026-08-01: 34
- 2026-07-31: 34
- 2026-07-30: 6
- 2026-07-29: 6
- 2026-07-28: 6
- 2026-07-27: 6

## Links

- npm package: https://www.npmjs.com/package/@chrischall/gemini-mcp
- Socket report: https://socket.dev/npm/package/@chrischall/gemini-mcp
- Repository: https://github.com/chrischall/gemini-mcp
- Changelog RSS feed: https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp.json
- HTML version of this page: https://verifymcp.io/servers/chrischall-gemini-mcp/chrischall-gemini-mcp
