Skip to main content
Glama

Gemini Omni MCP Banner

Gemini Omni MCP

MCP server for Google's Gemini Omni Flash (gemini-omni-1.1-flash) video model — text-to-video, image-to-video, reference-guided video, and conversational video editing with native audio, straight from your AI agent.

PyPI version Python 3.11+ License: MIT


Setup

Get a Gemini API key from Google AI Studio, then add the server to your MCP config.

Claude Desktop / Claude Code / Cursor

Add to your MCP config (mcp.json / .claude.json / claude_desktop_config.json):

{
  "mcpServers": {
    "gemini-omni": {
      "command": "uvx",
      "args": ["gemini-omni-mcp@latest"],
      "env": {
        "GEMINI_API_KEY": "your-api-key-here"
      }
    }
  }
}

Droid CLI

droid mcp add gemini-omni "uvx gemini-omni-mcp@latest" --env GEMINI_API_KEY=your-api-key-here

Generated MP4s are saved to ~/gemini_omni_videos by default (set OUTPUT_DIR to change).


Related MCP server: veo-mcp-server

Features

  • Text-to-video: prompt-only MP4 generation with generated audio (music, ambience, SFX)

  • Image-to-video: animate a single reference image with motion and camera direction

  • Reference-to-video: up to 6 reference images to lock subjects, style, or props

  • Conversational editing: iterate on a generated video via previous_interaction_id, or upload your own MP4 and edit it

  • Video extension: continue a generated or uploaded video by 3-10s per turn, up to 40s total

  • First/last-frame interpolation: transition between two images with <FIRST_FRAME> and <LAST_FRAME>

  • Prompt role tags: <FIRST_FRAME>, <LAST_FRAME>, and <IMAGE_REF_N> bind reference images to roles

  • Timing cues: [0-3s], [3-6s], [6-10s] direct the action beat by beat

  • Resolution control: 360p, 720p (default), 1080p, or 4k (upscaled)

  • Batch generation: run multiple prompts in conservative parallel batches (max 4)

  • URI or inline delivery: robust Files API polling and download built in

Output is 24fps MP4 (3-10s clips, 360p/720p/1080p/4k) with SynthID watermarking.


Showcase

All videos below were generated by this server with the Gemini Omni Flash model, sound on.

Corgi on a hoverboard

A corgi wearing tiny goggles rides a glowing hoverboard through a neon-lit Tokyo street at night, rain reflections on the pavement, camera tracking alongside, single continuous shot, cinematic lighting, upbeat synthwave music.

https://github.com/user-attachments/assets/4b9a8e87-7db0-469d-a261-3c354f7fe9b8

Astronaut latte art

An astronaut in a white spacesuit pours latte art into a floating cup inside a cozy moon-base cafe, Earth visible through a large window, steam swirling in low gravity, slow dolly-in, warm lighting, gentle ambient cafe sounds.

https://github.com/user-attachments/assets/88072ef8-1ce4-4c80-a05a-bfb5531d1271

Origami ocean

An origami paper whale swims gracefully through a stylized paper-craft ocean, paper waves folding and unfolding, paper seagulls gliding above, soft sunlight, camera slowly orbiting, calm orchestral score.

https://github.com/user-attachments/assets/c1e31341-e53c-4a55-af12-d6bb9432dcf5


Tools

generate_video

Generates or edits one MP4 and returns JSON with video.path, interaction_id, and metadata.

Argument

Type

Description

prompt

string

Scene, motion, camera, lighting, mood, and audio direction

task

string?

text_to_video, image_to_video, reference_to_video, edit, or extend. Inferred if omitted

aspect_ratio

string?

16:9 (default) or 9:16

resolution

string?

360p, 720p (default), 1080p, or 4k

reference_image_paths

list?

Up to 6 local image paths

input_video_path

string?

Local MP4 (10s or less) to upload and edit or extend

delivery

string?

uri (default, recommended) or inline

previous_interaction_id

string?

Continue editing or extending a generated video

enhance_prompt

bool?

Optional LLM prompt enhancement, default false

batch_generate

Runs multiple prompts in parallel batches, capped at 4.

Argument

Type

Description

prompts

list

One prompt per video

task, aspect_ratio, resolution, reference_image_paths, delivery, enhance_prompt

Shared across the batch, same semantics as generate_video

batch_size

int?

Parallelism, capped at MAX_BATCH_SIZE


Configuration

Everything is configured through environment variables (or a local .env):

Variable

Default

Description

GEMINI_API_KEY

Required. GOOGLE_API_KEY also accepted

OUTPUT_DIR

~/gemini_omni_videos

Where generated MP4s are saved

DEFAULT_ASPECT_RATIO

16:9

16:9 or 9:16

DEFAULT_RESOLUTION

720p

360p, 720p, 1080p, or 4k

DEFAULT_DELIVERY

uri

uri or inline

REQUEST_TIMEOUT

300

Generation timeout in seconds

