Skip to main content
Glama

OmniFlow MCP — Google Flow (Veo 3 / Omni 1.1) automation for Claude

Chrome Web Store Chrome Web Store version npm npm downloads License: MIT

Google Flow has no API. This MCP server gives Claude Code and Claude Desktop hands inside Google Flow: batch video generation on Veo 3 / Omni 1.1, keyframe transitions, scene chaining, video-to-video edits and auto-download — on the Google AI plan you already pay for. No per-second billing, no API keys.

OmniFlow — batch video generation in Google Flow, driven from Claude

You, in Claude: «Make a 40-second hotel promo from the photos in C:/promo, vertical, logo at the end.» Claude, through OmniFlow: flow_statusflow_generate (5 scenes, keyframe pairs) → flow_wait ✓ 5 clips saved to omniflow-out/HotelPromo/

How it works

Claude Code / Claude Desktop
        │  MCP (stdio, JSON-RPC)
        ▼
  omniflow-mcp  ──  local bridge on 127.0.0.1:8787  ──  files → omniflow-out/
        ▲  HTTP, polled every few seconds
        │
  OmniFlow Chrome extension  ──►  Google Flow tab (labs.google/fx/tools/flow)

The MCP server (this repo) is pure transport: five tools and a local HTTP bridge, zero dependencies. The OmniFlow Chrome extension does the actual work in the Flow tab — it types the prompts, sets model / aspect / length, attaches references and keyframes, waits for the render and downloads the clips with clean numbered names. On connect, the extension hands the bridge its director playbook (dramaturgy map, camera moves, product presets, chaining recipe, sound layers); flow_status passes it to Claude, so Claude behaves like a director, not a typist.

Related MCP server: cutgent

Quick start

1. Install the extensionOmniFlow in the Chrome Web Store. First 24 hours are free, no key and no card.

2. Add the MCP server.

Claude Code:

claude mcp add omniflow -- npx -y omniflow-mcp

Windows: if PowerShell refuses to run claude.ps1 / npm.ps1 (script execution policy), call the .cmd shims instead: claude.cmd mcp add omniflow -- npx.cmd -y omniflow-mcp.

No npm? The same server runs straight from GitHub: npx -y github:DanikVR/omniflow-veo-mcp.

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "omniflow": { "command": "npx", "args": ["-y", "omniflow-mcp"] }
  }
}

3. Open Google Flow at labs.google/fx/tools/flow and enter a project. The extension icon in the Chrome toolbar shows Claude ✓ when the bridge is connected.

4. Talk to Claude. It will ask two or three short questions (goal, platform, materials), propose scenarios, then shoot:

Make a 30-second ad for a thermal mug, vertical. Photos are in D:/mug. Logo at the end.

Clips land in omniflow-out/<folder>/ next to where Claude was started (override with OF_OUT).

Tools

Tool

What it does

flow_status

Is the extension connected, is a Flow project open, what is queued — and extension.director, the playbook Claude follows. Call it first.

flow_generate

Queue one or many clips: prompt, model, aspect, length, variants, references, keyframe pair, chaining, library assets. Returns jobId at once.

flow_wait

Wait for a job and return the file paths. Polls every 5 s, up to timeoutSec.

flow_edit

Video-to-video edit of the last finished clip in the Omni 1.1 editor: background, weather, light, remove an object, restyle.

flow_cancel

Drop everything that has not started rendering.

Full parameter reference: docs/tools.md. The bridge also exposes a plain HTTP API on 127.0.0.1:8787 (/health, /jobs, /jobs/:id, /cancel) for scripts that are not MCP clients.

Claude skills

skills/ ships two Claude Code skills that turn Claude into a Flow director:

  • omni-director — always on when the user wants a video: asks the right questions, picks camera moves and product presets, chains scenes, proposes edits after the render.

  • ad-video — one line of brief → storyboard → keyframe pairs → English prompts → flow_generate / flow_wait.

Copy them into your project's .claude/skills/ (or ~/.claude/skills/ for all projects). The skill bodies are currently in Russian; Claude reads them fine, an English edition is on the roadmap.

What the extension adds

39 one-click cinematic presets (dolly zoom, crash zoom, 360° orbit, bullet time, FPV, hero product spin, levitation, liquid splash, whip-pan and match-cut transitions, logo finale), keyframe transitions first → last frame, scene chaining so the hero stays the same person from clip to clip, three sound layers, and a manual Studio panel plus an in-panel chat assistant for people who don't use Claude. Details, screenshots and pricing: lingoflow.pro/omniflow.

Security

  • The bridge listens on 127.0.0.1 only. To reach it from another machine (Tailscale etc.) set OF_HOST and OF_PORT; then every request must carry the token from ~/.omniflow-token (x-omniflow-token header).

  • Only chrome-extension:// origins may call the bridge; everything else gets 403.

  • Nothing leaves your machine except what the extension itself sends to Google Flow. Prompts and clips stay on disk. The extension talks to lingoflow.pro only to validate its licence key.

  • The extension presses the same buttons you would, with 25–70 s pauses between runs. No captcha bypass, no private API, no multi-accounting.

