Skip to main content
Glama

gemini-media-mcp

CI License: MIT

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-flash by default. Details: docs/research.md.

Tools

Tool

What it does

Costs money

generate_image

Text → image. Options: model, aspect_ratio, resolution, output_name

yes

edit_image

Image(s) + prompt → image. Up to 14 reference images (face, logo, product …) as file paths

yes

start_video

Starts a video job (text, or an image as first frame) and returns a job_id at once. Without confirm_cost=true it only returns the price

yes

get_video_status

Polls a job; when done, downloads the MP4

no (cost is logged at start)

list_models

Configured models, prices and options

no

cost_report

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-mcp

or from a local checkout:

git clone https://github.com/Wimplunch/gemini-media-mcp
uvx --from ./gemini-media-mcp gemini-media-mcp

Once 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-mcp

Claude 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

GEMINI_API_KEY

–

Your Gemini API key (required for generation with the default provider)

GEMINI_MEDIA_PROVIDER

google

google or openrouter, see Provider

OPENROUTER_API_KEY

–

Your OpenRouter key, only read when the provider is openrouter

GEMINI_MEDIA_OUTPUT_DIR

~/gemini-media

Where images, videos and sidecars are written

GEMINI_MEDIA_ALLOWED_DIRS

output dir

Folders input images may be read from, separated by : (; on Windows). Must contain the output dir

GEMINI_MEDIA_MAX_COST_PER_CALL

0.50

Max estimated USD per call

GEMINI_MEDIA_DAILY_BUDGET

2.00

Max estimated USD per day (local time)

GEMINI_MEDIA_MONTHLY_BUDGET

20.00

Max estimated USD per calendar month

GEMINI_MEDIA_MAX_INPUT_MB

7

Max size per input image

GEMINI_MEDIA_DEFAULT_IMAGE_MODEL

gemini-nano-banana-2.1

Default for image tools

GEMINI_MEDIA_DEFAULT_VIDEO_MODEL

gemini-omni-1.1-flash

Default for video tools

GEMINI_MEDIA_CONFIG

–

Path to a TOML file that overrides or adds models and prices

GEMINI_MEDIA_STATE_DIR

<output>/.gemini-media

Cost log and video job list

GEMINI_MEDIA_TIMEOUT_SECONDS

180

Timeout per API request

GEMINI_MEDIA_LOG_LEVEL

WARNING

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 file

What 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, then google-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 in list_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_video and get_video_status return a clear error; switch back to google for 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 than openrouter.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 (gemini-3.1-flash-lite-image)

$0.034

1 image, 1K

Nano Banana 2.1 (gemini-nano-banana-2.1)

$0.034

1 image, 4K

Nano Banana 2.1

$0.113

1 image, 2K, 3 reference images

Nano Banana Pro (gemini-3-pro-image)

$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 (or OPENROUTER_API_KEY with 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 to openrouter.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.jpg and ~/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 commit

See 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 tools
cost_reportA
Read-only

Show estimated spend today, this month and in total, plus remaining budgets.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
modelNoModel ID from list_models. Default: configured default.
promptYesWhat to create, in natural language.
resolutionNoImage size: 512, 1K, 2K or 4K1K
image_pathsYesInput/reference images (face, logo, product...) as file paths.
output_nameNoShort name used in the file name (a slug is derived from it).
aspect_ratioNoOutput aspect ratio; omit to let the model decide.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
modelNoModel ID from list_models. Default: configured default.
promptYesWhat to create, in natural language.
resolutionNoImage size: 512, 1K, 2K or 4K1K
output_nameNoShort name used in the file name (a slug is derived from it).
aspect_ratioNoe.g. 1:1, 16:9, 9:16, 4:51:1

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
job_idYesjob_id returned by start_video

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_modelsA
Read-only

List configured models with estimated prices and supported options.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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).

NameRequiredDescriptionDefault
modelNoModel ID from list_models. Default: configured default.
promptYesWhat to create, in natural language.
resolutionNoe.g. 720p720p
output_nameNoShort name used in the file name (a slug is derived from it).
start_imageNoOptional image file to use as the first frame.
aspect_ratioNo16:9 or 9:1616:9
confirm_costNoMust be true to actually start (and pay). False returns the price.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 6 tool updatesv0.1.0
    • First observedcost_report
    • First observededit_image
    • First observedgenerate_image
    • First observedget_video_status
    • First observedlist_models
    • First observedstart_video

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers