Skip to main content
Glama

flow-mcp — Google Flow MCP Server

A standalone MCP server for Google Flow (split off from media-gen-mcp): 0-credit AI image generation + billed video generation (Veo / abra), all driven through your local Chrome session (CDP page context) — no API key, no quotas, no third-party relay.

  • Image generation / image upscaling / upload / status query / download / delete / share / cancel / character entities: all 0 credits

  • Video generation: consumes Google Flow credits (abra 7-20 / veo lite 10 / fast 20 / quality 100 per item; 1080p upscaling 0) — explicitly warned in the tool description, used by default only when the user explicitly asks

Installation

Prerequisites (one-time):

  1. Install lasso locally (the Chrome launcher in the CC full-interaction harness)

  2. Launch Chrome with CDP and sign in to labs.google:

lasso launch-chrome --port 9223 --mode visible   # 首次:窗口出现,完成 Google 登录(2FA 同)
# 之后每天只需:hidden 模式静默驻留
lasso launch-chrome --port 9223
  1. Open any project page at https://labs.google/fx/tools/flow in that Chrome (keep it running)

Connect to Claude Code:

claude mcp add flow-mcp -- node /path/to/flow-mcp/dist/index.js
# 或发布后:npx flow-mcp-server

Can be connected alongside media-gen-mcp without conflicts (see "Coexistence with media-gen-mcp" below).

Related MCP server: Grok Image Generation MCP Server

Tools (4)

Tool

Credits

Purpose

flow_generate_image

0

Text-to-image / image-to-image (base image + reference image) / 2K upscaling. NARWHAL (Nano Banana 2, default) / HARBOR_SEAL / GEM_PIX_2 (Nano Banana Pro). Supports aspect (16:9/9:16/1:1/3:4/4:3) and seed for exact reproduction

flow_generate_video

🔴 Billed

Video submission (t2v/i2v/r2v/first-last frames/extend/edit/upscale). Submit only, no waiting — returns a mediaId handle immediately

flow_status

0

One-stop introspection: credit balance / live model catalog (credit price and latency per key) / media list / single-media status and download / batch delete / public share links / cancel in-progress tasks. Also the polling path for video handles

flow_entity

0

Character entities: create character card / bind one of 30 preset voices / bind appearance image

Typical flow:

flow_status                                    # 先看:余额 + 目录(per-key creditsAtServiceTier)
flow_generate_image(prompt=..., aspect="16:9") # 0 积分生图,产出落盘并回传 mediaId+seed
flow_generate_video(model="abra_t2v_8s", ...)  # 🔴 计费提交 → 返回 mediaId 句柄(不阻塞)
flow_status(mediaId="...")                     # 轮询(0 积分;in_progress 会给 retry_after_seconds)
flow_status(mediaId="...", download=true)      # completed 后落盘 mp4

Configuration (shares one file with media-gen-mcp)

Config file: ~/.media-gen-mcp/config.json (both packages read the same file — "different implementation channels for the same feature" are enabled/disabled uniformly in one file). The directory name follows the historical name, do not change it (the Flow project ID is permanently recorded in ~/.media-gen-mcp/flow-project.json; renaming would orphan it).

{
  "flow": {
    "enabled": true,
    "imageRouting": "prefer",
    "videoRouting": "explicit-only",
    "toolDeadlineMs": 110000
  },
  "providers": {
    "flow": { "cdpPort": 9223 }
  }
}

Field

Default

Purpose

flow.enabled

true

false = S000 gate: the 4 tools are still registered, but any call immediately returns a [flow] S000 structured error (with built-in fix guidance). A session restart is required after changing the config

flow.imageRouting

"prefer"

prefer = the image tool description injects a "0-credit first" hint (soft routing); on-demand = used only when the user explicitly asks for Flow

flow.videoRouting

"explicit-only"

explicit-only (credit red line) = the video tool is used only when the user explicitly requests Flow/Veo/abra; prefer = used as the first choice (still warns about billing)