Requirements

  • Node.js 20 or newer.

  • Chrome 116+ with the OmniFlow extension.

  • A Google account with access to Google Flow (Google AI Pro or Ultra plan for meaningful volume).

  • Claude Code or Claude Desktop.

FAQ

Does it work without the extension? No. The MCP server is transport; generation happens inside your Google Flow tab through the extension.

Is the extension free? The first 24 hours after install are free without a key. Then a free week with a card, then €29/year or €79 once. Pricing lives on the product page.

Can I run the bridge on one machine and Claude on another? Yes — OF_HOST=0.0.0.0 OF_PORT=8787 npx -y omniflow-mcp on the machine with Chrome, then point the extension's bridge URL (extension settings) to it and pass the token.

Where do the files go? omniflow-out/ in the current working directory, or OF_OUT=/path.

Русская версия: README.ru.md

Sources & thanks

The presets and prompt rules inside the extension and the skills were distilled from public Veo 3 / Google Flow prompting guides and open community repositories, then verified on live generations. If you recognise your work and want a credit line here, open an issue — it will be added.

License

MIT © DanikVR. The OmniFlow Chrome extension is a separate, licensed product.

Available Tools

5 tools
flow_cancelA

Remove everything that has not started generating yet. Clips already in progress are not interrupted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the disclosure burden. It clearly discloses the key behavioral trait: pending items are removed, but already-started clips continue. It does not mention reversibility or response behavior, but the core side effect is transparent.

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 two short sentences with no filler. The main action is front-loaded, and the boundary condition is stated immediately after.

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

Completeness4/5

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

For a zero-parameter cancellation tool with no output schema, the description is sufficiently complete to invoke correctly. It explains what will be removed and what will be preserved, leaving little ambiguity for the agent.

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

Parameters4/5

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

The input schema has zero parameters and complete schema coverage, so there is nothing for the description to add about parameter meaning. With 0 params, this is a solid baseline.

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

Purpose5/5

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

The description states a specific verb ('Remove') and a clear resource/scope ('everything that has not started generating yet'), and explicitly distinguishes what is affected from what is not. This makes its purpose distinct from siblings like flow_generate, flow_status, and flow_edit.

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

Usage Guidelines3/5

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

The description implies when to use the tool: when you want to cancel generation tasks that have not started. However, it does not explicitly name alternatives or state when not to use it beyond noting that in-progress clips are not interrupted.

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

flow_editA

Edit an ALREADY FINISHED video in the Omni 1.1 editor (video-to-video): the extension opens the last clip in Flow, applies the described change and downloads the result. Requires "Trusted input" enabled in the extension. Wait for the result with flow_wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
folderNoSubfolder name for the result
promptYesWhat to change in the video (in English — the model reads it best)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral disclosure burden. It does well by revealing the workflow: the extension opens the last clip, applies the change, and downloads the result. It also discloses the trusted-input requirement and the asynchronous nature via flow_wait. It does not explicitly state whether the original file is modified, which is a minor gap for an edit operation.

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 two sentences with no filler. It front-loads the core purpose — editing an already finished video — then packs the necessary behavioral details and prerequisites into the remainder. Every clause adds useful information.

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

Completeness4/5

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

Given no output schema and no annotations, the description covers the essential operational facts: what the tool does, what prerequisite must be met, and how to wait for the async result. It is slightly light on what happens to the original clip and on explicit disambiguation from flow_generate, but an agent can still select and invoke this tool correctly.

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 100%, so the schema already documents both parameters. The description adds little beyond the schema: 'applies the described change' loosely maps to the prompt parameter, and the English-language tip already appears in the schema. This is the baseline case where the schema does the heavy lifting.

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

Purpose5/5

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

The description states a specific verb and resource: 'Edit an ALREADY FINISHED video in the Omni 1.1 editor (video-to-video)'. It also clarifies the mechanism — opens the last clip in Flow, applies the change, downloads the result — which distinguishes it clearly from sibling tools like flow_generate that create new content rather than edit existing clips.

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 clear context: use this when editing an already finished video, not for generation. It also provides concrete operational guidance with the prerequisite 'Requires "Trusted input" enabled in the extension' and the follow-up instruction 'Wait for the result with flow_wait'. It does not explicitly name flow_generate as the alternative for new videos, but the context is strong.

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

flow_generateA

Queue a generation in the live Google Flow through the extension. Returns jobId immediately WITHOUT waiting for the clips — wait with flow_wait. File paths (frames/characters) are absolute; the bridge reads them. Paths on another machine are unreachable: ask the user to copy files to the machine where the bridge runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
chainNoChaining for all items: every next clip starts from the last frame of the previous one
itemsYesGeneration items, one per clip
modelNoDefault model for all items
aspectNoDefault aspect ratio
folderNoSubfolder name for the results
lengthNoDefault length
prefixNoFile name prefix
resolutionNoDefault resolution

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses asynchronous queuing (returns immediately), the reliance on the bridge to read absolute file paths, and the cross-machine limitation. Minor failure modes or side effects are not discussed, but core behavior is transparent.

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?

