google-flow-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FLOW_DEMO | No | Set to 1 for placeholder media, no API calls, nothing billed. Default is off. | |
| FLOW_FFMPEG | No | Override the ffmpeg path. | |
| FLOW_LOG_FILE | No | Override the log file path. | |
| FLOW_MODEL_TTS | No | Override the TTS model. | |
| GOOGLE_API_KEY | No | Gemini API key (required unless FLOW_DEMO=1). Must come from a project with billing enabled. | |
| FLOW_OUTPUT_DIR | No | Directory for files, log and projects/. | ~/google_flow_outputs |
| FLOW_API_VERSION | No | Gemini API version. The video, music and TTS models are not on v1. | v1beta |
| FLOW_MODEL_VIDEO | No | Override the video model. | |
| FLOW_PRICES_FILE | No | Path to your own price table (JSON). | |
| FLOW_PRESETS_FILE | No | Path to your own presets file (JSON). | |
| FLOW_PROJECTS_DIR | No | Override the projects directory. | |
| FLOW_INLINE_PREVIEW | No | Return previews to the assistant. | 1 |
| FLOW_MODEL_IMAGE_PRO | No | Override the pro image model. | |
| FLOW_DAILY_BUDGET_USD | No | Estimated spend per day, 0 = off. | 5 |
| FLOW_MODEL_IMAGE_FAST | No | Override the fast image model. | |
| FLOW_MODEL_IMAGE_LITE | No | Override the lite image model. | |
| FLOW_MODEL_MUSIC_CLIP | No | Override the music clip model. | |
| FLOW_MODEL_MUSIC_SONG | No | Override the music song model. | |
| FLOW_DAILY_IMAGE_LIMIT | No | Image generations per day, 0 = off. | 100 |
| FLOW_DAILY_VIDEO_LIMIT | No | Video generations per day, 0 = off. | 20 |
| FLOW_VIDEO_CONFIRM_USD | No | Video jobs above this estimated cost return a quote first. | 0.5 |
| FLOW_RENDER_CONCURRENCY | No | Storyboard render concurrency. | 2 |
| FLOW_DEFAULT_IMAGE_MODEL | No | Default image model: fast, pro, lite or a model id. | fast |
| FLOW_RENDER_WAIT_SECONDS | No | Storyboard render wait behavior in seconds. | 150 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
google-flow-mcp 0.3.3: Flow-style creative studio on the Gemini API (not the Flow web app; billing is the user's Gemini API key). QUICK JOBS: flow_generate_image / flow_edit_image / flow_generate_video. Image models: 'fast' (Nano Banana 2.1, default), 'pro' (best text and layouts), 'lite'. Video: Gemini Omni Flash, 3-15 s with native audio, 16:9 or 9:16. Use preset=, style=, camera= (see flow_list_presets). FILMS (several shots, consistent characters): 1) flow_project 2) flow_ingredient_save for each character/object/location, then write @name in prompts 3) flow_storyboard_plan 4) flow_storyboard_keyframes and LOOK at the returned sheet; fix weak shots with flow_shot_update before paying for video 5) flow_storyboard_render quality='draft' (360p, about a third of the price), review, then 'standard' for the shots that work 6) optional flow_generate_music / flow_generate_narration 7) flow_assemble 8) flow_board. LOOK BEFORE YOU SPEND: tools return small previews; use flow_review on any image or video to see frames and judge it honestly before going on. COST: image, video and music models need a paid key. Calls above the cost threshold return an estimate first: show it to the user and only repeat with confirm_cost=true after they agree. Daily limits and a daily budget apply (flow_usage_today). Never claim a file was made unless the tool returned its path.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| flow_generate_imageA | Generate 1-4 images from a text prompt with a Nano Banana model. Args: prompt: Description of the image. Text inside quotes is rendered as on-image text. model: 'fast' (Nano Banana 2.1, default), 'pro' (Nano Banana Pro), 'lite', or a full model id. number_of_images: 1-4 (each image is a separate request and is billed separately). aspect_ratio: e.g. '1:1', '2:3', '3:4', '4:5', '9:16', '16:9', '21:9'. Overrides preset. image_size: '1K', '2K' or '4K'. Overrides preset. Lite supports 1K only. preset: Format preset, e.g. 'youtube-thumbnail', 'shorts', 'pinterest-pin', 'worksheet'. style: Style preset, e.g. 'photo', 'watercolor', 'kids-book', 'infographic'. negative_prompt: Things to avoid. output_dir: Override the output folder. |
| flow_edit_imageA | Edit an existing image with a natural-language instruction (no mask needed). Args: image_path: Path to the source image. prompt: What to change. edit_mode: 'free' (default, just follow the prompt), 'inpaint_insertion' (add), 'inpaint_removal' (remove), 'outpaint' (extend canvas), 'bgswap' (new background). model: 'fast' (default), 'pro', 'lite', or a full model id. aspect_ratio: Output aspect ratio. Defaults to the input image's shape. image_size: '1K', '2K' or '4K'. output_dir: Override the output folder. mask_mode: Ignored. Kept for compatibility with 0.1.0 (Nano Banana edits need no mask). |
| flow_generate_image_with_referencesA | Generate images guided by up to 14 reference images (characters, objects, style). Nano Banana 2.1: up to 10 object + 4 character images. Nano Banana Pro: up to 6 object + 5 character + 3 style images. Args: prompt: What to create and how to use the references. reference_image_paths: 1-14 image paths. model: 'fast' (default), 'pro', 'lite', or a full model id. aspect_ratio / image_size / preset / style: same as flow_generate_image. number_of_images: 1-4. output_dir: Override the output folder. |
| flow_generate_videoA | Generate a video with native audio using Gemini Omni Flash. Args: prompt: Scene, camera movement, lighting, mood, sound. Say "single continuous shot" if you do not want cuts. duration_seconds: 3-15 (3-10 when last_frame_path is given). aspect_ratio: '16:9' or '9:16'. Overrides preset. resolution: '360p', '720p' (default), '1080p' or '4k' (1080p/4k are upscaled). preset: e.g. 'shorts' (9:16) or 'youtube-thumbnail' (16:9). camera: Camera move preset ('push-in', 'orbit', 'drone', 'handheld', ... see flow_list_presets) or your own description. negative_prompt: Things to avoid (e.g. "no dialogue, no text"). anchor_frame_path: Image to start from (image-to-video). last_frame_path: Image to end on (needs anchor_frame_path; interpolation). reference_image_paths: Up to 6 images of characters/objects to keep consistent. confirm_cost: Set true only after the user accepted the cost estimate. output_dir: Override the output folder. enhance_prompt: Ignored. Kept for compatibility with 0.1.0. |
| flow_extend_videoA | Continue or edit a video with Gemini Omni Flash. Best: pass previous_interaction_id from an earlier video result (keeps full context, supports new dialogue). Otherwise pass video_path to upload a clip of 15 s or less. Extension adds 3-10 s per turn, up to 30 s total. Prompts like "Make the sky purple" edit the clip instead of extending it. Args: prompt: How the scene continues, or what to change. video_path: Local MP4 to extend (uploaded through the Files API). previous_interaction_id: interaction_id printed by an earlier video tool. duration_seconds: Length of the new part, 3-10. resolution: '360p', '720p', '1080p' or '4k'. reference_image_paths: Images of new characters/objects to bring in. confirm_cost: Set true only after the user accepted the cost estimate. output_dir: Override the output folder. aspect_ratio: '16:9' or '9:16'. Usually not needed: a local clip's shape is detected. Pass it if a vertical clip comes back landscape. |
| flow_image_to_videoA | Pipeline: make (or reuse) an anchor image, then animate it with Gemini Omni Flash. Args: video_prompt: How the scene should move. image_prompt: Prompt for a new anchor image (if image_path is not given). image_path: Existing image to animate. image_model: 'pro' (default here, best detail), 'fast' or 'lite'. duration_seconds: 3-15. aspect_ratio: '16:9' or '9:16'. Overrides preset. resolution: '360p', '720p', '1080p' or '4k'. preset: e.g. 'shorts' or 'youtube-thumbnail'. style: Style preset for the anchor image. negative_prompt: Things to avoid in both steps. confirm_cost: Set true only after the user accepted the cost estimate. output_dir: Override the output folder. |
| flow_list_presetsB | List format presets, style presets, current models and limits. |
| flow_estimate_costB | Estimate the cost of a generation before running it (nothing is generated). Args: kind: 'image' or 'video'. model: Image model alias/id (ignored for video). count: Number of images. image_size: '1K', '2K' or '4K'. duration_seconds: Video length. resolution: '360p', '720p', '1080p' or '4k'. |
| flow_usage_todayA | Show today's generation count and estimated spend from the local log. |
| flow_projectA | Create or open a project (it becomes the active one), or show the active project's status. A project is a folder holding ingredients, a storyboard, takes, audio and finished films. Args: name: Project name. New name = create; existing name = open. Omit to see the status. title: Display title. logline: One-sentence summary of the piece. aspect_ratio: '16:9' (default) or '9:16' for Shorts/Reels. style: A look applied to every shot, e.g. 'warm watercolor picture book'. |
| flow_ingredient_saveA | Save a reusable ingredient (character, object, location or style) in the project. Afterwards write @name in any prompt (image, video, storyboard shot) and its reference images and description are attached automatically, which keeps the look consistent. Args: name: Short handle, e.g. 'mira'. Used as @mira. description: What must stay the same (face, hair, clothes, colors, materials...). kind: 'character', 'object', 'location' or 'style'. image_paths: 1-3 existing reference images (copied into the project). generate: If true and no images are given, generate a reference sheet from the description. model: Image model for generate ('fast' default, 'pro' for more detail). project_name: Project to use (default: active project). |
| flow_storyboard_planA | Set the storyboard: an ordered list of shots. Nothing is generated yet. Each shot is an object with: prompt (required): what we see: subject, place, light. Use @name for ingredients. action: what moves or happens during the shot. duration: seconds, 3-15 (default 5). camera: a camera preset ('push-in', 'orbit', 'drone', ...) or your own words. dialogue: spoken line(s), e.g. 'Mira says: "We made it."' sound: sound design, e.g. 'soft rain, distant thunder, no music'. ingredients: extra ingredient names to attach besides the @tags. Args: shots: The shot list. mode: 'replace' (default; refuses if existing shots already have keyframes or takes), 'append' (add to the end) or 'reset' (drop the old plan; files stay on disk). project_name: Project to use (default: active project). |
| flow_shot_updateA | Change one shot: its text, which take is used, or where it is trimmed in the final cut. Changing prompt or ingredients clears the keyframe so it is regenerated next time. Args: shot: Shot number. prompt / action / duration / camera / dialogue / sound / ingredients: new values. select_take: Take number (1 = first) to use in flow_assemble. trim_start: Seconds to cut from the start of the take in the final cut (0 = none). trim_end: Second at which the take ends in the final cut (0 = until the end). project_name: Project to use (default: active project). |
| flow_storyboard_keyframesA | Generate one still image (keyframe) per shot and return a contact sheet to look at. Keyframes are cheap (about $0.03 each with the fast model) and become the first frame of each video, so fix the look here before paying for video. Args: shots: Shot numbers. Default: shots without a keyframe (all shots if redo=true). model: 'fast' (default), 'pro' or 'lite'. image_size: '1K' (default) or '2K'. redo: Regenerate keyframes that already exist. project_name: Project to use (default: active project). |
| flow_storyboard_renderA | Render storyboard shots to video (keyframe = first frame, ingredients = references). Shots render in parallel as background jobs. The call waits up to wait_seconds and then returns; unfinished shots keep rendering, and flow_project shows their progress. A standard/high render is a new generation from the same keyframe, so motion can differ from the draft while the look stays the same. Args: shots: Shot numbers. Default: every shot without a take at this quality. quality: 'draft' (360p, cheapest, for checking motion), 'standard' (720p) or 'high' (1080p). confirm_cost: Set true only after the user accepted the cost estimate. wait_seconds: How long to wait before returning (default 150). project_name: Project to use (default: active project). |
| flow_edit_videoA | Edit a video with a short instruction: add or remove an object, restyle, relight. Keep the prompt short ('Make the jacket red', 'Add light snowfall', 'Make this anime'). Give ONE source: a storyboard shot (the edit becomes a new take), a local video of 15 s or less, or a previous_interaction_id from an earlier video result. Args: prompt: The change to make. shot: Storyboard shot number to edit (uses its selected take). video_path: Local MP4 to edit. previous_interaction_id: interaction_id from an earlier video tool result. resolution: '360p', '720p', '1080p' or '4k' (default: same as the shot's take, else 720p). keep_rest: Add 'Keep everything else the same.' (recommended). confirm_cost: Set true only after the user accepted the cost estimate. project_name: Project to use when shot is given (default: active project). |
| flow_generate_musicA | Generate music with Lyria: a 30-second clip (about $0.04) or a full song (about $0.08). Describe genre, mood, tempo and instruments. In a project the track becomes the film's background music (looped and faded out by flow_assemble). Args: prompt: e.g. 'warm lo-fi piano with soft vinyl crackle, 80 bpm, hopeful'. kind: 'clip' (30 s) or 'song' (a couple of minutes, can include lyrics). instrumental: Ask for no vocals (default true; best for background music). attach: Store it as the active project's music. project_name: Project to use (default: active project, if any). |
| flow_generate_narrationA | Generate a voice-over with Gemini TTS (130+ languages, including Korean; very cheap). Inline tags such as , or are supported. In a project the narration is laid over the film from the start by flow_assemble. Args: text: The words to speak. voice: Prebuilt voice, e.g. Kore (firm), Puck (upbeat), Charon (informative), Aoede (breezy), Sulafat (warm), Achird (friendly), Gacrux (mature). style: Delivery, e.g. 'calm documentary narrator' or 'excited, fast'. attach: Store it as the active project's narration. project_name: Project to use (default: active project, if any). |
| flow_assembleA | Join the selected take of each shot into one film (local ffmpeg, no API cost). Applies per-shot trims, keeps each clip's own audio, and mixes in the project's music (looped, faded out) and narration when present. Args: shots: Shot numbers in playback order. Default: all shots in storyboard order. with_music: Use the project's music if there is one. with_narration: Use the project's narration if there is one. music_volume: 0-1, default 0.25 so it sits under dialogue. clip_volume: Volume of the clips' own audio (0 mutes it). project_name: Project to use (default: active project). |
| flow_reviewA | Look at a generated file: returns the image, or evenly spaced frames of a video. Use this to check a result with your own eyes before telling the user it is good: faces and hands, text spelling, continuity between frames, whether the prompt was followed. Args: path: Image or video file. frames: Number of video frames to sample (1-12, default 6). |
| flow_boardB | Write the project's HTML board (ingredients, storyboard with players, audio, latest film). Args: open_in_browser: Also open it in the default browser on this computer. project_name: Project to use (default: active project). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| short_film | Plan and produce a short multi-shot film with consistent characters. |
| product_ad | A 10-15 second product ad with a consistent product look. |
| social_image_set | One idea as a YouTube thumbnail, a Pinterest pin and a Shorts cover. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 21 tools
Most tools target a distinct resource+action: image generate/edit/reference, video generate/extend/edit, storyboard plan/keyframe/render, and assembly. A few pairs share inputs and could be momentarily confused (flow_edit_video vs flow_extend_video both take video_path/previous_interaction_id; flow_generate_video vs flow_image_to_video), but the descriptions draw clear boundaries (edit changes content, extend continues the scene).
All names are snake_case with a uniform flow_ prefix, which is good, but verb/noun ordering is mixed: verb_noun in flow_generate_image, flow_edit_video, flow_list_presets, yet noun_verb in flow_ingredient_save, flow_storyboard_plan, flow_shot_update, plus bare nouns/verbs like flow_project, flow_board, flow_assemble. Readable, but not a predictable single pattern.
21 tools is above the ideal 3-15 band, but the surface maps to a genuine multi-stage studio workflow (project setup, ingredients, storyboard, keyframes, renders, audio, assembly, review), so almost every tool earns its place. Minor redundancy exists between image-to-video and the generate/extend pair.
Covers the full lifecycle: project creation, reusable ingredients, storyboard authoring, keyframe preview, video rendering, music/narration, final assembly, cost estimation, usage tracking, and visual review. Gaps are minor: no explicit ingredient or take deletion, no project listing/selection beyond the active project, and no subtitle/caption tooling.