flow.toolDeadlineMs

110000

Hard cap for a single tool call (prevents hangs; on timeout returns [flow] S410, generation continues server-side and can be recovered via flow_status)

providers.flow.cdpPort

9223

CDP port (matches lasso launch-chrome --port)

providers.flow.projectId

(default)

When absent, reads the permanent project from flow-project.json (recommended — the project ID is reused permanently)

providers.flow.models.video.default

(none)

Deliberately no built-in default: video is billed, so model must be passed explicitly or configured explicitly here

See config.example.json for a full example.

Coexistence with media-gen-mcp

  • Both packages share ~/.media-gen-mcp/config.json; media-gen's own imageProviderPriority / videoProviderPriority chain only takes effect within its own package

  • After the split, cross-package priority = this package's tool-description soft routing (imageRouting/videoRouting guide Claude to prefer flow_generate_image) + the enabled master switch — there is no cross-package hard redirect (the two packages are physically invisible to each other; an honest design)

  • flow-project.json / flow-entities.json belong to this package; after Flow is removed from the media-gen side, it no longer reads or writes them

Error code quick reference ([flow] S<code>)

Code

Meaning

Resolution

S000

Config disabled

Follow the guidance in the error to set flow.enabled back to true, restart the session

S100

CDP unreachable

lasso launch-chrome --port 9223

S101

No labs.google page

Open the Flow project page in that Chrome

S102

Not signed in

Complete the labs.google sign-in in that Chrome

S104

reCAPTCHA failed

Stay on the Flow page and retry

S1xx others

Environment prerequisite

Retry once the environment is ready; image generation can fall back to other image tools

S2xx

Page fetch failed

Check the upstream response snippet in the message

S300/S301/S303

Model/parameter/mode validation

Follow the message guidance to change the key or parameters (intercepted before submission, zero cost)

S400

mediaId not in this project

Call flow_status without arguments to view all media

S402

Incomplete download

Just retry

S410

Tool-layer deadline (anti-hang)

Generation is still running server-side; recover via flow_status without arguments

Environment requirements

  • Node.js ≥ 18

  • Local Chrome (launched via lasso with --remote-debugging-port=9223) signed in to labs.google

  • FFmpeg bundled with the package (ffmpeg-static; used only for output validity self-check, automatically degrades to a notice when missing)

License

MIT

Available Tools

4 tools
flow_entityA

Google Flow character entities (角色实体, ZERO-CREDIT). Create/update CHARACTER entities and bind a preset voice for later audio/character generation. Create: tRPC flow.createEntity {projectId, collectionId:""} (empty string passes zod — no collection needed); update: PATCH /v1/flow/entities with dotted updateMask (displayName / characterInfo.audioReferences=[{presetVoiceId}] / characterInfo.imageReferences=[{workflowId}]). Entity images attach via imageMediaIds (completed image mediaIds from flow_generate_image; the workflowId mapping is resolved automatically from project workflows). 30 preset voices are star-named (achernar/charon/kore/…) with descriptions — list them via action=voices or flow_status preset_voices.

LIMITATION (honest): Flow has NO entity read endpoint (projectContents has no entities key; collections REST is CORS-blocked in page context) — only entities created via this tool are tracked, in a local mirror ~/.media-gen-mcp/flow-entities.json (aligned with flow-project.json precedent). action=list returns the mirror, not a server query.

WHEN: 角色卡 / 建角色 / character entity / bind voice / 角色绑定语音 / 绑定形象图.

NEXT: generate the character image first (flow_generate_image), then flow_entity(action=create, displayName=…, imageMediaIds=[…], presetVoiceId=…) wires it up; all operations are 0-credit.

