Skip to main content
Glama

An MCP server that gives Claude Code, Claude Desktop or any other MCP client video generation with Google Veo. It talks to the Gemini API directly: text-to-video, image-to-video and a transition between a first and a last frame. The MP4 is saved on the machine that runs the server.

Tools

  • generate_video starts a render, waits for it and saves the MP4. Takes a prompt and, optionally:

    • image, the first frame (png, jpg, webp), and lastFrame, which needs image;

    • negativePrompt, seed;

    • aspectRatio: 16:9 (default) or 9:16;

    • durationSeconds: 4, 6 or 8 (default); 1080p and 4k need 8;

    • resolution: 720p (default), 1080p or 4k;

    • model (veo-3.1-generate-preview by default), filename, outputDir.

    Returns the file path. While it waits, it sends MCP progress notifications, so the client doesn't time the call out.

  • fetch_video waits for a render that is already running and saves it by its operation name. When generate_video fails after the render started, its error names the operation: fetch_video picks it up without paying twice.

  • list_models lists the Veo models your key can use.

Veo is billed per second of video and a render takes one to five minutes, so the tool asks the model to check before generating several variants. Network errors, 429 and 5xx are retried with backoff. When the safety filter drops a video, the error says why.

Related MCP server: Vidu MCP

Setup

Node 26 or newer. Add the server to your MCP config, see .mcp.json.example:

{
	"mcpServers": {
		"veo": {
			"command": "npx",
			"args": ["-y", "@aimuzov/veo-mcp"],
			"env": { "GEMINI_API_KEY": "your-api-key", "VEO_OUTPUT_DIR": "./veo" }
		}
	}
}

Get a key at AI Studio, Veo needs a project with billing enabled. Without a key the server still starts, and every tool answers with that hint.

The server runs only over stdio: a video is a file on the disk of the machine that made it, a hosted connector would leave it on someone else's server.

Variable

Default

What it does

GEMINI_API_KEY

Gemini API key, required

VEO_OUTPUT_DIR

./veo

Where videos are saved

VEO_POLL_INTERVAL_MS

10000

How often to poll the render

VEO_TIMEOUT_MS

900000

When to give up on a render

LOG_LEVEL

info

error, warn, info or debug

Development

npm install
npm start          # the TypeScript sources over stdio, no build
npm test
npm run lint
npm run typecheck
npm run build      # build/ for the npm package

Shared helpers and the CI steps come from infra-mcp-kit, formatting and lint rules from infra-site-kit.

License

MIT

Available Tools

3 tools
fetch_videoFetch a Veo video by operationA

Wait for an already started Veo operation and save its video. Use it when generate_video failed after the render had started: its error names the operation. Costs nothing extra.

NameRequiredDescriptionDefault
filenameNoBase filename without extension
operationYesOperation name from the error, models/.../operations/...
outputDirNoSave directory, default ./veo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description carries meaningful behavioral weight: it discloses that the call blocks/waits on an in-flight operation, that it writes a video to disk, and that it incurs no additional cost. It does not cover failure modes — what happens if the operation already failed, is still pending past a timeout, or if the target file exists — which is the main remaining gap for a long-running write tool.

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?

Three short sentences, zero waste: purpose first, then the routing condition, then the cost reassurance. Front-loaded and easy to scan.

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?

For a 3-parameter tool with full schema coverage and no output schema, the description covers purpose, trigger, and cost adequately. It is slightly thin on what the agent gets back (saved file location/name) and on error behavior, but nothing blocks a correct invocation.

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 coverage is 100%, so filename, operation, and outputDir are already fully documented in the schema. The description only reinforces where the operation string originates, adding no new semantics for the save path or filename parameters. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource: wait on an already started Veo operation and save its video. It also distinguishes itself from the sibling generate_video by positioning itself as the recovery path for a failed render.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger condition — "use it when generate_video failed after the render had started" — and tells the agent where the required operation value comes from (its error). This implicitly excludes fresh generation, so the agent can route correctly without opening either schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_videoGenerate a video with VeoA

