openFlow
Omni Flash and Veo video, Nano Banana images on Google Flow, from any MCP client
Connector by molkex · GitHub account verified by the MCP Registry
Install
Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install connector/molkex-omni-flash-veo3-nano-banana
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Remote endpoint
https://openflowmcp.com/mcpRemote (HTTP)
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 17 read · 34 write · 0 delete
- Secrets
- 1 (API keys, tokens or passwords)
- Install scripts
- Nothing to install (hosted)
- Runs as
- Hosted (remote endpoint)
Tools by what they do 51
From the running server's own tool list (tools/list) on Oct 25, 2026.
Read 17 · Look things up without changing anything.
check_creditscheck_jobfetch_mediaflow_dashboardflow_healthflow_statuslist_available_llmlist_characterslist_live_modelslist_llm_accountslist_modelslist_voices
Show 5 more tools
music_creditsmusic_getmusic_listrefresh_llm_modelssupport_replies
Write 34 · Create, change, send or run things.
add_account_tokenadd_antigravity_startadd_antigravity_submitchat_claude_sonnetchat_gemini_flashchat_gemini_procomplete_antigravity_accountcontact_supportcreate_charactercreate_character_from_descriptioncreate_character_from_photocreate_project
Show 22 more tools
edit_videoextend_videogenerate_character_expression_sheetgenerate_character_imagegenerate_character_turnaroundgenerate_imagegenerate_scenegenerate_videogenerate_video_between_framesgenerate_video_from_imagegenerate_video_with_referencegenerate_voicegenerate_with_facemusic_chatmusic_downloadmusic_generatemusic_stemsrecast_videoset_character_voiceupdate_characterupscale_imageupscale_video
Secrets and settings it asks for
Secrets: values you paste in that let it act as you.
Authorization
Network hosts it talks to 1
openflowmcp.com· found in remote endpoint, install command
Files it touches
- Any path the agent passes to its tools
Tools (51)
As the server listed them on Oct 25, 2026. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_account_tokenAttach one of YOUR OWN Google accounts to the pool using an oauth_token captured on the USER'S OWN machine (password/2FA never leave it). This is the self-serve onboarding path — no server-side browser, no SSH. PREFERRED PATH — no oauth_token handling at all: call flow_status; its `next_step.command` holds a PERSONAL one-line command per OS (mac / linux / win) with the owner's ticket inside. RUN IT YOURSELF in the user's terminal. The script submits the token to the server by itself and prints "Готово — аккаунт ... подключён"; you do NOT call add_account_token afte…
add_antigravity_startBegin connecting a Google ANTIGRAVITY account (used by the Claude/Gemini models via OmniRoute — not a Google Flow account). Returns `authorize_url` and `state`. The next step is on the USER's side: give them `next_step` wording and the URL, they sign in and press Accept in their browser and hand you the `code=...` value from the antigravity.google/oauth-callback page. Then call add_antigravity_submit(code, state) with the `state` returned here.
add_antigravity_submitFinish connecting a Google Antigravity account started with add_antigravity_start. `code` is the value of `?code=...` on the antigravity.google/oauth-callback page the user landed on; `state` is what add_antigravity_start returned. Returns {status, account_id, account_email, requires_project}. By default this also creates the GCP project in one step (`complete=True`) and adds `project_id`. Pass `complete=False` to defer and call `complete_antigravity_account(account_id)` later. If auto-onboarding fails the result keeps `requires_project: true` and carries `onboard_…
chat_claude_sonnetЗапрос к Claude Sonnet 4.6 через вашу подписку Anthropic (если подключена) или через подписку Google (Vertex). Поддерживает инструменты (tool_use). Args: messages: список {"role": "user|assistant", "content": "..."}. system: системный промпт (опционально). max_tokens: максимальное количество токенов в ответе. tools: описание инструментов в формате Anthropic tool_use (опционально). account_email: форсировать конкретный Google-аккаунт. account_tag: форсировать аккаунты с указанным тэгом. Returns: …
chat_gemini_flashБыстрый и дешёвый Gemini 3 Flash — для коротких запросов, классификации, извлечения полей из текста. Идёт в вашу подписку Google, наши токены не тратит. Args: messages: список {"role": "user|assistant", "content": "..."}. system: системный промпт (опционально). max_tokens: максимальное количество токенов в ответе (по умолчанию 65536 — максимум модели, допустимо 1..65536). ВАЖНО: токены «размышления» Gemini 3 входят в этот лимит — при малом значении ответ обрывается (finish_reason "length"). thinkin…
chat_gemini_proЗапрос к Gemini 3 Pro через вашу подписку Google AI Pro. Использует ваш подключённый Google-аккаунт (подключите на /connect-google). Расходует вашу квоту Google, не наши токены. Args: messages: список {"role": "user|assistant", "content": "..."}. system: системный промпт (опционально). max_tokens: максимальное количество токенов в ответе (по умолчанию 65536 — максимум модели, допустимо 1..65536). ВАЖНО: токены «размышления» Gemini 3 входят в этот лимит — при малом значении ответ обрывается (finish_rea…
check_creditsread-onlyCheck projects for a Google account (or all). NOTE: for the credit BALANCE and a full at-a-glance overview, prefer `flow_dashboard()` — it returns real credit numbers per account + totals. This tool only returns the project list.
check_jobread-onlyCheck the status/result of a job previously returned by generate_image, generate_video, generate_video_from_image, or generate_video_with_reference. Besides status/result it reports PROGRESS, so you can tell the person something truthful instead of "still waiting": queue_position — how many jobs are ahead (1 = next to be picked up); only while queued queue_seconds — how long it sat in the queue run_seconds — how long the generation itself has been running account_used — which Google account it ran on, once finished hint — the same thin…
complete_antigravity_accountFinish an Antigravity account started with add_antigravity_submit. Creates the GCP project needed before the account can serve LLM requests. Idempotent — safe to retry; already-onboarded accounts return their project_id.
contact_supportSend a message to the openFlow human operator (no Telegram needed). Replies come from a human, usually within hours; read them with support_replies.
create_characterCreate a new, empty Flow character (just gets you an entity_id — no portrait/body, no description yet). Plain HTTP, no browser involved. Low-level building block — for "make me a character from a description and generate its portrait", call create_character_from_description instead of this; it does this step plus the two below in the right order for you. Next steps after you have entity_id, IN THIS ORDER (reversing them 500s on the first portrait write, confirmed live 2026-07-25): 1) update_character with personality_notes (and display_name) — the slot generation …
create_character_from_descriptionInvent a new character from a text description and generate its portrait — the full "make me a character, no photo involved" path in ONE call, instead of gluing together create_character + update_character + generate_character_image yourself. name: short and unique among YOUR OWN characters (see list_characters()) — how you'll refer to this character afterwards, e.g. character="detective_marlowe" in generate_with_face. description: physical description — build, hair, eyes, clothing, distinguishing features. Saved on the character's card AND used to generate the por…
create_character_from_photoCreate a new Flow character whose portrait (and optionally body) is a REAL PHOTO, not a text description or generation. Both photos become the character's slot-0 (portrait) and slot-1 (body) images directly — Flow's own upload mechanism in its New Character composer, discovered live 2026-07-11 — no image generation call happens for either slot, so resemblance is exact, not "similar style". Boots the on-demand Chrome for this account (~15-30s, longer if body_photo_base64 is also given), same as create_character, no Android/recaptcha involved. photo_base64: raw base6…
create_projectCreate a NEW Flow project on one of your Google accounts and return its project_id. Use this to give every one of YOUR OWN clients their own namespace: create a project per client once, then pass that project_id to generate_image / generate_video so their results never mix with anyone else's. account — which Google account creates it (see flow_dashboard / check_credits for the emails). The project is created under that account, but a project id is a label every account accepts: generation keeps rotating accounts as before, so results stay grouped by project_id, no…
edit_videoRewrite a video from a plain description: "make the sky stormy", "take the passer-by out of the shot", "warmer light", "put the product from the image on the table". Source — ONE of: media_id: id from a previous generate_video* result (OUR OWN generation). Job is pinned to the account that produced it. video_base64: base64-encoded YOUR OWN clip (mp4/mov/avi/3gp, up to 60s/1GB). Worker uploads it via Flow's Scotty resumable upload (reversed via Flow Web Ingredients, 2026-10-14) onto a healthy account, then runs …
Show 36 more tools
extend_videoContinue a video this service already generated — Flow writes what happens next. media_id: the id from a previous generate_video* result (the bare id, not the /v1/media/... path). Only videos made through this service can be extended: the id belongs to a specific Google account's project, so the job is pinned to that account instead of rotating. An id we never produced comes back as a clear error, not a mystery failure. Use this for shots that need to run longer than one generation, or to keep a scene going without re-describing it: the continuation inherits the s…
fetch_mediaread-onlyDownload a generated media file (video, frame) and return its bytes, base64-encoded, so the file can be saved or shown even though the media endpoint isn't publicly reachable with your MCP key. THIS IS THE EXPENSIVE PATH — prefer `download_url` from the job result. Bytes returned here travel as TEXT, and text is where context dies: a 480 KB audio stem is ~640 thousand base64 characters, roughly 160 000 tokens, in ONE tool result. The same file behind `download_url` costs about twenty. An inline image preview is cheap by comparison (it travels as an image, ~450 toke…
flow_dashboardread-onlyThe account-pool control panel: for EVERY Google account, the real credit balance, subscription tier, project count, and health status, plus totals — one call, formatted for reading. Use this to answer "how many accounts, how many credits on each and in total, what projects" — the operator's dashboard. Returns a `summary` string (human-readable table) plus structured `accounts` and `totals`. Credit numbers are live (Flow's /v1/credits). Credit REFRESH date is not exposed by Flow's API, so it's shown as an estimate note, not a hard date.
flow_healthread-onlyCheck whether the Flow generation backend is reachable and see current queue depth (queued + warming + running jobs), plus disk state (`disk`: free_gb, below_target, below_floor, refusing_jobs); status is "degraded" when disk is below the floor. Note: the Android emulator is now OFF — generation runs on a pure-HTTP token path, so there's no warm-up delay anymore.
flow_statusread-onlyWhat this key still needs before it can do everything — READ-ONLY, spends nothing. Call this BEFORE the first generation of a session, whenever a call is refused, and whenever the user asks why something does not work. It answers in one shot: is a Google account connected, how much of the free trial is left, is the key linked to a GitHub identity, how much of this week's free limit is left (`weekly`). The important field is `next_step`: it is the single most blocking thing right now, with ready-made wording (`text` in Russian, `text_en` in English) and a `url` to open…
generate_character_expression_sheetGenerate a single image showing the character's FACE with several different expressions in one row, labeled — an "expression sheet". Same job type and same history as generate_character_turnaround — see its docstring for the full story: the 2026-07-11 finding (plain Android-bearer image path is inconsistent for multi-view prompts, the real web composer was reliably consistent) is why this tool exists, but as of 2026-07-26 it no longer drives that composer — pure HTTP with image_inputs=[portrait_media_id] instead (no browser). Multi-view consistency on THIS new path …
generate_character_imageGenerate a portrait or body image for an existing Flow character. entity_id: the character's entityId — from create_character or create_character_from_photo, or create_character_from_description's own result (which already calls this for slot 0 — no need to call it again for that slot). character_slot_index: 0 for portrait, 1 for body. Flow keeps the two slots visually consistent server-side once they share an entityId — no reference image needed for the body shot. ONE-SHOT PER SLOT, confirmed live 2026-07-25: each slot can be written exactly once — a second g…
generate_character_turnaroundGenerate a single image showing the character's FULL BODY from 3 angles (front/side/back) in one row, labeled — a "turnaround sheet". Pure HTTP as of 2026-07-26 — no browser involved (see below for what changed and what that does and does NOT prove). History, so the mechanism change doesn't erase the reason this tool exists: confirmed live 2026-07-11 that the plain Android-bearer generate_character_image path produces an INCONSISTENT result for this exact kind of multi-view prompt, even with a detailed physical description already saved on the entity — a real w…
generate_imageGenerate an image from a text prompt via Google Flow. model — pass ONE of these exact ids (from GET v1/flow/models, verified 2026-07-25): BELUGA = "Nano Banana 2" — the DEFAULT, ~30s (legacy id NARWHAL is accepted as an alias) GEM_PIX_2 = "Nano Banana Pro" — highest quality, ~40s, has a separate DAILY per-account quota (429 rotates accounts) HARBOR_SEAL = "Nano Banana 2 Lite" — ~40s Anything else is rejected with HTTP 400 — there is no silent fallback, so a wrong id wastes a round trip, not credits. Do…
generate_sceneBuild a location precisely from a scene-layout/v2 map and generate its plate. This is the "exact location building" path: instead of describing the room in prose (which the model reinterprets — furniture drifts, depths change between shots), it renders a control image from the map's boxes (each object a colored block at its true position/size/depth, plus a 1-meter floor grid in true perspective), then asks the generator to REPLACE each block with its real object in the same camera — so the plate follows the geometry pixel-wise. Same room from another camera_id is the s…
generate_videoGenerate a video from a text prompt via Google Flow (Veo models). video_model_key options: abra_t2v_4s (default, 7 credits), veo_3_1_t2v_lite (10cr, visibly cleaner), veo_3_1_t2v (100cr, "Quality" tier), veo_3_1_t2v_fast (20cr). project_id: put the clip into a project made with create_project instead of the account's default one — one project per end client keeps their work separate. Video generation routinely takes 1-3+ minutes, so this almost always returns a job_id rather than a finished result — call check_job with it, waiting a few seconds between checks, un…
generate_video_between_framesGenerate the transition between TWO given frames: the video starts at the first image and ends at the second one, Flow invents everything in between. This is Flow's "Кадры" with both slots filled — a different mechanism from generate_video_from_image, which only pins the FIRST frame and lets the ending drift. Use this when the ending matters: a logo that must resolve exactly, a character that must land in a specific pose, two stills from a storyboard that need connecting. Both images are raw base64 bytes, no data: URI prefix. The default model (veo_3_1_interpolati…
generate_video_from_imageGenerate a video that starts from a given image (i2v — image-to-video). Pass exactly one start: start_image_base64 (raw base64 image bytes, no data: URI prefix) or start_media_id (media_id of one of YOUR finished videos — the clip then starts from that video's `frame`, "last" by default, taken server-side). Mutually exclusive with reference-image (r2v) generation. Chain clips: every finished video carries `last_frame_path` and its media_id, so clip 2 = generate_video_from_image(prompt="...", start_media_id=<clip 1 media_id>), clip 3 the same from clip 2's media_id…
generate_video_with_referenceGenerate a video using up to 7 reference images (r2v — e.g. a consistent character/subject across the video). reference_images_base64: raw base64-encoded image bytes (no data: URI prefix), up to 7 with Omni Flash keys (abra_r2v_*, the default), up to 3 with Veo r2v keys (veo_3_1_r2v_*). Mutually exclusive with start-image (i2v) generation. THIS IS THE RECOMMENDED WAY to get content that actually looks like a real person from a real photo — confirmed live 2026-07-11: r2v conditions generation on the reference photo's actual pixels and reliably preserves the real fac…
generate_voiceSpeak `text` aloud with a Gemini TTS voice and return a WAV (24 kHz, mono, 16-bit). Takes ~15-25 seconds. Costs no image/video quota. Russian, English and most other languages work; the voice name only sets the timbre. text: what to say (up to 5000 characters). voice: one of list_voices() (default "Algieba"). style: optional delivery hint, e.g. "calm, slow" or "cheerful". Empty = neutral. project_id: optional, a project from create_project; omit for the account's default. include_preview: also return `wav_preview_b64`, the FIRST 8 KB of the file as base64. O…
generate_with_faceGenerate a NEW image of the SAME PERSON/character as an existing photo or portrait — dress them differently, move them somewhere else, make an avatar. This is the tool for "here is my photo, now put me in a suit / in a park", and also the ONLY tool for "generate another picture of <character I already made>". Pass exactly ONE of: character: the name you gave a character via create_character_from_description or create_character_from_photo(..., name=...). Looked up in your own list — see list_characters(). This is the normal way once a character has a name. …
list_available_llmread-onlyКакие LLM-модели доступны этому ключу прямо сейчас, и какая у ключа квота. Делает два параллельных запроса: GET /llm/models (OmniRoute — список моделей и подключённых Google-аккаунтов) и GET /v1/me (openFlow — plan + квоты). ETag от /v1/me держится OmniRoute'ом в кэше ~5 минут; force_refresh=True добавляет Cache-Control: no-cache, чтобы заставить обновить. Returns: { "accounts": [{"email": "...", "credits": int, "models": [...]}, ...], "models": [{"id": "gemini-3-pro", "label": "..."}, ...], "quot…
list_charactersread-onlyList the characters YOU created (create_character_from_description, or create_character_from_photo with name=...) and can now generate more images of via generate_with_face(character=<name>, prompt=...). Read-only, no Flow calls, no credits spent. Returns {"characters": [{"name", "source", "description", "portrait_media_id", "entity_id", "project", "account", "created_at"}, ...]}, oldest first. `source` is "description" (create_character_from_description) or "photo" (create_character_from_photo). `portrait_media_id` is what generate_with_face actually uses — a …
list_live_modelsread-onlyLive from Google, no credits, use to answer «is this model still working?». Reads Google Flow's own current model catalog (modelConfig: usage keys, per-tier credit prices, durations) and the availability status of each model family, through one of the caller's connected accounts. READ-ONLY: nothing is generated and no credits are spent. Cached for ~1 minute server-side. Use list_models instead for the short curated list of ids this service's tools accept; use this one when you need Google's ground truth (a key that is missing here has been withdrawn upstream). Ret…
list_llm_accountsread-onlyList the Google accounts you connected for the LLM relay with their tier (Free/Pro/Ultra); refresh=True re-checks the tier with Google. The model is chosen per request (chat tools / relay `model`); pin an account with the `X-Account-Email` header.
list_modelsread-onlyList every valid model id this service accepts — READ-ONLY, spends no credits, calls nothing outside this service. Call this BEFORE generate_image/generate_video if you're unsure of an exact id: guessing (e.g. the family key "nano_banana_pro" or a display name like "Nano Banana 2" instead of the id "NARWHAL") gets a hard HTTP 400 on a call that already committed to a task, not a helpful list. Returns: images: {id: {label, typical_seconds, notes}} for the three valid `model` values (generate_image, generate_character_image). videos: {id: {label, credits,…
list_voicesread-onlyThe 30 Gemini TTS voices usable with generate_voice: name, gender, short description. Gender/description are a rough guide only; any voice reads any language.
music_chatTalk to the Google Flow Music Producer agent instead of one-shotting a track. Use this when the work is a conversation rather than a single brief: asking what it can do, having it write lyrics first, or editing a track it already made ("drop the vocals", "same song, 30 seconds shorter", "make the chorus bigger"). For a plain "make me a song about X", music_generate is the shorter path. message — what to say. conversation_id — omit on the first message, then pass the one that comes back so the Producer keeps its memory of the track. model — same choices as music_ge…
music_creditsread-onlyCheck remaining flowmusic credits and subscription tier.
music_downloadDownload the raw .m4a file of a track to the server.
music_generateGenerate a full song from a text brief via Google Flow Music (Lyria). prompt — free text: genre, mood, BPM, instruments, and whether you want vocals or an instrumental (e.g. "dreamy synthwave, retro 80s, 110 bpm, instrumental"). The Producer agent turns it into a finished track (usually ~2-3 minutes, and it returns TWO variants). model — "lyria" (Lyria 3.5, the default flagship) or "lyria-pro" (Lyria 3 Pro, legacy). lyrics — optional explicit words to sing; omit for the model to write its own / stay instrumental. SAVE THE RESULT. Each returned clip carries a publ…
music_getread-onlyGet metadata for a single music track.
music_listread-onlyList the user's music tracks.
music_stemsSplit a track we generated into stems (vocals, instrumental, drums, bass, …). clip_id — the id of a clip returned by music_generate (or music_video's song). Runs on the same account that made the track. Returns {"stems": {name: "/v1/media/..."}, "media": [...]} when done, or a job_id to poll with check_job. Each stem is a downloadable .m4a on our server (public download_path). Save the ones you need into the user's project.
recast_videoRe-make a video with YOUR character in place of the person in it: same camera, movement, gestures, timing and mouth movement, the character's look. character: name from list_characters (its portrait is used as the look). Source — ONE of media_id (a video this service made) or video_base64 (your own clip). who: which person to replace when there are several ("the man on the left"). scene: one sentence about the room/background — helps keep it intact. extra: anything else for the model ("keep the on-screen text"). start_sec/end_sec: recast only that piece (at most 10…
refresh_llm_modelsread-onlyПолучить актуальный список LLM-моделей из каталога OmniRoute. OmniRoute сам опрашивает Google раз в час; `force_live=True` просит релей сходить в Google прямо сейчас (жёсткий rate-limit на стороне релея: не чаще 10 секунд). Полезно, когда клиент видит 404 на недавно добавленную модель. Args: force_live: True — передать `?live=1` на /v1/models и дождаться свежего каталога; False (по умолчанию) — вернуть кэш. Returns: { "models": [...], # OpenAI-совместимый список "…
set_character_voiceAttach a preset Gemini TTS voice to a Flow character for auto-lipsync in future videos. Synthesizes a short reference audio in the chosen voice and attaches its media_id to the character's `audio_references`. This is a ONE-TIME setup per character: any subsequent video generation that references this character will auto-lipsync with this voice (same mechanism Flow Web uses when you set a voice via its UI). Calling it again overwrites the voice. Pass sample_text=null for a short default sample — only the resulting audio is kept as a reference; the content of the text i…
support_repliesread-onlyYour support thread, including operator replies (from a human, usually within hours). `since` is a unix timestamp: only newer messages.
update_characterSave a character's display name and/or personality notes. Without this, a character stays 'Untitled Character' with no description even after portrait/body images exist. account must be whichever Google account's project owns this entity_id.
upscale_imageUpscale an existing generated image (from a prior generate_image call) to a higher resolution -- the same "1K/2K/4K" choice Flow offers when downloading. account: the Google account whose project owns media_id. Do not guess it and do not ask the user: the generate_image result you already have carries it in the `account_used` field -- pass that value verbatim. A media_id only exists inside the project of the account that produced it, so any other account returns a clean error. target_resolution: "2K" or "4K". Not every image supports upscaling (depends on the sour…
upscale_videoUpscale an existing generated video (from a prior generate_video call) to a higher resolution -- the same "270p/720p/1080p/4K" choice Flow offers when downloading. Counts against the weekly free video limit (3 a week without a subscription), like any other video operation, and spends the account's own Flow credits. account: the Google account whose project owns media_id. Do not guess it and do not ask the user: the generate_video result you already have carries it in the `account_used` field -- pass that value verbatim. A media_id only exists inside the project of…
Compare and alternatives
Featured in
Signals
- Stars
- 9
- Forks
- 0
- Open issues
- 0
- Last commit
- Oct 19, 2026 (9 days ago)
- Last release
- Aug 23, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.molkex/omni-flash-veo3-nano-banana- Version
- 1.1.0
- Auth
- Bearer token
- License
- License unknown
- Repository
- github.com/molkex/mcp-flow-google
- Website
- openflowmcp.com/
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
openFlow MCP server. Agent Mart. https://agentmart.dev/connectors/molkex-omni-flash-veo3-nano-banana (last updated 2026-10-24)