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.

Inputs: prompts (required), task, delivery, batch_size, +4 more. Returns: result

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 <FIRST_FRAME>, <LAST_FRAME>, or <IMAGE_REF_N> 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 <FIRST_FRAME> <LAST_FRAME> 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.

Inputs: prompt (required), task, delivery, resolution, +5 more. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers