flow-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FLOW_HOME | No | State folder: Chrome profile, registry, downloads, captures | ~/.flow-mcp |
| FLOW_CDP_PORT | No | Local port of the controlled Chrome window | 9222 |
| FLOW_OUTPUT_DIR | No | Where downloaded media is saved | $FLOW_HOME/output |
| FLOW_CHROME_PATH | No | Chrome executable, if it is not found | auto-detected |
| FLOW_CONFIRM_RIGHTS | No | 1 or 0 to override whether uploads confirm Flow's rights notice | setup choice |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| flow_statusA | Checks that everything works and names the problem if not: state 'ready', or 'browser_down', 'signed_out', 'challenge' (Google wants a verification), 'blocked', or 'ui_changed' (Flow's page changed; lists which controls are missing). Includes the signed-in account, credits and a fix to tell the user. Run it first, and whenever a tool fails unexpectedly. Free; takes about 30 s. |
| flow_sign_inA | Opens the Flow Chrome window (starting it if needed), brings it to the front, opens Flow's Google sign-in and waits until the user has signed in there, then returns the account. Use it when flow_status says 'signed_out' or on first use: first tell the user a Chrome window will open and they should sign in with their Google account. Returns at once if someone is already signed in. Free. |
| flow_creditsA | Reads the account's remaining Flow credits. Free accounts get 50 a day; an 8 s Veo 3.1 Lite video costs 10. |
| flow_projectsA | Lists the account's Flow projects, most recently updated first, with the purpose and upload count this tool recorded for projects it created. Use it to decide whether to continue a project or start a new one. |
| flow_assetsA | Lists a project's images and videos, newest first: id, title, image/video, uploaded/generated, model, prompt, size, duration and what each generated item was made from. Attach any of them to a request with media_ids instead of uploading files again. duplicateUploads lists repeated uploads of the same file, with the copy to keep. |
| flow_trashA | Moves project media to Flow's trash, where it can still be restored in Flow. Always two calls: first without confirmation, which only previews the items (title, type, what was made from them) and returns a confirmation code; show that list to the user and get their OK; then call again with the same media_ids and that code. The code only works for exactly the previewed set. To clean up repeated uploads use duplicateUploads from flow_assets. |
| generate_imageA | Asks the Flow agent for images and saves them locally. To edit, attach the image (attachments for local files, media_ids for project media) and describe the change, or in the same project just name the image the agent made. The agent may rewrite the prompt and make several images (default 2 with Nano Banana); say 'one image' to steer it. The result includes what the agent said. Images use no Flow credits. Takes 30-120 s. |
| generate_imagesA | Runs several separate image requests in parallel (up to 3 Flow tabs at a time, each in its own agent session), about 3x faster than one by one. Use it for a set of different images, e.g. one per scene or one per reference frame. Files in attachments are uploaded once for the whole batch. Each job reports its own files or error. Free. |
| flow_upscaleA | Downloads a project's media at the chosen size, upscaling it in Flow: images 2K (free on every account) or 4K (paid plans). Without size, lists the sizes Flow offers for that item on this account, including locked ones. Offer the free 2K upscale to the user after new images rather than doing it unasked. |
| flow_settingsA | Without changes: returns the project's agent settings (default aspect, count and model for images and videos, whether the agent asks before spending credits), the models this account offers, and its standing instructions. With changes: sets them and returns the result. Use it to avoid surprises, e.g. image count 1 instead of the default 2, or to pick a video model. Approval can only be set to 'always' (the credit budget depends on it). instructions replaces all standing instructions (an empty list removes them). Free. |
| flow_capabilitiesA | Lists Flow's features, which tool covers each (or that only the Flow website can), costs and plan limits. Free. |
| flow_chatA | Sends one message to the Flow agent and returns as soon as it has finished replying, with its exact words (messages, reply) so you can decide the next step: answer its questions, refine the request, or handle a spend approval. Sending never spends credits by itself. If the reply has pendingApproval (a quoted credit cost), the agent is waiting: tell the user the cost and use flow_approve. Images are usually made right away (no approval); their ids are in media, download them with flow_wait. |
| flow_approveA | Answers the agent's pending 'costing N credits?' request. decision 'approve' SPENDS the quoted credits, but only when N <= max_credits; otherwise it rejects and nothing is spent. Never chooses 'Always approve'. Returns the agent's reply and the media it started (videos then render for 1-5 min: fetch them with flow_wait using since/media). |
| flow_waitA | Checks on media the agent is making (e.g. a video from generate_video or flow_approve) for up to timeout_seconds, downloads whatever is finished and returns anything the agent said meanwhile. status 'completed' means all of it is downloaded; 'pending' means it is still rendering: tell the user and call again (videos usually take 1-5 minutes); 'failed' means Flow reported the generation as failed (failures has its message): tell the user, suggest checking flow_credits for the refund, and do not keep waiting. Pass media_ids, or since from the earlier result to take all new media. Free. |
| flow_transcriptB | Returns the whole agent chat of a project (both sides, approvals and whether they are still pending). Free. |
| generate_videoA | Shortcut for flow_chat + flow_approve: asks the agent for a video and approves its quote only when it is at or below max_credits (default 10 = one 8 s Veo 3.1 Lite video on a free account), otherwise rejects. SPENDS FLOW CREDITS: tell the user the expected cost and check flow_credits first; never call it again to retry. Returns as soon as the render has started: 'started' (collect the mp4 with flow_wait, passing media ids or since), 'needs_answer' (the agent asked something: show the user and reply with flow_chat), 'over_budget' (nothing spent) or 'failed' (Flow failed the render right away; failures has its message). Every result includes the agent's messages. A source_video makes it an Omni video-to-video edit (20 credits at 720p, same length as the clip). Inputs given a role (start_frame, end_frame, ingredients, source_video: each a local file or a project media id) are numbered and explained to the agent; prefer them to plain attachments. Veo takes either frames (image-to-video) or ingredients (reference-to-video), not both: given both, the agent asks which to use (needs_answer, nothing spent). |
| flow_charactersA | Flow's Characters keep a person (or creature) the same across generations: a reference image, a name, notes the Flow agent reads, and a voice. action 'list' (default) returns the project's characters. 'create' makes one from an image already in the project (image_id, e.g. an approved character sheet or keyframe) and sets name, info and voice. 'update' changes name, info or voice of an existing one (character: name or id). 'voices' lists Flow's voices (needs one character in the project). Use characters in generate_video, generate_image or flow_chat with characters: [name]. Free. |
| flow_frameA | Saves one frame of a video as a PNG: the first, the last (default) or one at a given second. The video is a local file or a project media id (with project_id; downloaded first if needed). Main use: pass the last frame of a shot as start_frame of the next generate_video, so characters and setting carry over between clips. The PNG is uploaded when used, so Flow asks for the rights confirmation then. Free; runs on this machine. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| flow_director | Plans and makes an image or video piece with Flow the way a director would: asks the follow-ups that matter, plans shots and credits, previews with free images, then spends credits. Covers prompting, consistent characters, character swaps and restyles. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| flow-director SKILL.md | How to get the best results from Google Flow |
| flow-director references/consistency.md | How to get the best results from Google Flow |
| flow-director references/editing.md | How to get the best results from Google Flow |
| flow-director references/prompting.md | How to get the best results from Google Flow |
TDQS
Scored across 18 tools
Most tools map to a distinct resource or step (status, sign-in, credits, projects, assets, trash, characters, settings, wait, approve), and descriptions explicitly disambiguate tricky pairs like generate_video vs. flow_chat/flow_approve and generate_image vs. generate_images. The only real friction is the intentional overlap between the video shortcut and the chat+approve workflow, plus the single-vs-batch image pair, which an agent must read carefully to choose correctly.
Almost all tools carry the flow_ namespace prefix, which is predictable, but the pattern is not verb_noun: several are bare nouns (flow_status, flow_credits, flow_projects, flow_settings) while the core generation tools break the namespace entirely (generate_video, generate_image, generate_images). Readable, but the convention is mixed rather than uniform.
18 tools is on the heavy side but each covers a genuinely separate part of driving a browser-based generation service (auth, credits, assets, generation, approval, polling, cleanup). Nothing looks redundant enough to cut, though a few convenience wrappers (flow_frame, flow_capabilities) push it slightly past a tight scope.
The lifecycle is well covered: health check, sign-in, credits, project listing, image/video generation, batch generation, upscaling, asset listing, trash with confirmation, characters, settings, chat/approve/poll and frame extraction. Gaps are minor but real: no project create/rename/delete, no character deletion action, and no direct asset download except through upscale or wait.