gemini-media-mcp
Uses Google AI Studio / Gemini API credentials and pricing to run paid image and video generation calls, with cost estimation based on Google's published price list and SynthID watermarking of every generated output.
Integrates with Google's Gemini API to generate and edit images using the Nano Banana models and to create videos with Gemini Omni Flash. Provides tools for text-to-image generation, prompt-based image editing with up to 14 reference images, starting and polling video jobs, listing available models with prices, and reporting estimated spend against per-call, daily and monthly budgets.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gemini-media-mcpGenerate a watercolor fox in a snowy forest and save it as fox.png"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gemini-media-mcp
Deutsch: README.de.md
An MCP server that lets Claude (or any MCP client) create and edit images with Google's Nano Banana models and generate videos with Gemini Omni Flash, using the Gemini API.
It is built to be boring in the right places: every paid call is priced and checked against your budget first, files can only be read from folders you allow, nothing is ever overwritten, and every output gets a JSON sidecar that records how it was made.
Video note (2026-10-31): Google shut down the Veo 3.1 preview models on the Gemini API on 2026-10-22 and recommends Gemini Omni Flash as the replacement. The video tools use
gemini-omni-1.1-flashby default. Details: docs/research.md.
Tools
Tool | What it does | Costs money |
| Text → image. Options: | yes |
| Image(s) + prompt → image. Up to 14 reference images (face, logo, product …) as file paths | yes |
| Starts a video job (text, or an image as first frame) and returns a | yes |
| Polls a job; when done, downloads the MP4 | no (cost is logged at start) |
| Configured models, prices and options | no |
| Estimated spend today / this month / total, remaining budget | no |
Related MCP server: genrelay-mcp
Requirements
Python 3.11+ and uv
A Gemini API key from Google AI Studio with billing enabled. None of the image or video models has a free tier.
Installation
The package is not on PyPI yet. Run it straight from GitHub with uvx:
uvx --from git+https://github.com/Wimplunch/gemini-media-mcp gemini-media-mcpor from a local checkout:
git clone https://github.com/Wimplunch/gemini-media-mcp
uvx --from ./gemini-media-mcp gemini-media-mcpOnce published to PyPI this becomes uvx gemini-media-mcp.
API key
The server reads the key only from the GEMINI_API_KEY environment variable. Keep it out
of config files and chat windows. On Linux you can make it available to desktop apps like
this (input is hidden, file is readable only by you):
mkdir -p ~/.config/environment.d && (umask 077; read -rsp "Gemini key: " K && printf 'GEMINI_API_KEY=%s\n' "$K" > ~/.config/environment.d/gemini.conf; unset K)Log out and back in afterwards. On macOS/Windows, set the variable in your shell profile or system settings.
Claude Code
claude mcp add --scope user gemini-media \
-e GEMINI_MEDIA_OUTPUT_DIR="$HOME/Pictures/gemini" \
-- uvx --from git+https://github.com/Wimplunch/gemini-media-mcp gemini-media-mcpClaude Code passes its own environment to the server, so GEMINI_API_KEY is inherited and
never written into the config. Check with claude mcp list.
Claude Desktop
Edit claude_desktop_config.json
(Linux ~/.config/Claude/, macOS ~/Library/Application Support/Claude/,
Windows %APPDATA%\Claude\):
{
"mcpServers": {
"gemini-media": {
"command": "uvx",
"args": ["--from", "git+https://github.com/Wimplunch/gemini-media-mcp", "gemini-media-mcp"],
"env": {
"GEMINI_MEDIA_OUTPUT_DIR": "/home/you/Pictures/gemini"
}
}
}
}Restart Claude Desktop. The server inherits GEMINI_API_KEY from the app's environment.
Avoid pasting the key into this file, especially if you sync or share it.
Configuration
All settings are environment variables.
Variable | Default | Meaning |
| – | Your Gemini API key (required for generation with the default provider) |
|
|
|
| – | Your OpenRouter key, only read when the provider is |
|
| Where images, videos and sidecars are written |
| output dir | Folders input images may be read from, separated by |
|
| Max estimated USD per call |
|
| Max estimated USD per day (local time) |
|
| Max estimated USD per calendar month |
|
| Max size per input image |
|
| Default for image tools |
|
| Default for video tools |
| – | Path to a TOML file that overrides or adds models and prices |
|
| Cost log and video job list |
|
| Timeout per API request |
|
| Log level (logs go to stderr) |
The default per-call limit of $0.50 blocks videos (a 10 s video costs about $1.01). Raise
GEMINI_MEDIA_MAX_COST_PER_CALL deliberately if you want video.
Models and prices
The bundled catalogue is src/gemini_media_mcp/models.toml.
Prices were checked on 2026-10-31 against the
official price list. To change them, copy
the file, edit it and point GEMINI_MEDIA_CONFIG at your copy. Each [models."<id>"] table
in your file replaces the bundled entry for that ID.
Provider
By default the server talks only to Google (GEMINI_MEDIA_PROVIDER=google). Nothing
changes unless you opt in.
Optionally, the image tools (generate_image, edit_image) can go through
OpenRouter instead, using the same Google models:
GEMINI_MEDIA_PROVIDER=openrouter
OPENROUTER_API_KEY=... # set it like GEMINI_API_KEY, never in a config fileWhat changes with openrouter:
Data flow: prompts and reference images go to
openrouter.ai, which forwards them to Google. A second company sees your data. OpenRouter states that it does not store prompts or responses unless you opt in to logging in your account settings; check its privacy page yourself.Routing: each request is pinned to Google's own providers on OpenRouter (
google-ai-studio, thengoogle-vertex), so no other company's model ever answers.Models: the catalogue IDs map to OpenRouter's
google/<id>, e.g.gemini-3-pro-image→google/gemini-3-pro-image. Same IDs inlist_models, same options.Prices: OpenRouter passes Google's token prices through, so the bundled estimates apply. Some Vertex regions are up to 10 % dearer; AI Studio is tried first. Your OpenRouter activity page is the real bill.
No video: OpenRouter has no video model.
start_videoandget_video_statusreturn a clear error; switch back togooglefor video.Unchanged: cost limits, the path sandbox, input checks, no-overwrite naming and the sidecar (which now records
"provider"). The OpenRouter key gets the same redaction as the Gemini key, and the client refuses to contact any host other thanopenrouter.ai.
Cost examples
Estimates at Google's list prices from 2026-10-31 (USD, standard tier):
What | Model | Estimate |
1 image, 1K | Nano Banana 2 Lite ( | $0.034 |
1 image, 1K | Nano Banana 2.1 ( | $0.034 |
1 image, 4K | Nano Banana 2.1 | $0.113 |
1 image, 2K, 3 reference images | Nano Banana Pro ( | $0.141 |
1 image, 4K | Nano Banana Pro | $0.240 |
1 video, 720p, up to 10 s | Gemini Omni Flash | ≈ $1.01 |
50 images per month, 1K | Nano Banana 2.1 | ≈ $1.70 |
The log stores estimates. Your Google bill is what counts; check it in AI Studio.
Security
API key: read only from
GEMINI_API_KEY(orOPENROUTER_API_KEYwith the opt-in OpenRouter provider) and sent only as an HTTP header to that provider. It is never logged, never part of the settings object and removed from every error message.File access: input images are only read from
GEMINI_MEDIA_ALLOWED_DIRS. Paths are fully resolved (symlinks included) before the check, so../tricks and symlinks pointing outside are rejected.Input validation: the file type is detected from the file content (PNG, JPEG, WebP, HEIC/HEIF), not from the extension. Size is limited.
No overwrites: outputs are named
YYYYMMDD-HHMMSS_<slug>.<ext>and created with exclusive-create; an existing name gets a-2,-3… suffix.Cost control: each call is priced before it is sent and rejected if it would break the per-call, daily or monthly limit. Videos need an explicit
confirm_cost=true.Network: the server talks only to the Google Gemini API (
*.googleapis.com), or, if you opt in to the OpenRouter provider, only toopenrouter.ai. No telemetry, no analytics, no update checks.Dependencies: a handful of direct runtime dependencies, pinned exactly; the lockfile pins the rest. Dependabot and a gitleaks secret scan run on the repository.
More in SECURITY.md.
Transparency: sidecars and AI labelling
Every output gets a <name>.json next to it with prompt, model, provider, reference images
(path and SHA-256), parameters, estimated cost and timestamp.
Google embeds an invisible SynthID watermark in every image and video generated with these models. If you publish the results, label them as AI-generated: from 2 August 2026, Article 50 of the EU AI Act requires that deepfakes, and AI-generated text published to inform the public, are disclosed as artificially generated. The sidecar files help you keep track of what was generated. (This is a pointer, not legal advice.)
Example prompts
Ask Claude in plain language, for example:
"Make a 16:9 header image: a robot eating lunch at a desk, flat illustration style, call it robot-lunch."
"Use
~/Pictures/gemini/me.jpgand~/Pictures/gemini/logo.png: put the logo on my T-shirt, keep my face unchanged.""What would a 9:16 video of waves at sunset cost?"
"Is the video done yet?"
"How much have I spent on images this month?"
Development
uv sync
uv run pytest # tests use a fake API, no network
uv run ruff check . && uv run ruff format --check .
uv run mypy
uvx pre-commit install # gitleaks + ruff before each commitSee CONTRIBUTING.md.
License
MIT, see LICENSE.
Not affiliated with or endorsed by Google. Gemini, Nano Banana and Veo are trademarks of Google LLC.
Built by Wimplunch – Lunch is for wimps.
Available Tools
6 toolscost_reportARead-only
Show estimated spend today, this month and in total, plus remaining budgets.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description still adds useful behavior beyond them by disclosing that the values are estimates and that results cover three distinct time windows plus budget remaining. It stops short of saying how fresh the estimate is or where budget data originates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero filler, with the most important information (what is returned) front-loaded. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters, read-only annotations, and an output schema that documents the return shape, the description covers nearly everything an agent needs to select and call it. The only remaining gap is data freshness/estimation basis, which is minor given the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the schema is an empty object, so there is nothing for the description to disambiguate. Baseline 4 applies since no semantic gap exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ("Show") with a specific resource ("estimated spend" / "remaining budgets") and enumerates the aggregation windows (today, this month, total). It leaves no ambiguity about what the tool returns; only an explicit nod to the sibling image/video tools is absent, and those are unrelated enough that no differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool to call for spend/budget questions, but there is no explicit when-to-use framing, no statement of prerequisites (e.g. authentication or billing scope), and no named alternatives. For a zero-parameter reporting tool that is largely self-evident, this is adequate but not instructive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_imageB
Edit or combine one or more images according to the prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID from list_models. Default: configured default. | |
| prompt | Yes | What to create, in natural language. | |
| resolution | No | Image size: 512, 1K, 2K or 4K | 1K |
| image_paths | Yes | Input/reference images (face, logo, product...) as file paths. | |
| output_name | No | Short name used in the file name (a slug is derived from it). | |
| aspect_ratio | No | Output aspect ratio; omit to let the model decide. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare write (readOnlyHint=false), non-destructive, and open-world behavior, so the description should add operational context such as whether results are written to disk, expected latency, or cost implications. It adds none of that; 'according to the prompt' restates the obvious. The only unstated-but-inferable behavior, file output, comes from the schema's output_name, not the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity is part of why behavior and usage remain under-explained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and full parameter documentation, so the description need not explain return values. However, for a six-parameter, open-world generation tool that writes artifacts, it omits file-output behavior, cost considerations (a cost_report sibling exists), and model selection implications, leaving meaningful gaps for an agent deciding between edit_image and generate_image.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so model, prompt, resolution, image_paths, output_name, and aspect_ratio are all documented in the schema itself, which sets the baseline at 3. The description contributes no additional parameter meaning beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (edit/combine) and resource (images) plus the driving input (the prompt), so an agent knows it transforms supplied images rather than creating new ones. It stops short of naming generate_image as the alternative, so differentiation is implied by 'one or more images' rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrase 'edit or combine one or more images' signals that reference images must exist, which separates it from generate_image. There is no explicit when-to-use, when-not-to-use, or cost/quality tradeoff guidance relative to the sibling generation and model-listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageA
Create an image from a text prompt. Costs money; checked against the budget first.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID from list_models. Default: configured default. | |
| prompt | Yes | What to create, in natural language. | |
| resolution | No | Image size: 512, 1K, 2K or 4K | 1K |
| output_name | No | Short name used in the file name (a slug is derived from it). | |
| aspect_ratio | No | e.g. 1:1, 16:9, 9:16, 4:5 | 1:1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the mutating, open-world nature is known. The description adds genuinely new behavioral context that annotations cannot express: the call incurs monetary cost and is budget-checked before execution. It does not say what happens when the budget check fails or whether generation is synchronous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no waste, and the cost caveat is placed early enough that an agent sees it before committing to the call. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and all five parameters are fully described in the schema. The cost-and-budget note covers the main non-obvious risk; only edge behavior (budget rejection, failure modes) is left unstated, which is a minor gap for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including model, resolution, aspect_ratio and output_name is already documented in the schema. The description adds no syntax, defaults, or constraint detail beyond that, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ("Create an image") plus the input modality ("from a text prompt"), which implicitly separates it from edit_image and start_video. It stops short of naming a sibling explicitly, so an agent must infer the boundary rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as edit_image for modifying an existing image. The only steer is the implied contrast in "from a text prompt", and nothing tells the agent to call list_models first for a model ID, even though a sibling exists for that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_statusA
Check a video job; when it is done, download the MP4 to the output directory.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | job_id returned by start_video |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=false without saying why; the description resolves that by disclosing that a completed job writes an MP4 into the output directory. That is genuinely additive context. It stops short of covering repeated-call behavior (does a second call re-download?), where the output directory is, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence that front-loads the action and appends the conditional side effect. Nothing is redundant and nothing needs to be skimmed past.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the write side effect is covered. However, for a polling tool that produces files, the description omits whether the call blocks until completion, whether it is safe to repeat, and where the downloaded artifact lands relative to other tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, and the schema already explains that job_id comes from start_video. The description adds no format, validation, or provenance detail beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (check a video job) and adds the terminal side effect (download the MP4). It is clearly distinct from sibling start_video and from the image tools, though it never names start_video explicitly as the originating call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'check a video job' suggests calling it after job submission, and the schema's 'job_id returned by start_video' fills that gap. There is no explicit when-to-use, no guidance on how often to poll, and no statement about what to do if the job failed or is still running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-only
List configured models with estimated prices and supported options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so much of the safety profile is covered. The description adds one genuinely new behavioral fact — that it returns only configured models plus price estimates and supported options — but says nothing about auth, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; every clause (configured models, estimated prices, supported options) carries information about the response.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no input parameters, an output schema in place, and annotations covering the read-only profile, the definition supplies nearly everything an agent needs. The only gap is the missing cue about where this call fits relative to cost_report and the generation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already conveys. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("List configured models") and states the payload (estimated prices and supported options). It is clearly distinct from the sibling tools, which all generate or edit media or produce a cost report, but it does not name those siblings explicitly to reinforce the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: mentioning estimated prices and supported options hints that this is a discovery call to make before generate_image, start_video, or cost_report, but the description never says when to call it or when not to. No prerequisites or ordering guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_videoA
Start a video generation job and return a job_id immediately (no waiting).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model ID from list_models. Default: configured default. | |
| prompt | Yes | What to create, in natural language. | |
| resolution | No | e.g. 720p | 720p |
| output_name | No | Short name used in the file name (a slug is derived from it). | |
| start_image | No | Optional image file to use as the first frame. | |
| aspect_ratio | No | 16:9 or 9:16 | 16:9 |
| confirm_cost | No | Must be true to actually start (and pay). False returns the price. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only, open-world, non-destructive operation, so the description only needs to add context. It usefully discloses the asynchronous contract (returns immediately, no waiting), but omits the paid/cost-gated nature of the call and the fact that confirm_cost=false merely quotes a price, which is the most consequential behavior here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the async guarantee parenthesized for emphasis. Every clause earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the async nature is covered. However, for a job-starting tool sitting next to get_video_status, the description should say what to do after receiving job_id and note the cost-confirmation requirement, both of which are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all seven parameters including confirm_cost's gating semantics. The description adds no parameter-level meaning beyond that, which is the expected baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start a video generation job') plus the immediate return ('job_id'), which cleanly separates it from the polling sibling get_video_status. It stops short of naming that sibling, so the differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'No waiting' implies this is the kickoff call and that status is checked elsewhere, but the description never names get_video_status as the follow-up. It also gives no guidance on when to use this versus generate_image or when the cost-confirmation step applies.
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.
6 tool updates
v0.1.0- First observed
cost_report - First observed
edit_image - First observed
generate_image - First observed
get_video_status - First observed
list_models - First observed
start_video
TDQS
Scored across 6 tools
Each tool targets a distinct action: image creation, image editing, model listing, video job start, video job polling, and budget reporting. The only mild overlap is that list_models shows prices while cost_report shows spend, but their purposes (catalog vs. accounting) are clearly separated.
Five of six tools follow a clean verb_noun pattern (generate_image, edit_image, list_models, start_video, get_video_status). cost_report is a noun phrase and breaks the pattern slightly, but the set remains highly readable and predictable.
Six tools is well-scoped for a media generation + budget server, with each tool earning its place. The async video flow is correctly split into start/status rather than bloating the surface.
Core lifecycle is covered: model discovery, image create/edit, video start/poll, and cost tracking. Minor gaps exist — no job cancellation, no way to list previously generated assets or inspect a single video job without downloading, and no equivalent edit_video.
Maintenance
Related MCP Connectors
Omni Flash and Veo video, Nano Banana images on Google Flow, from any MCP client
Create images & video from any MCP agent — 17 models, spend limits, one URL.
AI image, video, voice and music generation over MCP, routed to Veo 3.1, Seedance 2.5 and more.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI clients like Claude and ChatGPT to generate images and videos, animate images, create lip-synced videos, list TTS voices, and manage media via remote MCP tools.-
- AlicenseAqualityBmaintenanceEnables video and image generation from any MCP client, with support for models like Veo 3.1, Grok Imagine, and Nano Banana, including text-to-video, image-to-video, image generation and editing.465 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents from an MCP client to control Google Flow through a signed-in Chrome session, generating videos and images with Veo, Nano Banana, and Omni while managing projects, assets, scenes, characters, and shot lists with spending-approval guards and a sandboxed file vault.5MIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-compatible clients to generate images and videos, synthesize speech, clone and design voices, and create related media outputs.493 npmMIT