FILE_POLL_INTERVAL

5.0

Seconds between Files API polls

FILE_POLL_TIMEOUT

600

Max seconds waiting for file activation

MAX_BATCH_SIZE

4

Max parallel generations

ENABLE_PROMPT_ENHANCEMENT

false

LLM-enhance prompts before generation

LOG_LEVEL

INFO

Logging level


Prompting tips

  • By default Omni generates a few different shots with cuts; ask for a "single continuous shot, no scene cuts" when you want one unbroken scene.

  • Always include audio direction, for example "gentle ambient sound, no dialogue".

  • For edits, keep the prompt short and add "Keep everything else the same".

  • To lengthen a video, say "Extend this video" with previous_interaction_id or an uploaded clip of 10s or less; each turn adds 3-10s, up to 40s total. Leave task unset — the API rejects an explicit task together with previous_interaction_id.

  • Use <FIRST_FRAME> and <IMAGE_REF_N> tags to bind reference-image roles.

  • Timing cues like [0-3s], [3-6s], and [6-10s], or natural language like "Every 2s cut to a new frame", stage your own scene cuts. When extending, 0s refers to the start of the extension.

Limitations

  • MP4 clips of 3-10 seconds at 24fps, SynthID-watermarked; 1080p and 4k are upscaled.

  • System instructions, temperature, negative prompts, voice edits, YouTube sources, and multi-video reasoning are unsupported.

  • Uploaded-video editing and extension are unavailable in some regions.


Development

git clone https://github.com/nikships/gemini-omni-mcp
cd gemini-omni-mcp
uv sync --all-extras
uv run ruff format .
uv run ruff check .
uv run mypy gemini_omni_mcp/
uv run pytest
uv build

Releases are automated: every push to main bumps the version and publishes to PyPI (see PUBLISHING.md).

License

Gemini Omni MCP is licensed under the MIT license. See LICENSE for details.

Available Tools

2 tools
batch_generateA

Generate multiple Gemini Omni Flash videos in conservative parallel batches.

Use for storyboards, aspect-ratio or resolution comparisons, or reference-guided variations. Batch size defaults to configuration and is capped at 4 because video jobs are long. The JSON response includes per-prompt video.path, interaction_id, metadata, and errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
promptsYes
deliveryNo
batch_sizeNo
resolutionNo
aspect_ratioNo
enhance_promptNo
reference_image_pathsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds important context by stating that batch size defaults to configuration and is capped at 4, and that video jobs are long. It also mentions the JSON response includes per-prompt outputs and errors. However, it omits operational details such as runtime expectations, failure handling beyond 'errors', or the impact of the batch cap. This is useful but incomplete for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core action, followed by use cases, and ends with a brief note on defaults and return format. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so the description need not detail return values, though it briefly mentions the JSON response structure. However, with eight parameters and zero schema descriptions, the description leaves significant gaps in what each parameter means and how to use them. For a batch generation tool with no annotations, more context on parameter usage and failure modes would be expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains batch_size defaults and capping, which adds meaning beyond the schema for that parameter. It also references 'reference-guided variations' and mentions 'aspect-ratio or resolution comparisons' hinting at aspect_ratio and resolution parameters, but it does not explain the other parameters (task, prompts format, enhance_prompt, reference_image_paths, delivery). Baseline for low coverage would require full compensation; the description partially compensates but leaves most parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (generate multiple videos in parallel batches) and the resource (Gemini Omni Flash videos). It names the sibling tool only implicitly by contrasting 'multiple' with the single-video context of generate_video. The purpose is specific enough that an agent can distinguish this as a batch version of video generation, though it doesn't explicitly say to use the sibling for single prompts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete use cases (storyboards, aspect-ratio or resolution comparisons, reference-guided variations), which clearly indicate when this tool is appropriate. It does not explicitly say when not to use it or name generate_video as the alternative for single videos, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_videoA

Generate or edit MP4 videos with Gemini Omni Flash (gemini-omni-1.1-flash).

Capabilities:

  • text_to_video: prompt-only video with generated audio.

  • image_to_video: one reference image plus motion and camera direction.

  • reference_to_video: multiple reference images for subjects, style, or props.

  • edit: use previous_interaction_id or input_video_path to edit existing video.

  • extend: continue a video from previous_interaction_id or an uploaded MP4, appending a 3-10 second seamless continuation (repeat up to 40s total).

Parameters:

  • prompt: Describe the scene, motion, camera movement, lighting, mood, and audio.

  • task: text_to_video, image_to_video, reference_to_video, edit, or extend. If omitted, inferred. Prefer omitting it for edit and extend: the API rejects an explicit task together with previous_interaction_id, so multi-turn edit/extend are prompt-based (e.g. "Extend this video").

  • aspect_ratio: 16:9 landscape or 9:16 portrait.

  • resolution: 360p, 720p (default), 1080p, or 4k. Values above 720p are upscaled.

  • reference_image_paths: Up to 6 local images. Use , , or tags in the prompt for control.

  • input_video_path: Local MP4 (10s or less) to upload and edit or extend through the Files API.

  • delivery: uri is recommended for generated MP4 files; inline is supported for smaller payloads.

  • previous_interaction_id: Continue editing or extending a prior generated video.

  • enhance_prompt: Optional, default false. For edits, simple prompts usually work better.