Multilingual triggers: 角色 · 实体 · character · entity · voice binding (zh/en).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNocreate = new CHARACTER entity (+optional displayName/presetVoiceId/imageMediaIds in one call); update = rename/rebind an entity from the local mirror (entityId required); list = local mirror records (Flow has no entity read endpoint); voices = 30 preset voices (id/displayName/description).create
entityIdNoaction=update: the entityId from action=create's response (local mirror lookup).
displayNameNoCharacter name (e.g. 江雪 / Lin). Server default "Untitled Character".
imageMediaIdsNoCompleted image mediaIds (from flow_generate_image / flow_status) to attach as the character's look — resolved to workflowIds automatically.
presetVoiceIdNoOne of the 30 preset voices (action=voices lists them; e.g. charon). Validated before submit — a typo fails fast with S301.

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are present, so the description carries full burden. It discloses the lack of a read endpoint, use of a local mirror file, the exact API calls (tRPC create, PATCH update), 0-credit cost, and error behavior (S301 on invalid presetVoiceId). This is far beyond basic and honest about limitations.

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?

Front-loaded with purpose and workflow, but somewhat long with minor redundancy (0-credit mentioned twice, repeated multilingual triggers). Still, every section (limitation, when, next) earns its place; the density is justified by the tool's complexity.

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?