Generate a video from a text prompt with Google Veo, optionally starting from an image (image-to-video) and ending on another one. Paid per second of video and takes 1-5 minutes, so ask before generating several variants. Saves an MP4 to disk and returns its path.

NameRequiredDescriptionDefault
seedNo
imageNoPath to the first frame: png, jpg or webp
modelNoVeo model id, default veo-3.1-generate-preview. See list_models
promptYesWhat happens in the video, including camera and sound
filenameNoBase filename without extension
lastFrameNoPath to the last frame. Requires image
outputDirNoSave directory, default ./veo
resolutionNoDefault 720p
aspectRatioNoDefault 16:9
negativePromptNoWhat must not appear
durationSecondsNoDefault 8. 1080p and 4k need 8

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does it well: it discloses the cost model (per second), latency (1-5 minutes), and the filesystem side effect plus return value ('saves an MP4 to disk and returns its path'). It omits other traits an agent might want, such as whether output is deterministic given a seed or whether partial failures leave files behind.

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?

Three sentences, no filler. The capability and its input modes come first, then the cost/latency caution, then the output side effect — front-loaded in descending order of decision value.

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?

For an 11-parameter generation tool with no annotations and no output schema, the description covers the essentials an agent needs to decide and call correctly: what it produces, what it costs, how long it takes, and what it returns. Remaining gaps (auth/permission needs, idempotency, failure behavior) are secondary for this tool type.

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 91%, so nearly every parameter is already documented in the schema, including the image/first-frame and lastFrame/requires-image relationship. The description's 'optionally starting from an image ... and ending on another one' restates the schema rather than adding new meaning. Baseline 3 is correct when the schema does the heavy lifting.

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 ('Generate a video from a text prompt with Google Veo') and enumerates the two input modes (text-to-video, image-to-video with an optional last frame). An agent knows exactly what capability this exposes. It does not name the sibling list_models, which is referenced only in the schema, so sibling differentiation is implied 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational context: paid per second of video, 1-5 minute latency, and an explicit instruction to 'ask before generating several variants'. That is real when-to-be-careful guidance. It stops short of naming alternatives or a when-not-to-use condition (e.g. reusing an existing file), so it is clear context rather than full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsList Veo modelsA

List Veo model ids available to this API key.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, but the tool is a trivial zero-param read. It does add one real behavioral fact — results are scoped to what the API key can access — but omits anything about ordering, count, or read-only nature.

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 word contributes scope or resource 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?

For a zero-param lister with no output schema, the description tells the agent what comes back (model ids) and under what scope (API key). Minor gap: no indication of ordering or what the ids are used for.

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, so there is nothing for the description to disambiguate; the baseline of 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?

States a specific verb and resource ('List Veo model ids') and scopes it to 'available to this API key'. It is clearly distinct from the only sibling, generate_video, though it doesn't explicitly name that sibling.

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 discovery call for model ids, presumably before generate_video. There is no explicit 'use this when...' or reference to the alternative tool.

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. 1 tool updatev0.3.3
    • Addedfetch_video
  2. 2 tool updatesv0.1.0
    • First observedgenerate_video
    • First observedlist_models

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct role: list_models discovers model ids, generate_video starts a paid render, and fetch_video recovers an already-started operation. The descriptions explicitly distinguish starting a new render from fetching an existing one.

Naming Consistency5/5

All three tools follow a consistent snake_case verb_noun pattern: list_models, generate_video, fetch_video. There is no mixing of conventions or vague standalone verbs.

Tool Count5/5

Three tools is a tight, well-scoped surface for a video-generation server: discovery, generation, and recovery are each covered without redundancy. No tool feels extraneous.

Completeness4/5

The core workflow is covered: list available models, generate text/image-to-video, and fetch a video from a started operation. Minor gaps exist around operation management, such as checking status without fetching or cancelling a render, but these are not critical for the stated use case.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers