MCP server that drives Google Flow (Veo video / Nano Banana images) through a real browser session, speaking Flow's internal tRPC API first, with a hard credit-cost gate.
Strong tool naming (verb_noun pattern throughout) and comprehensive descriptions (avg 180 chars, well within 10-1024 range). All 28 tools have explicit descriptions and input schemas with types. Tool annotations present (readOnlyHint, destructiveHint, idempotentHint). However, output schemas are not formally documented, responses are returned as text + optional structuredContent, but the shape of structured fields is not declared in tool definitions. Parameter descriptions are generally good but some lack constraint details (e.g., file_path format, timeout ranges). Error handling returns actionable text but lacks categorization (retryable vs fatal). No pagination parameters on list tools despite potentially large result sets.
Add video clips to a Scenebuilder scene. The clips must already be in the project library. Free.
Return the tRPC endpoints previously learned by flow_discover_api, with their input/output key shapes and transport tier.
Attach a start frame (and optionally an end frame) to the composer for Frames-to-Video generation. The frames must already be in the project library. Free. Verify attachment with flow_list_media before submitting.
Attach up to 3 reference images to the composer for Ingredients-to-Video generation. The images must already be in the project library. Free. Verify attachment with flow_list_media before submitting.
Report whether Google Flow is reachable and safe to spend credits in: browser attached, signed in, credit balance, active project, and — critically — whether Flow's 'Confirm before generating' gate is on. Call this first in any Flow session. Never charges.
Close the browser session. If the browser was launched by this server, it is terminated. If it was attached via CDP, it is left running. Free.
Output schemas not formally documented. Tools return text + optional structuredContent, but the shape of structured fields (e.g., state object in flow_check_session, endpoints array in flow_discover_api) is not declared in tool definitions. LLMs cannot plan downstream calls without knowing response structure.
List tools (flow_list_media, flow_list_projects, flow_list_apps) lack pagination parameters. flow_list_media accepts limit/offset but no total_count or next_cursor returned. Large result sets risk context window exhaustion.
Error handling returns actionable text but lacks categorization. Errors are not classified as retryable, user-fixable, or fatal. LLMs cannot determine whether to retry, ask user, or abort.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Create a new Flow project. Free. Returns the new project ID.
Create a new scene in Scenebuilder for compositing and exporting multiple clips. Free. Returns the scene ID.
Delete a media item from the project library. Free. This is permanent.
Record which tRPC endpoints Flow's own frontend calls while the app is exercised, and write a reusable API map. Observation only — it submits nothing and charges nothing. Run this after any Flow redeploy, or when another tool reports a 404 on a procedure. Only endpoint shapes are stored; no prompts, media, or tokens.
Download a media item (still, video, or reference image) from the project library to a local file. Free. Returns the local file path.
Submit a request to Flow, read the quoted credit cost from its proposal, then REJECT it. Costs exactly zero — a rejected proposal is never charged. Use this to confirm the project's model tier before committing to a batch.
Export a Scenebuilder scene as a concatenated video. SPENDS CREDITS (scenebuilder-extend: 40 credits). The cost is quoted and checked before approval. Downloads the result and returns the local file path.
Generate still images in Flow. Stills cost ZERO credits, so this is the sandbox where composition should be iterated until right — always compose in stills before spending anything on video. Downloads the results and returns local file paths.
Generate a video clip in Flow. THIS SPENDS REAL CREDITS. The cost quoted by Flow is read and checked against expected_max_cost and the run budget BEFORE approval; if it exceeds either, the proposal is rejected and nothing is charged. The generation MODE is set by what you attach: start_frame_media_id gives Frames-to-Video (preserves the approved composition — the normal path), reference_media_ids gives Ingredients-to-Video (recomposes from up to 3 references), and attaching nothing gives Text-to-Video (least control). Compose in free stills first and animate an approved still rather than generating blind. Never call this twice for the same clip while one is in flight — a resubmit is a second charge. Model tier and aspect ratio are per-project settings; set them with flow_settings, not here.
List the Flow Tools gallery: first-party and community mini-apps available in this project. Listing is free. Running an app requires acknowledge_unknown_cost=true because the gallery quotes no prices and some apps call Veo internally.
List media in the current project's library: stills, videos, and reference images. Free. Returns media IDs, types, and creation dates.
List all Flow projects in this account. Free. Returns project IDs, names, and creation dates.
Open a Flow app and hand control back. This deliberately does NOT drive the app's own form: each app has a bespoke UI, and blind-clicking through an unknown form that may call Veo is exactly how an unbounded charge happens. The credit balance is captured before and after, so actual spend is measured rather than assumed.
Open a Flow project by ID or name. Subsequent generation calls operate in this project unless overridden. Free.
Read the server's credit budget: the hard ceiling (if set), current spend, and remaining balance. Free. The budget is per-server-lifetime and enforced before every paid generation.
Read the server's spend ledger: a chronological record of every charged generation, with prompt, cost, and result. Free.
Reset the server's spend ledger to zero. This does NOT refund credits — it only clears the local record. Use with caution. Free.
Set a hard credit ceiling for the entire server lifetime. Once set, no generation will be approved if it would exceed this limit. Free. Useful for cost control in shared or automated environments.
Read or set per-project generation settings: model tier (Lite/Fast/Quality), aspect ratio, outputs per prompt, and duration. These are project-wide and persist across chat turns — a stale tier is the single most common way a 20-credit clip silently becomes a 100-credit one.
Upload an external image file as a start frame for Frames-to-Video. The file is uploaded to the project library and can then be attached with flow_attach_frames. Free.
Upscale a still image to 1080p (free) or 4K (50 credits). The image must already be in the project library. The cost is quoted and checked before approval. Downloads the result and returns the local file path.
Test whether discovered read-only GET endpoints work from Node with the browser's cookies alone, so later calls can skip the page entirely (faster, parallelisable). Mutations are never tested, because replaying one could generate and charge.
Parameter constraints not fully specified in descriptions. file_path (flow_upload_frame, flow_download_media) lacks format/extension guidance. timeout_seconds ranges are present but not all numeric params have min/max bounds.
Destructive operations (flow_delete_media, flow_reset_spend) lack confirmation or dry-run support. Agents can permanently delete media or reset spend ledger without explicit approval step.