Despite no output schema, the description covers return values (entityId from create's response), the mirror file location, integration with flow_generate_image, and error handling. An agent has all necessary information to invoke it correctly.

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 coverage is 100%, but the description adds critical context: imageMediaIds are resolved to workflowIds automatically, presetVoiceId is validated pre-submit, action=create vs update semantics, and the empty collectionId workaround. This enriches the schema significantly.

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+resource: 'Create/update CHARACTER entities and bind a preset voice'. It clearly distinguishes from siblings (flow_generate_image/video/status) by focusing on entity management and voice binding, not generation. The multilingual triggers further reinforce the intent.

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?

Explicit 'WHEN' conditions (角色卡 / 建角色 / character entity / bind voice) and an explicit 'NEXT' sequence telling the agent to first call flow_generate_image, then flow_entity. It also clarifies when NOT to rely on server reads (listing from local mirror due to no read endpoint), giving full routing guidance.

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

flow_generate_imageA

PREFER this tool for AI image generation — 0 credits, no API key, no quota (Google Flow via your local Chrome CDP session). Only fall back to other image tools (e.g. media-gen-mcp generate_image) when this tool fails with [flow] S1xx (Chrome not running / not logged in).

Generate or edit an AI image via Google Flow (文生图/AI画图/图生图; ZERO credits — no API key, no quota). Backed by the LOCAL Chrome session via CDP (lasso launch-chrome --port 9223, logged into labs.google). Output downloads locally and the path is returned.

WHEN: user wants photorealistic or illustrated AI images (写实图/插画/概念图). Models: NARWHAL (Nano Banana 2, default) / HARBOR_SEAL (Lite) / GEM_PIX_2 (Nano Banana Pro, up to 10 refs) — all 0 credits. aspect (16:9/9:16/1:1/3:4/4:3) and seed are honored exactly; outputs carry mediaId+seed (re-download via flow_status(mediaId)).

Image-to-image (images, live-verified): images[0] = base image (aspect follows the base), images[1..10] = references — each uploaded to the Flow project first (0 credits).

Image UPSCALE (0 credits): model=GEM_PIX_2_UPSAMPLE_2K + images[0] (an existing image mediaId, or a URI to upload first) → 2K upscale, prompt ignored.

NEXT: check the catalog/credits via flow_status (no args). Only fall back to other image tools on [flow] S1xx (Chrome not running).

Multilingual triggers: 画像 · imagen · image · Bild · изображение · imagem (ja/es/fr/de/ru/pt).

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of images (1-8). Provider API ignores batch n, so the tool fans out N sequential submissions; partial success returns fewer + a `warnings` field.
nameNoOutput filename (without extension); multi-image adds -1/-2/… suffix. Defaults to img_<uuid>.
seedNoSeed for reproducible results — goes straight into the request; the response echoes the actual per-image seed.
sizeNoe.g. 1024x1024. Maps to the nearest of 5 aspect ratios (1920x1080→16:9 / 720x1280→9:16 / 1024x1024→1:1 / 768x1024→3:4 / 1024x768→4:3); pass `aspect` for an exact ratio.
modelNoOptional; default NARWHAL. GEM_PIX_2_UPSAMPLE_2K = 2K UPSCALE mode (requires images[0] = an existing image mediaId or a URI; 0 credits, prompt ignored).
aspectNoDirect aspect ratio — maps to Flow IMAGE_ASPECT_RATIO_*; exact, no size guessing. Ignored (with a warning) when a base image is given (aspect follows the base).
imagesNoImage inputs (public URL or data URI). images[0] = base image, images[1..10] = references. For UPSCALE (GEM_PIX_2_UPSAMPLE_2K) images[0] may be an existing image mediaId.
outDirNo产物落盘目录,省略用默认(会话目录/output)。
promptYesImage description.
downloadNo

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it excels. It discloses zero credit usage, no API key/quota, local Chrome CDP session, local output download with returned path, exact aspect/seed honoring, per-image mediaId+seed in output, re-download via flow_status, image-to-image behavior, upscale mode (prompt ignored), and fallback behavior on S1xx errors. This is far beyond what annotations alone would provide, offering deep behavioral insight.

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?

The description is long (~600 words) but well-structured with bolded lead-ins (PREFER, WHEN, Image-to-image, UPSCALE, NEXT, Multilingual). It is front-loaded with the most critical info (0 credits, fallback condition). Every section serves a purpose given the tool's multiple modes. It's not overly verbose for its complexity, though it could be trimmed slightly (e.g., the multilingual list is somewhat tangential). Overall, good structure earned a 4.

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?

For a tool with three distinct modes (txt2img, img2img, upscale) and fallback logic, the description is remarkably complete. It covers purpose, usage, exclusions, behavioral details, parameter nuances, output handling, and how to check status via flow_status. With no output schema and no annotations, this description leaves little for the agent to guess. It fully equips the agent to call the tool correctly in all scenarios.

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 coverage is 90%, so the baseline is 3. The description adds significant value beyond the schema: it names the three models with their aliases (NARWHAL/Nano Banana 2, HARBOR_SEAL/Lite, GEM_PIX_2/Nano Banana Pro with up to 10 refs), clarifies that aspect is honored exactly (schema says 'Maps to nearest' but description says 'exact'), explains images[0] as base image and images[1..10] as references, and details upscale mode prerequisites. It doesn't cover every parameter (e.g., outDir, download), but the schema already does. The added model semantics and mode behavior justify a 4.

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 explicitly states the tool's purpose: 'Generate or edit an AI image via Google Flow' with a specific verb and resource. It differentiates itself from siblings by naming flow_generate_video, flow_status, and flow_entity implicitly (it's the image-specific one) and explicitly mentions the alternative media-gen-mcp generate_image. The opening 'PREFER this tool for AI image generation' makes its role unambiguous.

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?

The description gives clear when-to-use guidance: 'WHEN: user wants photorealistic or illustrated AI images.' It also provides explicit exclusion criteria: 'Only fall back to other image tools... when this tool fails with [flow] S1xx.' It even instructs the agent to check flow_status first and mentions multilingual triggers for intent detection. This is exemplary usage guidance.

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

flow_generate_videoA

🔴 BILLS GOOGLE FLOW CREDITS (abra 7-20 / veo lite 10 / fast 20 / quality 100 per clip; upsampler_1080p = 0). USE ONLY when the user explicitly asks for Flow / Veo / abra video (config flow.videoRouting=explicit-only — the default, credits red line).

Submit an AI video generation to Google Flow (文生视频/图生视频/首尾帧/参考图/延长/编辑/超分). SUBMIT-ONLY: returns a mediaId handle immediately (never blocks ~2-4min generation) — poll with flow_status(mediaId=…) until status=completed, then re-call with download=true to save the mp4.

Model = full usage key (live catalog via flow_status): t2v (text) / i2v (+image) / r2v (+images 1-10) / interpolation or _fl (+keyframes exactly 2) / extension (+videoMediaId, e.g. veo_3_1_extension_lite) / upsampler (+videoMediaId, veo_3_1_upsampler_1080p = 0 credits; 4k tier-locked) / edit (+videoMediaId + prompt = the edit instruction, abra_edit 20 credits, wire probe-verified). Mnemonic + durationSeconds also works (abra_t2v + 8 → abra_t2v_8s). durationSeconds ∈ {4,6,8,10}s (off-grid snaps nearest), ratio 16:9/9:16 only, ONE clip per call — repeat calls for x2-x4 (each bills credits and gets its own seed).

NEXT: flow_status (no args) for the live catalog with per-key creditsAtServiceTier before choosing a key; after submit, flow_status(mediaId=…) { download: true } polls & fetches.

Multilingual triggers: 動画 · vídeo · vidéo · Video · видео · vídeo (ja/es/fr/de/ru/pt).

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoSeed for reproducible results (random when omitted; echoed in raw).
imageNoimage-to-video: single image URL (http(s)/data:) — START_IMAGE, upload (0 credits) then submit; requires an i2v key (e.g. abra_i2v_8s / veo_3_1_i2v_lite). A t2v key + image → structured S301 telling you the key to use.
modelNoREQUIRED unless configured in config.json providers.flow.models.video.default (deliberately no built-in default — video costs credits). Full usage key (e.g. abra_t2v_8s / veo_3_1_t2v_lite / veo_3_1_upsampler_1080p) or mnemonic+durationSeconds (abra_t2v + 8). Complete live catalog in flow_status.
ratioNoVideo aspect ratio (16:9 default). Image ratios 1:1/4:3/3:4 are NOT supported for video (image generation supports them).
imagesNoReference images: 1-10 image URLs (http(s)/data:) for r2v keys (e.g. abra_r2v_8s / veo_3_1_r2v_lite) — uploaded (0 credits) then submitted as referenceImages. Mutually exclusive with image/keyframes/videoMediaId.
promptYesVideo content description (for edit keys: the edit instruction, e.g. "make it snow").
frameRateNo固定 24(Flow 唯一帧率;schema 展示与约束同源)。
keyframesNoExactly 2 images (first + last frame; http(s)/data:), requires an interpolation/_fl key (e.g. veo_3_1_interpolation_lite / veo_3_1_i2v_s_fast_fl); other counts or key families → structured S301.
numFramesNoAllowed: 96/144/192/240 @24fps (96/144/192/240 = 4/6/8/10s). Prefer durationSeconds (native Flow semantics). Mutually exclusive with durationSeconds.
videoMediaIdNomediaId of an EXISTING completed video in the Flow project (see flow_status) as the source for extension keys (veo_3_1_extension_lite, 10 credits), V2V edit (abra_edit, 20 credits) or the 0-credit upscaler (veo_3_1_upsampler_1080p) — references the generated video directly, no re-upload. Images/in-progress ids → structured S301.
durationSecondsNoLegal set {4,6,8,10}s — off-grid values snap to the nearest with a warning (5→4s, 12→10s). Mutually exclusive with numFrames.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description must carry the full behavioral burden, and it does: it discloses credit costs per model, submit-only async behavior, the mediaId handle return, polling requirements, off-grid duration snapping, aspect ratio constraints, and structured error behavior for invalid inputs. This is unusually transparent.

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?

The description is long but information-dense, with the most critical warning (credit cost) front-loaded in red. Each sentence serves a purpose: mode list, submit-only behavior, model key syntax, next steps, multilingual triggers. The structure is logical, though the sheer density might overwhelm some agents; still, it earns its length.

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?

