veo-mcp
Generate and retrieve Google Veo videos through an MCP client, with MP4 files saved locally.
Generate videos from text prompts, optionally using an image as the first frame and another as the last frame.
Control generation with negative prompts, seeds, aspect ratio (
16:9/9:16), duration (4/6/8seconds), resolution (720p/1080p/4k), model, filename, and output directory.Wait for renders while sending MCP progress notifications, then return the saved MP4 path.
Fetch and save an already-running Veo operation by its operation name, avoiding duplicate cost after a failed
generate_videocall.List Veo model IDs available to the configured Gemini API key.
Generates videos with Google Veo through the Gemini REST API, supporting text-to-video and image-to-video (first frame/last frame) renders with options for aspect ratio, duration, resolution, seed, and model, polling the render until completion and saving the resulting MP4 to disk. Also lists the Veo models available to an API key.
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., "@veo-mcpgenerate an 8 second 16:9 video of a snowy mountain peak at sunrise"
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.
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_videostarts a render, waits for it and saves the MP4. Takes apromptand, optionally:image, the first frame (png, jpg, webp), andlastFrame, which needsimage;negativePrompt,seed;aspectRatio:16:9(default) or9:16;durationSeconds: 4, 6 or 8 (default);1080pand4kneed 8;resolution:720p(default),1080por4k;model(veo-3.1-generate-previewby 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_videowaits for a render that is already running and saves it by its operation name. Whengenerate_videofails after the render started, its error names the operation:fetch_videopicks it up without paying twice.list_modelslists 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, required | |
|
| Where videos are saved |
|
| How often to poll the render |
|
| When to give up on a render |
|
|
|
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 packageShared helpers and the CI steps come from infra-mcp-kit, formatting and lint rules from infra-site-kit.
License
Available Tools
3 toolsfetch_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.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | Base filename without extension | |
| operation | Yes | Operation name from the error, models/.../operations/... | |
| outputDir | No | Save directory, default ./veo |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| image | No | Path to the first frame: png, jpg or webp | |
| model | No | Veo model id, default veo-3.1-generate-preview. See list_models | |
| prompt | Yes | What happens in the video, including camera and sound | |
| filename | No | Base filename without extension | |
| lastFrame | No | Path to the last frame. Requires image | |
| outputDir | No | Save directory, default ./veo | |
| resolution | No | Default 720p | |
| aspectRatio | No | Default 16:9 | |
| negativePrompt | No | What must not appear | |
| durationSeconds | No | Default 8. 1080p and 4k need 8 |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.3.3- Added
fetch_video
2 tool updates
v0.1.0- First observed
generate_video - First observed
list_models
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
Plan, compare, price, generate, and recover AI video from compatible MCP clients.
Generate AI video from any MCP client. Pick the model, see the per-second price before you spend.
Generate AI images and videos from any compatible MCP client.
MCP server for Google Veo AI video generation
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server that exposes Google's Veo2 video generation capabilities, allowing clients to generate videos from text prompts or images.734MIT
- AlicenseAqualityDmaintenanceProvides access to Vidu's video generation models for creating high-quality videos from text, images, and reference content. It enables users to generate creative video content directly within MCP-compatible applications like Claude and Cursor.55MIT

PixVerse MCPofficial
AlicenseNot gradedqualityFmaintenanceEnables video generation from text, images, and more through MCP-compatible apps like Claude and Cursor.54MIT- AlicenseNot gradedqualityCmaintenanceExposes video generation and editing tools to MCP-capable clients, enabling text-to-video, image-to-video, video editing, reusable voice and character profiles, and task status queries through natural language.4MIT