visualgen-mcp
visualgen-mcp is an MCP server that enables AI assistants like Claude Code to generate images and short videos using Google's Gemini API (Imagen 4 and Veo 3.1), saving results directly to a local project directory.
Generate Images (
generate_image): Create PNG images synchronously (~10s) using Gemini 2.5 Flash Image (nano-banana) or Imagen 4. Supports multiple aspect ratios and optional negative prompts (Imagen 4 only).Submit Video Jobs (
submit_video): Kick off asynchronous Veo 3.1 video generation with configurable model tiers (lite/fast/standard), aspect ratios, resolutions (720p–4K), negative prompts, and an optional starting image for image-to-video generation.Poll Video Status (
check_video): Check job status byjob_id; returns pending (with elapsed time), completed (with local file path and duration), or failed (with error). Automatically downloads the MP4 when ready.List Assets (
list_videos/list_images): View generated MP4s or PNGs in the output directory, sorted newest first, with paths, sizes, and timestamps.Get Pricing (
get_pricing): Retrieve current Gemini API rates (per-image and per-second) for all supported models to estimate costs before generation. Claude Code automatically prompts for confirmation on expensive operations (e.g., Veo standard, image-to-video).Configurable: Customize default model tiers, aspect ratios, output directories, and per-project overrides.
Integrates with Google's Gemini API to generate images using Imagen 4 and videos using Veo 3.1, providing AI-powered visual content creation capabilities.
Click on "Install 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., "@visualgen-mcpgenerate a hero image of a futuristic city skyline at dusk"
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.
visualgen-mcp
An MCP server that lets Claude Code generate images and short videos via Google's Gemini API (Imagen 4 for stills, Veo 3.1 for video).
Why this exists
I was building websites with Claude Code and kept hitting the same gap. Claude would design a great layout, then say "add your hero image here." I'd go generate one somewhere else, come back, wire it up, iterate, repeat. The context switching was the whole cost. So I built this MCP server to close the loop. Claude writes the prompt, the server hits Veo or Imagen, the file lands in the project directory, and Claude references it in the code it's already writing. One session, no handoffs.
I'm open-sourcing it because other people are solving the same problem, and nobody should have to build this twice.
Related MCP server: Gemini Image & Video Generation MCP
Demo
Claude Code generating visuals with visualgen-mcp and wiring them into the page.
https://github.com/user-attachments/assets/34d25755-cd4c-47b0-a0cb-056b9ed8b783
What it does
Six tools, exposed over stdio:
submit_video(prompt, model, aspect_ratio, resolution, negative_prompt?, image_path?)— submit a Veo 3.1 job. Returns ajob_idinstantly.check_video(job_id)— poll a job. When the video is ready, the server downloads it and returns the path.list_videos()— list MP4s in the output directory, newest first.generate_image(prompt, model, aspect_ratio, negative_prompt?)— synchronous image generation (typically under 10s). Returns the PNG path.list_images()— list PNGs in the output directory.get_pricing()— return current Gemini rates so Claude can warn you before expensive runs.
What it costs
Gemini API rates as of 2026-04-22. Verify at the official pricing page before production use.
Model | Cost |
Veo 3.1 Standard (720p / 1080p) | $0.40 / second |
Veo 3.1 Standard (4k) | $0.60 / second |
Veo 3.1 Fast (720p) | $0.10 / second |
Veo 3.1 Fast (1080p) | $0.12 / second |
Veo 3.1 Fast (4k) | $0.30 / second |
Veo 3.1 Lite (720p) | $0.05 / second |
Veo 3.1 Lite (1080p) | $0.08 / second |
Imagen 4 Fast | $0.02 / image |
Imagen 4 Standard | $0.04 / image |
Imagen 4 Ultra | $0.06 / image |
Gemini 2.5 Flash Image (Nano Banana) | $0.039 / image |
Install
For end users:
uvx visualgen-mcpFor contributors (from source):
git clone https://github.com/1RaghavM/visualgen-mcp.git
cd visualgen-mcp
uv sync
uv run python -m visualgen_mcpConfigure
Run the interactive setup once. It saves your profile to ~/.config/visualgen-mcp/config.toml (chmod 600) and optionally wires up .mcp.json in the current project directory.
uvx visualgen-mcp initYou'll be prompted for:
Gemini API key — get one at aistudio.google.com/apikey. Veo requires a paid plan; Imagen and Nano Banana work on the free tier but with stricter rate limits.
Output directory — where generated PNGs and MP4s land. Defaults to
~/visualgen-output. The server creates it if it doesn't exist, and tool responses return absolute paths so Claude can reference the files in the code it writes.Default video tier, image model, and aspect ratios — used when Claude calls a tool without specifying these.
Re-run visualgen-mcp init any time to update the profile. Per-project overrides still work: a GEMINI_API_KEY or OUTPUT_DIR set in a local .env file or in .mcp.json's env block takes precedence over the profile.
Use with Claude Code
Either run visualgen-mcp init inside your project (it offers to write this for you), or add this to .mcp.json at the root of your project:
{
"mcpServers": {
"visualgen": {
"command": "uvx",
"args": ["visualgen-mcp"]
}
}
}The server reads your API key and defaults from ~/.config/visualgen-mcp/config.toml. If you want to override them for a specific project, set GEMINI_API_KEY or OUTPUT_DIR in .mcp.json's env block — env vars take precedence over the profile.
Run /mcp inside Claude Code to confirm the server is connected. You should see visualgen listed with six tools.
The /visualgen skill
The server ships with a Claude Code skill that teaches Claude when to use each tool, how to structure prompts for common web-design asks, and when to confirm costs with you. If you ran visualgen-mcp init, it already offered to install it. Otherwise:
cd your-project
cp -r /path/to/visualgen-mcp/.claude/skills/visualgen ./.claude/skills/visualgenOnce installed, /visualgen hero video, modern SaaS landing, calm mood kicks off the whole pipeline in one shot — Claude picks the template, builds the prompt, submits the job, and wires the returned file into your code. You can also just ask for visuals in natural language — the skill auto-loads whenever Claude is about to call a visualgen-mcp tool.
The skill is opinionated about cost: Veo standard and any image-to-video call always ask you to confirm before spending. Everything else — all image generation plus Veo lite/fast text-to-video — proceeds silently.
Use with other MCP clients
Claude Desktop uses the same pattern. Add an entry under mcpServers in ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Any stdio-transport MCP client that supports tool calls works. There is no HTTP or auth layer — the server is intended for local use.
Example session
A real run from a landing-page project. Elided lines marked ....
> Build me a hero video loop for the top of the page. Something that suggests "city at night, calm, slow."
I'll generate that with the visualgen server.
submit_video(
prompt="A slow drone shot over a city skyline at night, warm window lights,
occasional headlights tracing streets below, calm mood, cinematic",
model="fast",
aspect_ratio="16:9",
resolution="1080p"
)
→ { "job_id": "f3c1...", "status": "submitted", "model": "veo-3.1-fast-generate-preview",
"estimated_seconds": 60 }
I'll check back in a minute.
check_video("f3c1...")
→ { "status": "pending", "elapsed_seconds": 25 }
... wait ...
check_video("f3c1...")
→ { "status": "complete",
"path": "/Users/.../landing/generated/veo-fast-20260422T191203Z.mp4",
"duration_seconds": 8.0 }
Writing it into the hero section:
Edit: src/components/Hero.tsx
<video
autoPlay
muted
loop
playsInline
className="absolute inset-0 h-full w-full object-cover"
src="/generated/veo-fast-20260422T191203Z.mp4"
/>One prompt, one generation, file in the project, code updated.
Tool reference
submit_video
Param | Type | Default | Notes |
|
| (required) | Video description. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Text describing what to avoid. |
|
|
| Absolute path to a PNG/JPEG/WebP starting frame. |
Returns {"job_id": str, "status": "submitted", "model": str, "estimated_seconds": int}.
check_video
Param | Type | Default |
|
| (required) |
Returns one of:
{"status": "pending", "elapsed_seconds": int}{"status": "complete", "path": str, "duration_seconds": float}{"status": "failed", "error": str}
list_videos
No parameters. Returns list[{"path": str, "size_bytes": int, "created_at": str}], newest first.
generate_image
Param | Type | Default | Notes |
|
| (required) | Image description. |
|
|
|
|
|
|
|
|
|
|
| Ignored by Nano Banana. |
Returns {"path": str, "model_used": str}.
list_images
No parameters. Returns list[{"path": str, "size_bytes": int, "created_at": str}], newest first.
get_pricing
No parameters. Returns a dict of current rates per model, a last_updated date, and a link to the source. Hardcoded — the server does not call an API for this.
Limits and gotchas
Veo clips are capped at 8 seconds. This server always requests 8 seconds.
There is no free tier for Veo. Every successful generation is billed.
Generated videos are deleted from Google's servers 48 hours after generation. Download them (via
check_video) within that window.The job store is in-memory. If you restart the server, pending jobs are lost. See the TODO in
src/visualgen_mcp/jobs.pyfor the SQLite migration path.Some prompts are rejected by Google's content filters. You get
{"status": "failed", ...}back, not a crash.Nano Banana (
gemini-2.5-flash-image) is faster and cheaper than Imagen 4 but does not accept anegative_prompt. Use Imagen 4 when you need one.list_videosandlist_imagesonly see files inOUTPUT_DIR. They do not recurse or cross directories.
Contributing
See CONTRIBUTING.md.
License
MIT. See LICENSE.
Available Tools
6 toolscheck_videoA
Check a video generation job. Downloads the file when ready.
Returns one of three shapes:
{"status": "pending", "elapsed_seconds": int}
{"status": "complete", "path": str, "duration_seconds": float}
{"status": "failed", "error": str}
Safe to call repeatedly. Once a job is complete or failed, subsequent calls return the cached terminal state without re-polling.
Args: job_id: The id returned by submit_video.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and excels. It reveals key traits: polling behavior ('Downloads the file when ready'), idempotency ('Safe to call repeatedly'), caching ('returns the cached terminal state'), and the three possible return shapes with their semantics. This goes well beyond basic parameter documentation.
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?
The description is perfectly structured and concise. It front-loads the core purpose, then details return shapes, behavioral notes, and parameters in logical order. Every sentence earns its place with essential information, and there is no wasted verbiage.
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?
Given the tool's complexity (stateful job monitoring), lack of annotations, and presence of an output schema (which covers return values), the description is complete. It explains the tool's role in a workflow, behavioral guarantees, parameter semantics, and output interpretation, leaving no significant gaps for an AI agent.
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 schema description coverage is 0%, so the description must compensate. It adds crucial semantic context for the single parameter: 'job_id: The id returned by submit_video' clarifies the parameter's origin and relationship to another tool. However, it doesn't specify format constraints (e.g., UUID, string length) that might be in an unannotated schema.
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 clearly states the tool's purpose with specific verbs ('Check', 'Downloads') and resource ('video generation job'), distinguishing it from siblings like 'submit_video' (which creates jobs) and 'list_videos' (which lists existing videos). It explicitly describes the monitoring and file retrieval functionality.
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?
The description provides explicit guidance on when to use this tool: 'Check a video generation job' implies it's for monitoring jobs created by 'submit_video'. It also specifies 'Safe to call repeatedly' and explains terminal state behavior, giving clear operational context without misleading exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageA
Generate an image synchronously. Blocks until the file is on disk.
Typical latency is under 10 seconds. The PNG is written to the configured OUTPUT_DIR and the absolute path is returned.
Args: prompt: Text description of the image to generate. model: "nano-banana" (Gemini 2.5 Flash Image, the default — cheapest and fastest) or "imagen" (Imagen 4, higher quality, higher cost). aspect_ratio: "1:1", "16:9", "9:16", "4:3", or "3:4". negative_prompt: Optional text describing what to avoid. Ignored by Nano Banana; used by Imagen 4 when supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| model | No | nano-banana | |
| aspect_ratio | No | 16:9 | |
| negative_prompt | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: synchronous operation ('Blocks until the file is on disk'), typical latency ('under 10 seconds'), file handling ('PNG is written to OUTPUT_DIR'), and return value ('absolute path is returned'). It also notes model-specific behavior differences (e.g., negative_prompt ignored by Nano Banana). However, it lacks details on error handling or rate limits.
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?
The description is appropriately sized and front-loaded: the first sentence states the core purpose and key behavioral trait (synchronous blocking). Subsequent sentences efficiently cover latency, output details, and parameter explanations in a structured format with bullet-like clarity. Every sentence adds value without redundancy.
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?
Given the complexity (image generation with multiple parameters), no annotations, and the presence of an output schema (which handles return value documentation), the description is complete enough. It covers purpose, behavior, parameters, and output location, leaving the output schema to detail the return structure. No critical gaps remain for agent understanding.
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 0%, so the description must fully compensate. It provides comprehensive parameter semantics: 'prompt' as the text description, 'model' with two options and cost/quality trade-offs, 'aspect_ratio' with five specific options, and 'negative_prompt' with optional usage and model-specific behavior. This adds significant meaning beyond the bare schema, fully documenting all four parameters.
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 clearly states the tool's purpose: 'Generate an image synchronously' with specific details about the output format (PNG) and location (OUTPUT_DIR). It distinguishes from sibling tools like 'list_images' (which retrieves existing images) and 'submit_video' (which handles video generation), making the verb+resource combination specific and differentiated.
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?
The description provides clear context for when to use this tool: for synchronous image generation with latency under 10 seconds. It distinguishes from alternatives by specifying the output format (PNG) and location (OUTPUT_DIR), but does not explicitly state when NOT to use it or compare it to other image-related tools beyond the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingA
Return current published Gemini API pricing for the models this server uses.
Rates are per-image for images and per-second for video. Pricing is
hardcoded from the official docs (see the source field) and may drift;
always verify before expensive operations.
| 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?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it returns 'current published' pricing, notes that rates vary by media type (images vs. video), mentions the data source ('hardcoded from the official docs'), and warns about potential drift and the need for verification. This covers most behavioral aspects for a read-only pricing 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?
The description is front-loaded with the core purpose in the first sentence, followed by supporting details. Every sentence earns its place by clarifying pricing units, data source, and reliability warnings. It is appropriately sized with no wasted words.
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?
Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is complete. It covers purpose, usage context, behavioral details like data source and limitations, and output semantics. The presence of an output schema means the description doesn't need to explain return values, so this is sufficient.
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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description adds value by explaining the semantics of the returned pricing data (e.g., 'per-image for images and per-second for video'), which goes beyond the schema. A baseline of 4 is appropriate for zero-parameter tools with high schema coverage.
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 clearly states the tool's purpose: 'Return current published Gemini API pricing for the models this server uses.' It specifies the verb ('Return'), resource ('Gemini API pricing'), and scope ('models this server uses'), distinguishing it from sibling tools like generate_image or submit_video that perform different operations.
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?
The description provides clear context for when to use this tool: to get pricing information for API operations. It implies usage before 'expensive operations' but does not explicitly state when not to use it or name alternatives among sibling tools, which would be needed for a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imagesA
List every PNG file in the configured OUTPUT_DIR, newest first.
Each entry has absolute path, size in bytes, and creation timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it lists files from a specific directory (OUTPUT_DIR), sorts them (newest first), and describes the return format (absolute path, size, creation timestamp). It doesn't mention permissions, rate limits, or error conditions, but covers the core behavior adequately.
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?
The description is perfectly concise with two sentences that each earn their place. The first sentence states the core action and scope, while the second provides essential output details. No wasted words, well-structured and front-loaded.
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?
Given the tool's simplicity (0 parameters, no annotations, but has output schema), the description is complete enough. It explains what the tool does, how results are sorted, and what data each entry contains. The output schema will handle return value details, so the description doesn't need to explain return values further.
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 has 0 parameters with 100% schema description coverage, so the baseline is 4. The description doesn't need to add parameter information, and it appropriately focuses on the tool's behavior rather than parameters.
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 clearly states the tool's purpose with specific verbs ('List every PNG file') and resources ('in the configured OUTPUT_DIR'), including sorting order ('newest first'). It distinguishes from sibling tools like 'list_videos' by specifying PNG files rather than videos.
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?
The description provides clear context for when to use this tool (listing PNG files in OUTPUT_DIR), but doesn't explicitly state when not to use it or name alternatives. It implies usage for PNG files specifically, which helps differentiate from 'list_videos' for video files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_videosA
List every MP4 file in the configured OUTPUT_DIR, newest first.
Each entry has absolute path, size in bytes, and creation timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it lists files 'newest first', specifies the exact fields in each entry (path, size, timestamp), and mentions the configured OUTPUT_DIR as the source. It lacks details on permissions or error handling, but covers core behavior adequately.
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?
The description is perfectly concise and front-loaded: the first sentence states the core purpose and key details (MP4 files, OUTPUT_DIR, ordering), and the second sentence adds essential output structure. Every sentence earns its place with zero waste.
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?
Given the tool's low complexity (0 parameters, simple list operation), no annotations, and the presence of an output schema (which handles return values), the description is complete enough. It covers purpose, behavior, and output fields, leaving no significant gaps for this context.
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 has 0 parameters with 100% schema description coverage, so the baseline is 4. The description adds no parameter information, which is appropriate since there are no parameters to document, maintaining clarity without redundancy.
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 clearly states the specific action ('List every MP4 file') and resource ('in the configured OUTPUT_DIR'), with explicit scope details. It distinguishes from sibling tools like 'list_images' by specifying MP4 files only, not images.
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?
The description provides clear context about when to use this tool (to list MP4 files in OUTPUT_DIR), but does not explicitly state when not to use it or name alternatives like 'list_images' for non-MP4 files or 'check_video' for individual video inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_videoA
Submit a Veo 3.1 video generation job. Returns immediately with a job_id.
Videos typically take 30-120 seconds. Call check_video(job_id) to poll for completion. The final MP4 is written to the configured OUTPUT_DIR and its absolute path is returned by check_video once ready.
Args: prompt: Text description of the video to generate. model: "lite" (cheapest), "fast" (default, good balance), or "standard" (highest quality, most expensive). See get_pricing for rates. aspect_ratio: "16:9" (landscape) or "9:16" (portrait). resolution: "720p", "1080p", or "4k". "4k" is rejected for model="lite". negative_prompt: Optional text describing what to avoid. image_path: Optional absolute path to a PNG/JPEG/WebP file to use as the starting frame for image-to-video generation.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| model | No | fast | |
| aspect_ratio | No | 16:9 | |
| resolution | No | 720p | |
| negative_prompt | No | ||
| image_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the asynchronous nature (returns immediately with job_id), typical processing time (30-120 seconds), polling mechanism (call check_video), output location (written to OUTPUT_DIR), and format (MP4). This covers execution flow, timing, and output handling beyond basic functionality.
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?
The description is appropriately sized and well-structured: it starts with the core purpose and immediate return, then explains the asynchronous workflow, and finally details each parameter in a clear Args section. Every sentence adds value without redundancy, making it efficient and easy to parse.
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?
Given the complexity of an asynchronous video generation tool with 6 parameters, no annotations, and an output schema (implied by 'Returns immediately with a job_id'), the description is complete. It covers the tool's purpose, behavioral workflow, parameter semantics, and integration with sibling tools, providing all necessary context for an agent to use it correctly.
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 0%, so the description must fully compensate. It provides detailed semantic explanations for all 6 parameters: purpose of prompt, model options with cost/quality trade-offs, aspect ratio meanings, resolution options with constraints (4k rejected for lite), optional negative_prompt usage, and image_path for image-to-video. This adds substantial meaning beyond the bare schema.
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 clearly states the specific action ('Submit a Veo 3.1 video generation job') and resource ('video'), distinguishing it from siblings like check_video (polling), generate_image (image creation), and list_videos (listing). It uses precise verbs and identifies the exact resource being created.
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?
The description provides clear context for when to use this tool (to start a video generation job) and explicitly mentions check_video as the follow-up for polling completion. However, it doesn't explicitly state when NOT to use it or compare it to alternatives like generate_image for image generation, leaving some sibling differentiation implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with no ambiguity. check_video monitors video jobs, generate_image creates images, get_pricing provides cost information, list_images and list_videos enumerate outputs, and submit_video initiates video generation. The separation between image and video operations is particularly clear.
All tools follow a consistent verb_noun pattern with snake_case throughout. The naming is predictable and readable: check_video, generate_image, get_pricing, list_images, list_videos, and submit_video. This consistency makes the tool set easy to understand at a glance.
Six tools is well-scoped for a visual generation server. This provides complete coverage for both image and video workflows without being overwhelming. Each tool earns its place by addressing a specific need in the generation, monitoring, listing, or pricing aspects of the service.
The tool set covers the core visual generation domain comprehensively with create, check, and list operations for both images and videos, plus pricing information. The only minor gap is the lack of a tool to delete or manage generated files, but agents can work around this using system file operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Google Veo AI video generation
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
MCP server for Qwen Image 3 AI image generation
MCP server for Grok Imagine AI video generation
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that brings Google Gemini's image generation and editing capabilities to Claude Desktop, Claude Code, and Cursor. It supports 2K image creation, natural language image transformations, and session consistency to maintain styles across generations.71,171MIT
- FlicenseBqualityDmaintenanceA production-ready MCP server that enables Claude and other LLMs to generate images and videos using Google's Gemini AI models (Gemini 2.0 Flash and Veo 2.0).32
- AlicenseAqualityDmaintenanceAn MCP server that provides access to Google Gemini models via Vertex AI, enabling text generation, multi-turn chat, image/video generation, and frontend design through Claude Code.21MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that uses Google's Gemini API to analyze videos and convert them to text descriptions that Claude Code can understand and act upon.51MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/1RaghavM/visualgen-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server