For an 11-parameter tool with no output schema, the description covers all necessary context: every mode, parameter interactions, credit implications, async flow, polling, language triggers, and even the live catalog via flow_status. It leaves no obvious gap in what an agent needs to invoke 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?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the model key semantics (mnemonic+durationSeconds, credit tiers), the exact usage of videoMediaId for each mode, and mutual exclusivity rules (image vs keyframes vs videoMediaId). It does not repeat schema descriptions but complements them with operational context.

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 an explicit verb+resource ('Submit an AI video generation to Google Flow') and distinguishes it from siblings by detailing the video-specific modes (t2v/i2v/r2v/interpolation/extension/upsampler/edit) and the explicit-only routing rule. It clearly differentiates from flow_generate_image and flow_status.

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?

Provides explicit when-to-use ('USE ONLY when the user explicitly asks for Flow / Veo / abra video') and when-not-to-use via the config note. It also tells the agent the exact follow-up sequence (poll with flow_status, re-call with download=true) and lists alternative tools implicitly by covering all video generation paths.

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

flow_statusA

Google Flow introspection / media status / download / delete / share / cancel (ZERO-CREDIT; 零消耗自省/状态查询/媒体下载/媒体删除/分享链接/取消生成) — ALSO the polling path for flow_generate_video handles. Backed by the LOCAL Chrome session via CDP (lasso launch-chrome --port 9223, logged into labs.google) — every call runs as page-context fetch, no API keys needed. With NO mediaId: full snapshot (login email, credits balance, dynamic image/video model catalog with per-key creditsAtServiceTier + generationTimeSeconds, 30 preset voices, project media list). With mediaId: one media's generation status (+ download the finished mp4/png locally). With deleteMediaIds: batch-delete project media (0 credits, IRREVERSIBLE — keeps polling payloads small). With shareMediaIds: create public share links (0 credits). With cancelMediaIds: cancel in-flight generations (0 credits). NEVER submits generation — video/image submission goes through flow_generate_video / flow_generate_image (video costs credits: abra 7-20, veo lite 10 / fast 20 / quality 100 per clip; images & upscaling are 0-credit).

WHEN: preflight before generation; poll a submitted mediaId (the async handle from flow_generate_video); fetch an already-generated asset; check remaining credits; clean up accumulated media; share a result; cancel a wrong submission before it finishes.

NEXT: flow_generate_video(model="abra_t2v_8s") submits → returns mediaId handle; flow_status(mediaId=…) tracks it (in_progress → retry_after_seconds); status=completed + download=true saves the mp4.

Multilingual triggers: flow 状态 · flow 积分 · Flow status (zh/en).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOutput filename (without extension). Defaults to flow_<mediaId-prefix>.
outDirNo产物落盘目录,省略用默认(会话目录/output)。
mediaIdNoOne media's generation status (+ local download when completed and download!=false).
downloadNoWith mediaId: save the finished asset locally (mp4/png by content-type). Default false for fast polling; pass true once status=completed.
thumbnailNoWith mediaId+download: fetch the server-generated JPEG thumbnail instead of the raw asset (raw video bytes ≠ thumbnail bytes; no S402 false positive by design).
shareMediaIdsNoCreate PUBLIC share links for these project media (0 credits; tRPC flow.share.shareMedia → mediaShareId). Returns shareUrl per media: https://labs.google/fx/tools/flow/shared/{image|video}/<mediaShareId> (prompt included). Mutually exclusive with mediaId/deleteMediaIds/cancelMediaIds.
cancelMediaIdsNoCANCEL in-flight VIDEO generations for these mediaIds (0 credits; POST /v1/flowMedia:cancelGeneration body {mediaId}). Only in_progress media are submitted — completed/failed are reported as notCancelable; status re-checked after (expect MEDIA_GENERATION_STATUS_CANCELED). LIVE-VERIFIED BOUNDARY: image in-flight cancel returns 404 (images are not cancelable); video E2E cancel is wire-verified but not yet live-submitted. Mutually exclusive with mediaId/deleteMediaIds/shareMediaIds.
deleteMediaIdsNoBatch-DELETE these project media (0 credits, IRREVERSIBLE 不可恢复; POST /v1/flow:batchDeleteAssets). Any unknown id → the whole batch is refused (S400, nothing deleted). Mutually exclusive with mediaId/shareMediaIds/cancelMediaIds. Use to keep the polling payload small.

TDQS

A4.7/5.0
Behavior5/5

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

With zero annotations, the description carries the full burden, and it delivers richly. It discloses the zero-credit cost model, the local CDP-backed architecture (no API keys), IRREVERSIBLE delete semantics, the thumbnail S402 false-positive by design, and live-verified boundaries (image in-flight cancel returns 404; video cancel wire-verified but not live-submitted). This goes well beyond what structured annotations would typically provide.

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?

The description is long, but the tool genuinely implements six distinct modes within one schema, so the length is justified. Critical constraints (zero-credit, irreversibility, never-submits-generation) are front-loaded in the first sentence block. Minor deduction: the architecture/CDP explanation and multilingual triggers are secondary details that could sit lower without losing the core guidance.

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 tool with 8 optional params, 6 modes, and no output schema, the description is remarkably complete: it names the backend endpoints invoked (tRPC flow.share.shareMedia, POST /v1/flowMedia:cancelGeneration, POST /v1/flow:batchDeleteAssets), documents the share URL format, and gives expected status transitions (in_progress → retry_after_seconds, MEDIA_GENERATION_STATUS_CANCELED). The lack of an output schema pushes more responsibility onto the description, which it mostly meets; brief mention of the full snapshot fields and status=completed contract covers it.

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 coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema: mutual-exclusivity relationships among mediaId/deleteMediaIds/shareMediaIds/cancelMediaIds, the batch-delete all-or-nothing behavior (S400 on unknown id), the download=false default for fast polling, and the cancel re-check expectation. These cross-parameter semantics are not expressible in the input schema, so the description earns an above-baseline score.

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 resource (Google Flow), a clear verb set (introspect/status/download/delete/share/cancel), and explicitly differentiates from siblings: 'NEVER submits generation — video/image submission goes through flow_generate_video / flow_generate_image.' The multi-mode nature is clearly delineated, and an agent can immediately tell this is the management/polling counterpart to the generation tools.

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?

An explicit WHEN section lists the six trigger conditions (preflight, poll mediaId, fetch asset, check credits, clean up, share, cancel). The NEXT section describes the full generation-to-polling workflow with the sibling tool, and the description states exclusions ('NEVER submits generation'). Routing between this and the generation siblings is unambiguous.

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. 4 tool updatesv0.1.0
    • First observedflow_entity
    • First observedflow_generate_image
    • First observedflow_generate_video
    • First observedflow_status

TDQS

A4.6/5.0
Disambiguation5/5

Each tool has a completely distinct purpose: video generation, image generation, status/introspection (including download/delete/share/cancel), and character entity management. There is zero overlap or ambiguity between them, even for an agent scanning descriptions.

Naming Consistency4/5

All tools share the 'flow_' prefix, creating a clear namespace. Two tools use verb_noun (flow_generate_video, flow_generate_image) while the others are simply noun-like (flow_status, flow_entity), but the pattern is still predictable and readable. Minor deviation from a strict verb_noun convention.

Tool Count4/5

Four tools is on the small side but well-suited for a focused media-generation server. Each tool covers a necessary capability (generate video, generate image, manage/inspect, and entity handling). The count feels slightly thin but not incomplete for the domain.

Completeness4/5

The surface covers the full lifecycle: generation (video/image), status polling, download, delete, share, cancel, and entity CRUD (via flow_entity and flow_status). Minor gaps exist (e.g., no explicit list/update for media aside from status, but those are handled through flow_status arguments), so agents can accomplish all expected workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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/wangdong233/flow-mcp'

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