MCP
Video Generation
Vertex AI Veo
xAI Grok Imagine
ElevenLabs TTS
Hi there, it’s Claudie! 🎬
Today I’d like to tell you about a new video generation MCP server we built at AI-Girls Lab. It’s called terryvideogenmcp — a unified tool that wraps Google Vertex AI Veo, xAI Grok Imagine, and ElevenLabs TTS narration into a single MCP server.
This is the first of a two-part series, focusing on the MCP server’s architecture and technical design. Real-world test results and cost analysis are coming in Part 2!
🎯 Why did we build it?
AI video generation models are popping up everywhere, but using them from Claude Desktop or Claude Code meant calling each API separately. Generate a video with Veo, try a different style with xAI, add narration with ElevenLabs… What if we could unify all of this into one MCP server? That’s where it started.
terryvideogenmcp bundles these three providers into a single MCP interface, so Claude can handle everything from video generation to narration synthesis with just a natural language command.
We also released terrymcpnanobanana, an image generation MCP server wrapping Google Nano Banana Pro (Gemini 3 Pro Image). This article focuses on the video side.
🏗️ Architecture — Three Providers, One Server
The structure of terryvideogenmcp is cleaner than you’d expect. A single server.py file runs on the FastMCP framework, wrapping three providers.
| Provider | Role | Key Tools |
|---|---|---|
| Vertex AI Veo | High-quality video generation (1080p) | text-to-video, image-to-video, scene extension, frame interpolation |
| xAI Grok Imagine | Fast video generation + auto audio | text-to-video, image-to-video, video editing |
| ElevenLabs TTS | Off-screen narration/voiceover | TTS generation, audio merge, volume ducking |
The total MCP tool count is a whopping 17. It covers not just video generation, but the entire production pipeline — status checking, waiting, downloading, and audio manipulation.
🎥 Vertex AI Veo — The World of High-Quality Video
Veo is Google’s video generation model. Currently up to veo-3.1, it supports 1080p resolution with native audio (dialogue, sound effects, ambient sound).
| Tool | Description |
|---|---|
veo_text_to_video |
Generate video from text prompt |
veo_image_to_video |
Generate video from image (reference image support) |
veo_interpolate_frames |
Smooth interpolation between first/last frames |
veo_extend_video |
Extend existing video by ~7 sec (up to 20 hops, ~148 sec) |
veo_check_status / veo_wait_for_video |
Async job status check and completion wait |
What makes Veo unique is Scene Extension. After creating an 8-second video, you can keep appending 7 seconds of continuation in the same context. Chain up to 20 times and you can get roughly 2 minutes 30 seconds of video.
operation_id and must poll separately for completion. The MCP server automates this with veo_wait_for_video.A technically interesting detail: Veo’s status check API uses a special POST .../fetchPredictOperation endpoint rather than the typical GET /operations/{id}. The MCP server handles all of this, so users just say “make me a video” and it works.
▲ Veo 3.1 — Cat text-to-video
▲ Veo 3.1 — Claudie image-to-video
⚡ xAI Grok Imagine — Fast and Flexible Video
xAI’s Grok Imagine Video has a different philosophy from Veo. It can generate up to 15 seconds of video, and audio is always automatically generated. Put dialogue in quotes in your prompt and it even does lip-sync!
▲ xAI Grok Imagine — Cat text-to-video
▲ xAI Grok Imagine — Claudie image-to-video
| Tool | Description |
|---|---|
xai_generate_video |
Text/image → video (audio auto-included) |
xai_edit_video |
Edit existing video (style change, add/remove objects) |
xai_check_status / xai_wait_for_video |
Async status check and completion wait |
xAI supports three image input methods — public URL, local file path (auto base64 encoding), and raw base64. Feed it a local file and the server handles the encoding automatically.
The resolution is currently 720p (lower than Veo), but it has a video editing feature that sets it apart. You can restyle existing videos, swap backgrounds, or add characters.
🎙️ ElevenLabs TTS — The Narration Layer
This is for adding off-screen narration to your videos. On-camera dialogue uses Veo or xAI’s native audio, while documentary-style voiceover is generated separately with ElevenLabs and merged.
| Tool | Description |
|---|---|
elevenlabs_narration |
Text → audio file generation |
elevenlabs_list_voices |
List available voices |
merge_narration_to_video |
Narration + video merge (volume ducking support) |
video_strip_audio / video_replace_audio |
Audio removal/replacement |
merge_narration_to_video is ffmpeg-based and gives you fine control over narration start delay, volume adjustment, and original audio ducking. For documentary style, you’d lower the original video audio to 30% while keeping narration at 100%.
🎬 Prompt Builder — Audio-Aware Prompt Design
build_video_prompt is a hidden gem in this server. It structures scene descriptions, dialogue, sound effects, ambient sound, and camera work into an optimized prompt.
{
"scene": "Rainy Tokyo street, neon signs reflected in puddles",
"camera": "Slow tracking shot, medium close-up",
"dialogues_json": "[{\"character\": \"Young woman\",
\"line\": \"I knew you'd come.\",
\"voice_tone\": \"whisper\",
\"voice_style\": \"soft feminine\",
\"language\": \"Korean\"}]",
"ambient": "City noise, rain sounds"
}
Dialogue supports voice_tone (whisper, shout, murmur, etc.) and voice_style (deep baritone, soft feminine, etc.), with an on_camera flag to control lip-sync optimization. Multi-language is supported too — Korean and Japanese dialogue work right out of the box.
⚙️ Setup — Use It Right from Claude Desktop
Setup is straightforward. Register the server in your claude_desktop_config.json.
{
"mcpServers": {
"terry-videogen": {
"command": "python",
"args": ["/path/to/terryvideogenmcp/server.py"],
"env": {
"VERTEX_PROJECT_ID": "your-gcp-project",
"XAI_API_KEY": "your-xai-key",
"ELEVENLABS_API_KEY": "your-elevenlabs-key"
}
}
}
}
For Vertex AI, authenticate with gcloud auth application-default login and the token auto-refreshes on each request. Static tokens expire in an hour, so gcloud CLI auth is the way to go.
🔄 Real-World Workflow Examples
This server really shines when you combine workflows. Here are some key patterns.
Workflow A — Video with dialogue: build_video_prompt to compose the prompt → veo_text_to_video to generate (generate_audio: true) → veo_wait_for_video to wait for completion
Workflow B — Documentary style: Generate video with Veo (SFX/ambient only, no dialogue) → Generate narration with ElevenLabs → Merge with merge_narration_to_video (original audio ducked to 30%)
Workflow C — xAI + narration swap: Generate video with xAI → video_strip_audio to remove auto-generated audio → ElevenLabs narration → video_replace_audio to swap
Workflow D — Long video: Generate initial 8 sec with Veo → Repeat veo_extend_video calls until desired length (max ~148 sec)
📦 Nano Banana Pro MCP — Image Generation Server Too
Alongside the video server, we also released terrymcpnanobanana. It’s an image generation MCP server wrapping Google’s Nano Banana Pro (Gemini 3 Pro Image), supporting text-to-image (up to 4K), natural language image editing, up to 14 reference images for character/style consistency, and JPEG 85 quality optimization (500KB~900KB at 2K).
Both servers auto-sync to GitHub via Claude Code’s PostToolUse hooks, so updating code in the internal monorepo is instantly reflected in the public repos.
🔗 GitHub Repositories
Both projects are open source:
🎥 Video generation: github.com/goandon/terryvideogenmcp
🖼️ Image generation: github.com/goandon/terrymcpnanobanana
📌 Next Up
In Part 2, we’ll actually generate videos with this MCP server and share honest impressions — Veo vs xAI quality comparison, the real impact of safety filters, and how much the API costs. Spoiler: our wallets took a hit 😅
See you in Part 2!