Skip to main content

MCP Veo 3 Video Generator - A Model Context Protocol server for Veo 3 video generation

Project description

MCP Veo 3 Video Generation Server

A Model Context Protocol (MCP) server that provides video generation capabilities using Google's Veo 3 API through the Gemini API. Generate high-quality videos from text prompts or images with realistic motion and audio.

Features

  • 🎬 Text-to-Video: Generate videos from descriptive text prompts
  • 🖼️ Image-to-Video: Animate static images with motion prompts
  • 🎵 Audio Generation: Native audio generation with Veo 3 models
  • 🎨 Multiple Models: Support for Veo 3, Veo 3 Fast, and Veo 2
  • 📐 Aspect Ratios: Widescreen (16:9) and portrait (9:16) support
  • Negative Prompts: Specify what to avoid in generated videos
  • 📁 File Management: List and manage generated videos
  • Async Processing: Non-blocking video generation with progress tracking

Supported Models

Model Description Speed Quality Audio
veo-3.0-generate-preview Latest Veo 3 with highest quality Slower Highest
veo-3.0-fast-generate-preview Optimized for speed and business use Faster High
veo-2.0-generate-001 Previous generation model Medium Good

📦 Installation Options

# Run without installing (recommended)
uvx mcp-veo3 --output-dir ~/Videos/Generated

# Install globally
pip install mcp-veo3

# Development install
git clone && cd mcp-veo3 && uv sync

Installation

Option 1: Direct Usage (Recommended)

# No installation needed - run directly with uvx
uvx mcp-veo3 --output-dir ~/Videos/Generated

Option 2: Development Setup

  1. Clone this directory:

    git clone https://github.com/dayongd1/mcp-veo3
    cd mcp-veo3
    
  2. Install with uv:

    uv sync
    

    Or use the automated setup:

    python setup.py
    
  3. Set up API key:

    • Get your Gemini API key from Google AI Studio
    • Create .env file: cp env_example.txt .env
    • Edit .env and add your GEMINI_API_KEY
    • Or set environment variable: export GEMINI_API_KEY='your_key'

Configuration

Environment Variables

Create a .env file with the following variables:

# Required
GEMINI_API_KEY=your_gemini_api_key_here

# Optional
DEFAULT_OUTPUT_DIR=generated_videos
DEFAULT_MODEL=veo-3.0-generate-preview
DEFAULT_ASPECT_RATIO=16:9
PERSON_GENERATION=dont_allow
POLL_INTERVAL=10
MAX_POLL_TIME=600

MCP Client Configuration

Option 1: Using uvx (Recommended - after PyPI publication)

{
  "mcpServers": {
    "veo3": {
      "command": "uvx",
      "args": ["mcp-veo3", "--output-dir", "~/Videos/Generated"],
      "env": {
        "GEMINI_API_KEY": "your_api_key_here"
      }
    }
  }
}

Option 2: Using uv run (Development)

{
  "mcpServers": {
    "veo3": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-veo3", "mcp-veo3", "--output-dir", "~/Videos/Generated"],
      "env": {
        "GEMINI_API_KEY": "your_api_key_here"
      }
    }
  }
}

Option 3: Direct Python

{
  "mcpServers": {
    "veo3": {
      "command": "python",
      "args": ["/path/to/mcp-veo3/mcp_veo3.py", "--output-dir", "~/Videos/Generated"],
      "env": {
        "GEMINI_API_KEY": "your_api_key_here"
      }
    }
  }
}

CLI Arguments:

  • --output-dir (required): Directory to save generated videos
  • --api-key (optional): Gemini API key (overrides environment variable)

Available Tools

1. generate_video

Generate a video from a text prompt.

Parameters:

  • prompt (required): Text description of the video
  • model (optional): Model to use (default: veo-3.0-generate-preview)
  • negative_prompt (optional): What to avoid in the video
  • aspect_ratio (optional): 16:9 or 9:16 (default: 16:9)
  • output_dir (optional): Directory to save videos (default: generated_videos)

Example:

{
  "prompt": "A close up of two people staring at a cryptic drawing on a wall, torchlight flickering. A man murmurs, 'This must be it. That's the secret code.' The woman looks at him and whispering excitedly, 'What did you find?'",
  "model": "veo-3.0-generate-preview",
  "aspect_ratio": "16:9"
}

2. generate_video_from_image

Generate a video from a starting image and motion prompt.

Parameters:

  • prompt (required): Text description of the desired motion/action
  • image_path (required): Path to the starting image file
  • model (optional): Model to use (default: veo-3.0-generate-preview)
  • negative_prompt (optional): What to avoid in the video
  • aspect_ratio (optional): 16:9 or 9:16 (default: 16:9)
  • output_dir (optional): Directory to save videos (default: generated_videos)

Example:

{
  "prompt": "The person in the image starts walking forward with a confident stride",
  "image_path": "./images/person_standing.jpg",
  "model": "veo-3.0-generate-preview"
}

3. list_generated_videos

List all generated videos in the output directory.

Parameters:

  • output_dir (optional): Directory to list videos from (default: generated_videos)

4. get_video_info

Get detailed information about a video file.

Parameters:

  • video_path (required): Path to the video file

Usage Examples

Basic Text-to-Video Generation

# Through MCP client
result = await mcp_client.call_tool("generate_video", {
    "prompt": "A majestic waterfall in a lush forest with sunlight filtering through the trees",
    "model": "veo-3.0-generate-preview"
})

Image-to-Video with Negative Prompt

result = await mcp_client.call_tool("generate_video_from_image", {
    "prompt": "The ocean waves gently crash against the shore",
    "image_path": "./beach_scene.jpg",
    "negative_prompt": "people, buildings, artificial structures",
    "aspect_ratio": "16:9"
})

Creative Animation

result = await mcp_client.call_tool("generate_video", {
    "prompt": "A stylized animation of a paper airplane flying through a colorful abstract landscape",
    "model": "veo-3.0-fast-generate-preview",
    "aspect_ratio": "16:9"
})

Prompt Writing Tips

Effective Prompts

  • Be specific: Include details about lighting, mood, camera angles
  • Describe motion: Specify the type of movement you want
  • Set the scene: Include environment and atmospheric details
  • Mention style: Cinematic, realistic, animated, etc.

Example Prompts

Cinematic Realism:

A tracking drone view of a red convertible driving through Palm Springs in the 1970s, warm golden hour sunlight, long shadows, cinematic camera movement

Creative Animation:

A stylized animation of a large oak tree with leaves blowing vigorously in strong wind, peaceful countryside setting, warm lighting

Dialogue Scene:

Close-up of two people having an intense conversation in a dimly lit room, dramatic lighting, one person gesturing emphatically while speaking

Negative Prompts

Describe what you don't want to see:

  • ❌ Don't use "no" or "don't": "no cars"
  • ✅ Do describe unwanted elements: "cars, vehicles, traffic"

Limitations

  • Generation Time: 11 seconds to 6 minutes depending on complexity
  • Video Length: 8 seconds maximum
  • Resolution: 720p output
  • Storage: Videos are stored on Google's servers for 2 days only
  • Regional Restrictions: Person generation defaults to "dont_allow" in EU/UK/CH/MENA
  • Watermarking: All videos include SynthID watermarks

🚨 Troubleshooting

"API key not found"

# Set your Gemini API key
export GEMINI_API_KEY='your_api_key_here'
# Or add to .env file
echo "GEMINI_API_KEY=your_api_key_here" >> .env

"Output directory not accessible"

# Ensure the output directory exists and is writable
mkdir -p ~/Videos/Generated
chmod 755 ~/Videos/Generated

"Video generation timeout"

# Try using the fast model for testing
uvx mcp-veo3 --output-dir ~/Videos
# Then use: model="veo-3.0-fast-generate-preview"

"Import errors"

# Install/update dependencies
uv sync
# Or with pip
pip install -r requirements.txt

Error Handling

The server handles common errors gracefully:

  • Invalid API Key: Clear error message with setup instructions
  • File Not Found: Validation for image paths in image-to-video
  • Generation Timeout: Configurable timeout with progress updates
  • Model Errors: Fallback error handling with detailed messages

Development

Running Tests

# Install test dependencies
pip install pytest pytest-asyncio

# Run tests
pytest tests/

Code Formatting

# Format code
black mcp_veo3.py

# Check linting
flake8 mcp_veo3.py

# Type checking
mypy mcp_veo3.py

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests if applicable
  5. Submit a pull request

📚 Links

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

Changelog

v1.0.0

  • Initial release
  • Support for Veo 3, Veo 3 Fast, and Veo 2 models
  • Text-to-video and image-to-video generation
  • FastMCP framework with progress tracking
  • Comprehensive error handling and logging
  • File management utilities
  • uv/uvx support for easy installation

Built with FastMCP | Python 3.10+ | MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_veo3-1.0.0.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_veo3-1.0.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file mcp_veo3-1.0.0.tar.gz.

File metadata

  • Download URL: mcp_veo3-1.0.0.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for mcp_veo3-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f9cfd2bed1472f816d21ab29c1c8f3bd56a7811c20b417f0042569acf35cc634
MD5 fd3fb3286e9e855a277a1432ae7c19c3
BLAKE2b-256 3ea3767547b3a2be70fcc7665f0f1467e5e3132a43a3ed508dca7b2f3aee30b4

See more details on using hashes here.

File details

Details for the file mcp_veo3-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: mcp_veo3-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.18

File hashes

Hashes for mcp_veo3-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dfb0c88aa26e98c37a53b951d0a00541a34274869fc85902d3c25c3384cf2e50
MD5 98d8764393494bb0509ddaf7d299e4d1
BLAKE2b-256 c768cbe310f8c473cad2df8cbcde328943a0bd00a41f8bb06cf234e6f1904d9a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page