Two sentences with no filler. The first sentence establishes purpose and immediacy; the second adds the path caveat and remediation. Each sentence earns its place and is front-loaded.

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

Completeness4/5

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

Given the tool's complexity, the lack of annotations, and the absence of an output schema, the description covers the critical non-obvious behavior: async jobId return, file path assumptions, and the bridge machine constraint. Remaining parameter details are fully documented in the schema, so nothing essential is missing.

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

Parameters4/5

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

Schema description coverage is 100%, which sets the baseline at 3. The description adds meaningful semantics for frames and characters: their paths are absolute, read by the bridge, and unusable from another machine. This goes beyond the schema's per-field descriptions.

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

Purpose5/5

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

The description states a specific verb and resource: 'Queue a generation in the live Google Flow through the extension.' It also explicitly contrasts itself with flow_wait by noting it returns jobId immediately and does not wait for clips, making sibling differentiation clear.

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 an explicit alternative ('wait with flow_wait') and a concrete when-not-to-use condition: file paths on another machine are unreachable, so the user must copy files to the bridge machine. It does not enumerate all sibling tools, but it covers the most important routing decision.

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

flow_statusA

Bridge and extension state: whether the OmniFlow extension is connected, whether a Google Flow project tab is open, what is queued — plus extension.director, the director playbook. Call it BEFORE generating: without a live Flow tab tasks just pile up. If license is "expired" the extension has no access: ask the user to activate a key at lingoflow.pro/omniflow; the queue resumes by itself after activation.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/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. It discloses what state is inspected and reveals important behavior such as queue auto-resuming after license activation. It stops short of stating whether the call is side-effect-free or describing the exact response format, so it is not a 5.

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 compact and front-loaded: it opens with the returned state categories, then immediately gives actionable sequencing and license guidance. Every sentence contributes useful information with no repetition or padding.

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

Completeness4/5

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

With no output schema and no annotations, the description does well to enumerate the key state fields and preconditions. It could be more explicit about possible values or response shape, but the tool is simple and the guidance is sufficient for an agent to call it correctly.

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

Parameters4/5

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

The input schema has zero parameters, so there is nothing for the description to clarify. Per the baseline for parameterless tools, this is fully adequate.

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

Purpose5/5

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

The description states exactly what the tool reports: connection state, open Flow tab, queued items, and the director playbook. This is clearly a status/read tool and is easily distinguished from sibling action tools like flow_generate, flow_edit, flow_wait, and flow_cancel.

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

Usage Guidelines5/5

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

It gives an explicit directive to call the tool BEFORE generating, with a concrete consequence: without a live Flow tab, tasks pile up. It also provides conditional handling for an expired license, including the next user action and expected queue behavior after activation.

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

flow_waitA

Wait for a job to finish and return the file paths. Polls the bridge every 5 s up to timeoutSec.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes
timeoutSecNoHow long to wait, default 600 s (a Flow clip takes 1–3 min)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral burden. It discloses the polling mechanism (every 5 seconds) and the timeout limit, which is useful, but it does not specify what happens when timeoutSec is exceeded, whether polling stops immediately, or how failures are reported.

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 a single compact sentence that front-loads the main purpose and then adds the key behavioral detail. There is no filler, repetition, or unnecessary context.

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

Completeness4/5

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

For a simple two-parameter wait operation with no annotations and no output schema, this description covers the main behavior, the return value, polling cadence, and timeout. The only notable gap is the timeout-exceeded behavior and how to obtain a valid jobId, which prevents a perfect score.

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 coverage is only 50%, so the description should help compensate. It slightly enriches timeoutSec by stating that polling occurs up to that limit, but jobId is only implied by the word 'job' and gains no additional semantic detail beyond its property name.

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

Purpose5/5

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

The description states a precise action (wait), the target (a job), and the outcome (returned file paths). This clearly differentiates it from sibling tools like flow_status, which checks status without blocking, and flow_generate/edit/cancel, which do not wait and return paths.

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 makes clear that this tool is the blocking wait-and-collect step after a job has been started, with a timeout limit. It does not explicitly name alternatives or state when not to use it, so it falls just short of a top score.

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. Dates show when Glama detected each change.

  1. 5 tool updatesv1.1.2
    • First observedflow_cancel
    • First observedflow_edit
    • First observedflow_generate
    • First observedflow_status
    • First observedflow_wait

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct role: status checks connection/state, generate queues new work, edit modifies finished videos, wait polls for completion, and cancel removes queued work. Even though generate and edit both ultimately produce jobs, their descriptions make the different input contexts unambiguous.

Naming Consistency5/5

All tools follow the same flow_ prefix with a single descriptive verb or noun suffix: status, generate, edit, wait, cancel. This creates a predictable and easy-to-navigate naming scheme.

Tool Count5/5

Five tools is a tight, well-scoped set for an OmniFlow generation/editing bridge. Each tool maps to a necessary stage in the workflow without redundant or filler tools.

Completeness4/5

The core lifecycle is covered: check status, generate, edit, wait, and cancel queued jobs. Minor gaps exist such as no explicit way to cancel an in-progress job or list finished job history, but these are workable for the primary use case.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DanikVR/omniflow-veo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server