Prompt tips:

  • By default Omni generates a few different shots with cuts, crafting a narrative from the prompt. Ask for "single continuous shot, no scene cuts" when you want one unbroken scene.

  • Stage your own cuts with timing language: "Every 2s cut to a new frame", rapid-fire sequences, or timecode lines like [0-3s], [3-6s], [6-10s].

  • Include explicit audio direction such as "gentle ambient room tone, no dialogue".

  • For edits, keep prompts simple and say "Keep everything else the same".

  • When extending, 0s in timecodes refers to the start of the extended part, and you can cut to a new scene with the same characters ("Show the same characters in the next scene").

  • For first/last-frame interpolation, pass two images and use tags.

Limitations:

  • Output is MP4, 3-10s clips at 24fps (360p/720p/1080p/4k), SynthID-watermarked.

  • System instructions, temperature, top_p, stop sequences, negative_prompt, voice edits, YouTube sources, and multi-video reasoning are unsupported.

  • Uploaded-video editing and extension are unavailable in some regions.

Returns JSON including video.path, interaction_id, task, aspect_ratio, resolution, delivery, size, and URI metadata. After success, open video.path with the native OS video viewer.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNo
promptYes
deliveryNo
resolutionNo
aspect_ratioNo
enhance_promptNo
input_video_pathNo
reference_image_pathsNo
previous_interaction_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so: it discloses that outputs are MP4 3-10s at 24fps, SynthID-watermarked, that resolutions above 720p are upscaled, that unsupported parameters (temperature, top_p, negative_prompt, voice edits, YouTube sources) will not work, and that uploaded-video editing is region-restricted. It also explains the task-omission interaction with previous_interaction_id, which is a non-obvious API constraint an agent would otherwise hit as an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well organized under Capabilities, Parameters, Prompt tips, Limitations, and Returns headings, with the purpose front-loaded in sentence one. It is long, and the Prompt tips section is arguably beyond the minimum needed to invoke the tool, but for a generative tool with many modes that guidance is largely load-bearing rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 parameters, zero schema descriptions, no annotations, and a rich output schema, the description is complete: it covers all inputs, the behavioral constraints, and the failure modes, and it defers return-value detail to the output schema while still noting the key fields (video.path, interaction_id). Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description must compensate entirely, and it does: every parameter is explained with meaning, defaults, and accepted values (task modes, 16:9/9:16, 360p/720p/1080p/4k, up to 6 reference images, delivery uri vs inline, enhance_prompt default false). It even supplies prompt-syntax guidance (<FIRST_FRAME>, <LAST_FRAME>, <IMAGE_REF_N> tags) that the bare string-typed schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb pair (generate or edit), the resource (MP4 videos), and the exact backing model (gemini-omni-1.1-flash), then enumerates the five distinct modes. This is unambiguous about what the tool does. It loses the top mark only because it never differentiates itself from the sibling tool batch_generate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear per-mode selection guidance (text_to_video vs image_to_video vs reference_to_video vs edit vs extend) and an explicit when-not rule: omit task for edit/extend because the API rejects an explicit task alongside previous_interaction_id. That is strong intra-tool routing, but no alternative tool is ever named, so the cross-tool decision (this vs batch_generate) is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv2.0.3
    • Changedbatch_generate2 fields changed
      • removedInput schema / properties / duration_seconds
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
    • Changedgenerate_video2 fields changed
      • removedInput schema / properties / duration_seconds
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • addedInput schema / properties / resolution
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  2. 2 tool updatesv1.0.2
    • First observedbatch_generate
    • First observedgenerate_video

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation4/5

generate_video and batch_generate have clearly separable purposes (single vs. parallel-batch generation), so an agent can pick between them. The main ambiguity is internal to generate_video, which bundles five task modes behind one tool name, but that is parameter-level rather than a collision between two tools.

Naming Consistency4/5

Both names use snake_case and are immediately readable. The only minor deviation is the ordering convention: generate_video is verb_noun while batch_generate is qualifier_verb, but this is a trivial and understandable variation.

Tool Count3/5

Two tools is thin for a video generation server; the entire surface collapses into one overloaded mega-tool plus a batch wrapper. It is defensible because the mega-tool is explicitly scoped, but the count sits in the borderline range flagged by the rubric.

Completeness4/5

The core lifecycle is covered: text/image/reference-to-video generation, editing, extension, and batching, with interaction_id chaining for multi-turn work. There is no dedicated job-status or retrieval/download tool, which is a minor gap for long-running batch jobs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers