Skip to main content
Glama

flow-mcp — Google Flow MCP Server

Google Flow のスタンドアロン MCP サーバー(media-gen-mcp から分離):0 クレジット AI 画像生成 + 課金制動画生成(Veo / abra)、すべてお使いのローカル Chrome セッション(CDP ページコンテキスト)経由で駆動 —— API キー不要、割り当てなし、第三者転送なし。

  • 画像生成 / 画像拡大 / アップロード / 状態照会 / ダウンロード / 削除 / 共有 / キャンセル / キャラクターエンティティ:すべて 0 クレジット

  • 動画生成:Google Flow クレジットを消費(abra 7〜20 / veo lite 10 / fast 20 / quality 100 件あたり;1080p 超解像 0)—— ツール説明に明示的に警告し、デフォルトではユーザーが明示的に指定した場合のみ使用

インストール

前提(一度だけ):

  1. ローカルに lasso をインストール(CC 全操作型ハンドラ内の Chrome ランチャー)

  2. CDP 付き Chrome を起動し labs.google にログイン:

lasso launch-chrome --port 9223 --mode visible   # 首次:窗口出现,完成 Google 登录(2FA 同)
# 之后每天只需:hidden 模式静默驻留
lasso launch-chrome --port 9223
  1. その Chrome で https://labs.google/fx/tools/flow の任意のプロジェクトページを開く(起動したままにする)

Claude Code への接続:

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

media-gen-mcp と同時に接続可能で、互いに競合しません(下記「media-gen-mcp との共存」参照)。

Related MCP server: Grok Image Generation MCP Server

ツール(4 個)

ツール

クレジット

用途

flow_generate_image

0

テキストから画像 / 画像から画像(ベース画像+参照画像)/ 2K 拡大。NARWHAL(Nano Banana 2、デフォルト)/ HARBOR_SEAL / GEM_PIX_2(Nano Banana Pro)。aspect(16:9/9:16/1:1/3:4/4:3)と seed による正確な再現に対応

flow_generate_video

🔴 課金

動画送信(t2v/i2v/r2v/先頭・末尾フレーム/延長/編集/超解像)。送信のみで待機しない、即座に mediaId ハンドルを返す

flow_status

0

オールインワンの自己診断:クレジット残高 / リアルタイムモデルカタログ(各キーのクレジット価格と所要時間)/ メディア一覧 / 単一メディアの状態とダウンロード / 一括削除 / 公開共有リンク / 生成中タスクのキャンセル。動画ハンドルのポーリング経路でもある

flow_entity

0

キャラクターエンティティ:キャラクターカード作成 / 30 選 1 のプリセット音声バインド / キャラクター画像バインド

典型的なフロー:

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

設定(media-gen-mcp とファイルを共有)

設定ファイル:~/.media-gen-mcp/config.json(両パッケージが同じファイルを読む —— 「同じ機能の異なる実装チャネル」を 1 つのファイルで一括オン/オフ)。ディレクトリ名は歴史的な名前を踏襲し、変更しないでください(Flow プロジェクト ID は ~/.media-gen-mcp/flow-project.json に永続記録され、名前を変えると孤児化します)。

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

フィールド

デフォルト

作用

flow.enabled

true

false = S000 ゲート:4 つのツールは引き続き登録されるが、呼び出しは即座に [flow] S000 構造化エラー(自己修復ガイド付き)を返す。設定変更後はセッション再起動が必要

flow.imageRouting

"prefer"

prefer = 画像生成ツールの説明に「0 クレジット優先」ガイドを注入(ソフトルーティング);on-demand = ユーザーが Flow を明示的に指定した場合のみ使用

flow.videoRouting

"explicit-only"

explicit-only(クレジットのレッドライン)= 動画ツールはユーザーが Flow/Veo/abra を明示的に要求した場合のみ使用;prefer = 最優先として使用(課金の警告は維持)

flow.toolDeadlineMs

110000

単一ツール呼び出しのハード上限(フリーズ防止;タイムアウト時は [flow] S410 を返し、生成はサーバー側で継続、flow_status で回収可能)

providers.flow.cdpPort

9223

CDP ポート(lasso launch-chrome --port と一致)

providers.flow.projectId

(未設定)

未設定時は flow-project.json の永続プロジェクトを読む(推奨 —— プロジェクト ID を永続的に再利用)

providers.flow.models.video.default

(なし)

意図的に組み込みデフォルトなし:動画は課金制のため、model を明示的に渡すか、ここで明示的に設定する必要がある

完全な例は config.example.json を参照。

media-gen-mcp との共存

  • 両パッケージは ~/.media-gen-mcp/config.json を共有;media-gen 自身の imageProviderPriority / videoProviderPriority チェーンはそのパッケージ内でのみ有効

  • 分離後のクロスパッケージ優先度 = 本パッケージのツール説明ソフトルーティング(imageRouting/videoRouting が Claude を flow_generate_image 優先に誘導)+ enabled マスタースイッチ —— クロスパッケージのハードリダイレクトは存在しない(物理的に両パッケージは互いに不可視、誠実な設計)

  • flow-project.json / flow-entities.json は本パッケージの所有;media-gen 側は Flow を外した後は読み書きしない

エラーコード早見表([flow] S<code>)

コード

意味

対処

S000

設定で無効化されている

エラー内のガイドに従って flow.enabled を true に戻し、セッションを再起動

S100

CDP に接続できない

lasso launch-chrome --port 9223

S101

labs.google のページがない

その Chrome で Flow プロジェクトページを開く

S102

未ログイン

その Chrome で labs.google にログイン

S104

reCAPTCHA 失敗

Flow ページに留まって再試行

S1xx その他

環境の前提条件

環境が整ったら再試行;画像生成は他の画像ツールにフォールバック可能

S2xx

ページ fetch 失敗

message 内の上流レスポンス断片を確認

S300/S301/S303

モデル/パラメータ/モード検証

message のガイドに従ってキーまたはパラメータを変更(送信前にインターセプト、消費ゼロ)

S400

mediaId がこのプロジェクトにない

パラメータなしで flow_status を呼び出し全メディアを確認

S402

ダウンロード不完全

直接再試行

S410

ツール層のタイムアウト(フリーズ防止)

生成はサーバー側で継続中;パラメータなしで flow_status で回収

環境要件

  • Node.js ≥ 18

  • ローカル Chrome(lasso で --remote-debugging-port=9223 として起動)に labs.google へログイン済み

  • FFmpeg はパッケージに同梱(ffmpeg-static;成果物の正当性自己チェックのみに使用、欠落時は自動的にヒントへダウングレード)

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

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

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

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

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.

  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

Scored across 4 tools

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

Related MCP Connectors

Related MCP Servers