flow-mcp
flow-mcp — Google Flow MCP Server
Eigenständiger MCP-Server für Google Flow (aus media-gen-mcp ausgegliedert): KI-Bildgenerierung mit 0 Credits + kostenpflichtige Videogenerierung (Veo / abra), alles gesteuert über deine lokale Chrome-Sitzung (CDP-Seitenkontext) — kein API-Key, keine Kontingente, keine Drittanbieter-Weiterleitung.
Bildgenerierung / Bildvergrößerung / Upload / Statusabfrage / Download / Löschen / Teilen / Abbrechen / Rollen-Entitäten: alles 0 Credits
Videogenerierung: verbraucht Google-Flow-Credits (abra 7–20 / veo lite 10 / fast 20 / quality 100 pro Video; 1080p-Upscaling 0) — in der Tool-Beschreibung explizit gewarnt, standardmäßig nur auf ausdrücklichen Wunsch des Nutzers verwendet
Installation
Voraussetzungen (einmalig):
Lokal lasso installieren (Chrome-Launcher aus dem CC-Interaktions-Handbuch)
Chrome mit CDP starten und bei labs.google anmelden:
lasso launch-chrome --port 9223 --mode visible # 首次:窗口出现,完成 Google 登录(2FA 同)
# 之后每天只需:hidden 模式静默驻留
lasso launch-chrome --port 9223In diesem Chrome eine beliebige Projektseite unter https://labs.google/fx/tools/flow öffnen (laufen lassen)
Anbindung an Claude Code:
claude mcp add flow-mcp -- node /path/to/flow-mcp/dist/index.js
# 或发布后:npx flow-mcp-serverKann gleichzeitig mit media-gen-mcp angebunden werden, ohne Konflikte (siehe unten „Koexistenz mit media-gen-mcp").
Related MCP server: Grok Image Generation MCP Server
Tools (4)
Tool | Credits | Zweck |
| 0 | Text-zu-Bild / Bild-zu-Bild (Basisbild + Referenzbild) / 2K-Vergrößerung. NARWHAL (Nano Banana 2, Standard) / HARBOR_SEAL / GEM_PIX_2 (Nano Banana Pro). Unterstützt |
| 🔴 kostenpflichtig | Video-Submission (t2v/i2v/r2v/Erst- und Endframe/Verlängerung/Bearbeitung/Upscaling). Nur Submission, kein Warten — gibt sofort mediaId-Handle zurück |
| 0 | All-in-one-Introspektion: Credit-Guthaben / Live-Modellkatalog (Credit-Preis und Dauer pro Key) / Medienliste / Einzelmedien-Status und Download / Massenlöschung / öffentlicher Freigabe-Link / Abbruch laufender Generierungen. Auch der Polling-Pfad für Video-Handles |
| 0 | Rollen-Entitäten: Rollenkarte erstellen / 1 von 30 voreingestellten Stimmen binden / Charakterbild binden |
Typischer Ablauf:
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 后落盘 mp4Konfiguration (teilt sich eine Datei mit media-gen-mcp)
Konfigurationsdatei: ~/.media-gen-mcp/config.json (beide Pakete lesen dieselbe Datei — „verschiedene Implementierungskanäle derselben Funktion" werden in einer Datei einheitlich ein-/ausgeschaltet). Der Verzeichnisname folgt dem historischen Namen, nicht ändern (die Flow-Projekt-ID wird dauerhaft in ~/.media-gen-mcp/flow-project.json gespeichert; eine Umbenennung würde das Projekt verwaist zurücklassen).
{
"flow": {
"enabled": true,
"imageRouting": "prefer",
"videoRouting": "explicit-only",
"toolDeadlineMs": 110000
},
"providers": {
"flow": { "cdpPort": 9223 }
}
}Feld | Standard | Wirkung |
|
|
|
|
|
|
|
|
|
|
| Harte Obergrenze für einzelne Tool-Aufrufe (verhindert Hänger; bei Timeout Rückgabe von |
|
| CDP-Port (übereinstimmend mit |
| (fehlt) | Bei Fehlen wird das permanente Projekt aus |
| (keines) | Bewusst keine eingebaute Standardeinstellung: Video ist kostenpflichtig, |
Vollständiges Beispiel siehe config.example.json.
Koexistenz mit media-gen-mcp
Beide Pakete teilen
~/.media-gen-mcp/config.json; die eigeneimageProviderPriority- /videoProviderPriority-Kette von media-gen wirkt nur innerhalb dieses PaketsDie paketübergreifende Priorität nach der Trennung = Soft-Routing über die Tool-Beschreibungen dieses Pakets (
imageRouting/videoRoutingleiten Claude dazu,flow_generate_imagezu bevorzugen) +enabledals Hauptschalter — es gibt keine paketübergreifende harte Umleitung (die beiden Pakete sind physisch gegenseitig unsichtbar, ehrliches Design)flow-project.json/flow-entities.jsongehören zu diesem Paket; die media-gen-Seite liest/schreibt sie nach Entfernen von Flow nicht mehr
Fehlercode-Schnellreferenz ([flow] S<code>)
Code | Bedeutung | Behandlung |
| Konfiguration deaktiviert |
|
| CDP nicht erreichbar |
|
| Keine labs.google-Seite | Flow-Projektseite in diesem Chrome öffnen |
| Nicht angemeldet | labs.google-Anmeldung in diesem Chrome abschließen |
| reCAPTCHA fehlgeschlagen | Auf der Flow-Seite bleiben und erneut versuchen |
| Umgebungsvoraussetzungen | Nach Bereitschaft der Umgebung erneut versuchen; Bildgenerierung kann auf andere Bild-Tools ausweichen |
| Seiten-fetch fehlgeschlagen | Antwortfragment im message-Feld ansehen |
| Modell-/Parameter-/Modus-Validierung | Key oder Parameter gemäß message-Anleitung wechseln (vor der Submission abgefangen, null Verbrauch) |
| mediaId nicht in diesem Projekt |
|
| Download unvollständig | Direkt erneut versuchen |
| Tool-Ebene abgelaufen (verhindert Hänger) | Generierung läuft weiterhin serverseitig; |
Umgebungsanforderungen
Node.js ≥ 18
Lokales Chrome (über lasso mit
--remote-debugging-port=9223gestartet) und bei labs.google angemeldetFFmpeg im Paket enthalten (ffmpeg-static; nur für die Integritätsprüfung der Artefakte, bei Fehlen automatische Degradierung auf Hinweis)
Lizenz
MIT
Available Tools
4 toolsflow_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).
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | create = 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 |
| entityId | No | action=update: the entityId from action=create's response (local mirror lookup). | |
| displayName | No | Character name (e.g. 江雪 / Lin). Server default "Untitled Character". | |
| imageMediaIds | No | Completed image mediaIds (from flow_generate_image / flow_status) to attach as the character's look — resolved to workflowIds automatically. | |
| presetVoiceId | No | One of the 30 preset voices (action=voices lists them; e.g. charon). Validated before submit — a typo fails fast with S301. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Number of images (1-8). Provider API ignores batch n, so the tool fans out N sequential submissions; partial success returns fewer + a `warnings` field. | |
| name | No | Output filename (without extension); multi-image adds -1/-2/… suffix. Defaults to img_<uuid>. | |
| seed | No | Seed for reproducible results — goes straight into the request; the response echoes the actual per-image seed. | |
| size | No | e.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. | |
| model | No | Optional; default NARWHAL. GEM_PIX_2_UPSAMPLE_2K = 2K UPSCALE mode (requires images[0] = an existing image mediaId or a URI; 0 credits, prompt ignored). | |
| aspect | No | Direct 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). | |
| images | No | Image 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. | |
| outDir | No | 产物落盘目录,省略用默认(会话目录/output)。 | |
| prompt | Yes | Image description. | |
| download | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Seed for reproducible results (random when omitted; echoed in raw). | |
| image | No | image-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. | |
| model | No | REQUIRED 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. | |
| ratio | No | Video aspect ratio (16:9 default). Image ratios 1:1/4:3/3:4 are NOT supported for video (image generation supports them). | |
| images | No | Reference 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. | |
| prompt | Yes | Video content description (for edit keys: the edit instruction, e.g. "make it snow"). | |
| frameRate | No | 固定 24(Flow 唯一帧率;schema 展示与约束同源)。 | |
| keyframes | No | Exactly 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. | |
| numFrames | No | Allowed: 96/144/192/240 @24fps (96/144/192/240 = 4/6/8/10s). Prefer durationSeconds (native Flow semantics). Mutually exclusive with durationSeconds. | |
| videoMediaId | No | mediaId 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. | |
| durationSeconds | No | Legal 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
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Output filename (without extension). Defaults to flow_<mediaId-prefix>. | |
| outDir | No | 产物落盘目录,省略用默认(会话目录/output)。 | |
| mediaId | No | One media's generation status (+ local download when completed and download!=false). | |
| download | No | With mediaId: save the finished asset locally (mp4/png by content-type). Default false for fast polling; pass true once status=completed. | |
| thumbnail | No | With mediaId+download: fetch the server-generated JPEG thumbnail instead of the raw asset (raw video bytes ≠ thumbnail bytes; no S402 false positive by design). | |
| shareMediaIds | No | Create 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. | |
| cancelMediaIds | No | CANCEL 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. | |
| deleteMediaIds | No | Batch-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
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.0- First observed
flow_entity - First observed
flow_generate_image - First observed
flow_generate_video - First observed
flow_status
TDQS
Scored across 4 tools
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.
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.
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.
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
Related MCP Connectors
Generate AI images, video, voiceovers and music from Claude, ChatGPT or Cursor through 50+ models (Veo 3.1, Kling 3, Seedance, Nano Banana, GPT Image, ElevenLabs). Also image editing, upscaling, background removal, face swap, transcription, voice cloning and UGC-style video ads. Sign in with OAuth — no API key to paste. Tools are annotated (read-only vs. credit-spending); failed generations are refunded.
Generate AI images, videos, music, SFX & speech in any AI assistant. Results appear inline in chat.
Generate and edit images, create videos, quote credit costs, and retrieve private results.
- SakairaOAuthcom.sakaira
Make AI images, video, voiceovers and music, and edit video, from your assistant. Paid in credits.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables high-quality AI video generation using Google's Veo 3.1 model for text-to-video, style-guided, and frame-interpolation tasks. It features token-efficient reference image handling, batch processing, and video extension capabilities with built-in cost estimation.62MIT
- FlicenseNot gradedqualityFmaintenanceEnables AI assistants to generate images via Grok Imagine by automating the web interface through a Chrome extension bridge.1-
- AlicenseAqualityCmaintenanceEnables AI image generation and editing using Google's Gemini Multimodal Image APIs.61MIT
- AlicenseAqualityDmaintenanceEnables image generation, editing, and analysis using Google's Gemini 2.5 Flash and Gemini 3 Pro models, with support for batch processing, style templates, and high-resolution output.8845 npm1MIT