Skip to main content
Glama

flow-mcp — Google Flow MCP Server

Google Flow 전용 MCP 서버(media-gen-mcp에서 분리):0 크레딧 AI 이미지 생성 + 유료 영상 생성(Veo / abra),전부 내 PC의 Chrome 세션(CDP 페이지 컨텍스트)을 통해 구동 —— API key 없음,할당량 없음,제3자 중계 없음.

  • 이미지 생성 / 이미지 확대 / 업로드 / 상태 조회 / 다운로드 / 삭제 / 공유 / 취소 / 캐릭터 엔티티:전부 0 크레딧

  • 영상 생성:Google Flow 크레딧 소모(abra 7-20 / veo lite 10 / fast 20 / quality 100 건당;1080p 업스케일 0)—— 도구 설명에 명시적으로 경고,기본적으로 사용자가 직접 지정할 때만 사용

설치

사전 준비(1회):

  1. PC에 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

원스톱 자체 점검:크레딧 잔액 / 실시간 모델 카탈로그(각 key의 크레딧 가격과 소요 시간)/ 미디어 목록 / 단일 미디어 상태 및 다운로드 / 일괄 삭제 / 공개 공유 링크 / 생성 중 작업 취소. 영상 핸들의 폴링 경로이기도 함

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(두 패키지가 동일 파일을 읽음 —— 「같은 기능의 서로 다른 구현 채널」을 한 파일에서 통합 on/off).디렉터리 이름은 기존 이름을 유지,변경 금지(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 안내대로 key 또는 파라미터 변경(제출 전 차단,크레딧 소모 없음)

S400

mediaId가 이 프로젝트에 없음

파라미터 없이 flow_status 호출로 전체 media 확인

S402

다운로드 불완전

바로 재시도

S410

도구 계층 타임아웃(멈춤 방지)

생성은 여전히 서버에서 진행 중;flow_status 파라미터 없이 호출해 찾기

환경 요구사항

  • Node.js ≥ 18

  • PC의 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