Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.chrischall/gemini-mcp

NPM · @CHRISCHALL/GEMINI-MCP · SCANNED AUG 8

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

+15 this week 49 Trust /100
Trust breakdown (6 categories)

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. How we score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 97 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to chrischall/gemini-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability0
  • Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Stability & Change Management0
  • Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Tool Coverage0
  • Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.Unverified
Capabilities0
  • Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.Unverified

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. How we score packages →

Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · @chrischall/gemini-mcp

# add to Claude Code
claude mcp add chrischall-gemini-mcp -- npx -y @chrischall/gemini-mcp
# add to Codex CLI
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
    }
  }
}
# add to OpenClaw
openclaw mcp add chrischall-gemini-mcp --command npx --arg -y --arg @chrischall/gemini-mcp
# ~/.hermes/config.yaml
mcp_servers:
  chrischall-gemini-mcp:
    command: "npx"
    args: ["-y", "@chrischall/gemini-mcp"]
// mcp.json
{
  "mcpServers": {
    "chrischall-gemini-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/gemini-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 8 Aug 26 0
    • MCP protocol: unverified → pass functional
    • Stability: unverified → 0.10 functional
    • Tool coverage: unverified → 100 functional
    • Package version: 1.6.0 → 1.6.1 functional
    • Package version: 1.5.1 → 1.6.0 functional
  • 7 Aug 26 −21
    • 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. security
    • Capabilities: pass → unverified functional
    • 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 functional
  • 6 Aug 26 +24
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: unverified → 100 functional
    • 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 functional
  • 5 Aug 26 +2
    • CVE-2026-69207 no longer affects this package security
    • Known CVEs: fail → partial security
  • 4 Aug 26 −2
    • CVE-2026-69207 affects this package: medium security
    • Known CVEs: partial → fail security
  • 2 Aug 26 +12
    • Known CVEs: partial → unverified security
    • Malware scan: unverified → pass security
    • Dependency health: partial → unverified functional
  • 1 Aug 26 0
    • Known CVEs: partial → unverified security
    • Dependency health: partial → unverified functional
    • Package version: 1.4.0 → 1.5.1 functional
  • 31 Jul 26 +28
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 8 Aug 2026 · Analysed npm/@chrischall/[email protected]

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo chrischall/gemini-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/chrischall/gemini-mcp/.github/workflows/release-please.yml@refs/heads/main
Rekor log index 2376909282
Predicate type https://slsa.dev/provenance/v1
Subject digest sha512:1887013d3d5946a1206c8e40476bd1e376f83504e2304a075e4febadf77d6527f0b04142061bc29012b19a261558b082032a446d3b3b4b6316b8f2138
Dependencies 97 packages
Packages resolved 97
Stale 30
Tree resolution Complete
MCP tools · 11 exposed · ~7,364 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
gemini_delete_file ~102

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.

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
file_uristringyesThe `files/<id>` reference (or full uri) to delete

No output schema declared.

No examples provided.

gemini_get_result ~113

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.

NameTypeReqDescription
job_idstringyesThe job_id returned by a generation tool called with async: true

No output schema declared.

No examples provided.

gemini_image_edit ~1,131

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.

NameTypeReqDescription
aspect_ratiostringOutput aspect ratio
asyncbooleanRun 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…
charactersarrayNames 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…
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
filenamestringBase filename for the output image (extension stripped; default: slugified prompt)
from_clipboardbooleanUse the image currently on the macOS system clipboard as an input (downscaled to JPEG)
google_searchbooleanGround the image in live Google Search results (current events, weather, data)
idempotency_keystringOpaque 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_sizestringOutput resolution (512 = 0.5K, Flash-only)
imagesarrayPaths to input image file(s) (1 = edit, 2+ = compose)
images_base64arrayInput 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_urisarrayInput 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_keysarrayInput 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_urlarrayInput 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…
inlinebooleanReturn base64 images inline instead of writing to disk
max_wait_msintegerWait 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…
modelstringModel 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_dirstringDirectory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
promptstringyesInstruction describing the edit or composition
seedintegerSeed for reproducible generation; random if omitted
stylestringName 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_levelstringReasoning depth (Gemini 3 models); higher can help complex/structural edits
timeout_msintegerUpstream 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)

No output schema declared.

No examples provided.

gemini_image_generate ~1,165

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.

NameTypeReqDescription
aspect_ratiostringOutput aspect ratio
asyncbooleanRun 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…
charactersarrayNames 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…
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
countintegerNumber of independent images (default 1)
filenamestringBase filename for the output image (extension stripped; default: slugified prompt)
from_clipboardbooleanUse the image currently on the macOS system clipboard as an input (downscaled to JPEG)
google_searchbooleanGround the image in live Google Search results (current events, weather, data)
idempotency_keystringOpaque 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_sizestringOutput resolution (512 = 0.5K, Flash-only)
imagesarrayPaths to reference input images (image-conditioned generation)
images_base64arrayReference 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_urisarrayReference 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_keysarrayReference 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_urlarrayReference 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…
inlinebooleanReturn base64 images inline instead of writing to disk
max_wait_msintegerWait 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…
modelstringModel 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_dirstringDirectory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
promptstringyesText prompt describing the image
seedintegerSeed for reproducible generation; random if omitted
stylestringName 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_levelstringReasoning depth (Gemini 3 models); higher can help complex/structural edits
timeout_msintegerUpstream 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_pathstringPath 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_urlstringPublic 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)

No output schema declared.

No examples provided.

gemini_image_set ~1,246

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.

NameTypeReqDescription
aspect_ratiostringOutput aspect ratio
asyncbooleanRun 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…
basenamestringBase filename prefix for output images (default: slugified master_prompt)
charactersarrayNames 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…
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
countintegerNumber of variations of master_prompt (when scenes omitted)
from_clipboardbooleanUse the image currently on the macOS system clipboard as an input (downscaled to JPEG)
google_searchbooleanGround the image in live Google Search results (current events, weather, data)
idempotency_keystringOpaque 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_sizestringOutput resolution (512 = 0.5K, Flash-only)
inlinebooleanReturn base64 images inline instead of writing to disk
master_imagesarrayReference image paths passed to the master generation call
master_images_base64arrayReference 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_urisarrayReference 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_keysarrayReference 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_urlarrayReference 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_promptstringyesPrompt for the master/reference image
max_wait_msintegerWait 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…
modelstringModel 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_dirstringDirectory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
reference_modestringmaster: every image references the master (default). chain: each references the previous.
scenesarrayPer-image prompts (1-8); each references the master
seedintegerSeed for reproducible generation; random if omitted
stylestringName 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_levelstringReasoning depth (Gemini 3 models); higher can help complex/structural edits
timeout_msintegerUpstream 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)

No output schema declared.

No examples provided.

gemini_interact ~1,492

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.

NameTypeReqDescription
aspect_ratiostringOutput aspect ratio
asyncbooleanRun 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…
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
continue_lastbooleanContinue 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…
filenamestringBase filename for the output image (extension stripped; default: slugified input)
from_clipboardbooleanUse the image currently on the macOS system clipboard as an input (downscaled to JPEG)
google_searchbooleanGround the image in live Google Search results (current events, weather, data)
idempotency_keystringOpaque 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_sizestringOutput resolution (512 = 0.5K, Flash-only)
imagesarrayPaths 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_base64arrayReference 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_urisarrayReference 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_urlarrayReference 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,…
inlinebooleanReturn base64 images inline instead of writing to disk
inputstringyesText prompt or editing instruction
max_wait_msintegerWait 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…
modelstringModel 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_dirstringDirectory to write images to (default: $GEMINI_OUTPUT_DIR or cwd)
previous_interaction_idstringID from a prior gemini_interact call — continues that multi-turn conversation
search_typesarrayGrounding 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_levelstringReasoning depth; higher can help complex/structural edits
timeout_msintegerUpstream 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_pathstringPath 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_urlstringPublic 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)

No output schema declared.

No examples provided.

gemini_list_files ~88

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.

NameTypeReqDescription
page_sizeintegerMaximum files to return (1-100, default 100)

No output schema declared.

No examples provided.

gemini_list_models ~36

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

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

gemini_music_generate ~800

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.

NameTypeReqDescription
asyncbooleanRun 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_formatstringOutput format (default mp3). wav is lyria-3-pro-preview-only.
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
continue_lastbooleanContinue from the most recent music interaction this server created (explicit previous_interaction_id wins)
filenamestringBase filename for the output audio (extension stripped; default: slugified prompt)
from_clipboardbooleanUse the image currently on the macOS clipboard as a reference
idempotency_keystringOpaque 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…
imagesarrayOptional reference image path(s) to condition the music
images_base64arrayReference 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_urisarrayReference 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_urlarrayReference 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…
inlinebooleanReturn base64 audio inline instead of writing to disk
max_wait_msintegerWait 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…
modelstringLyria model (default: lyria-3-clip-preview). Pro is longer-form and supports WAV.
output_dirstringDirectory to write audio to (default: $GEMINI_OUTPUT_DIR or cwd)
previous_interaction_idstringInteraction id to continue from
promptstringyesDescription of the music: mood, genre, instruments, tempo, structure, or lyrics
timeout_msintegerUpstream 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)

No output schema declared.

No examples provided.

gemini_upload_file ~367

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).

NameTypeReqDescription
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
data_base64stringRaw base64 or a data: URI. Last resort — this is the one form that costs model context (~14k tokens for a modest JPEG).
display_namestringHuman-readable name recorded against the upload
mime_typestringOverride the detected MIME type (sniffed from the bytes / taken from the server response otherwise)
pathstringPath to a local file (absolute, or resolved against $GEMINI_INPUT_DIR). Confirm-gated like every other local-file input.
r2_keystringUnavailable on this server (media is written to local disk) — pass the file path via `path` instead.
urlstringPublic https URL the SERVER downloads and uploads (image/video/audio, up to 100MB). No bytes pass through the conversation.

No output schema declared.

No examples provided.

gemini_video_generate ~824

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.

NameTypeReqDescription
aspect_ratiostringOutput aspect ratio (omni: 16:9 or 9:16)
asyncbooleanRun 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…
confirmbooleanMust be true to proceed. Without this, the tool returns a preview.
continue_lastbooleanContinue from the most recent video interaction this server created (explicit previous_interaction_id wins)
filenamestringBase filename for the output video (extension stripped; default: slugified prompt)
from_clipboardbooleanUse the image currently on the macOS clipboard as a reference
idempotency_keystringOpaque 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…
imagesarrayReference image path(s) for image_to_video / reference_to_video
images_base64arrayReference 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_urisarrayReference 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_urlarrayReference 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_msintegerWait 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…
modelstringModel id override (default: gemini-omni-flash-preview)
output_dirstringDirectory to write the video to (default: $GEMINI_OUTPUT_DIR or cwd)
previous_interaction_idstringInteraction id to edit/continue (with task: "edit")
promptstringyesDescription of the video to generate (or the edit instruction when task=edit)
taskstringtext_to_video (default), image_to_video / reference_to_video (need image input), or edit (needs previous_interaction_id)
timeout_msintegerUpstream 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)

No output schema declared.

No examples provided.