Skip to main content
Glama

MCP Veo 3 Video Generation Server

by dayongd1
README.md10.3 kB
# 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 ```bash # 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) ```bash # No installation needed - run directly with uvx uvx mcp-veo3 --output-dir ~/Videos/Generated ``` ### Option 2: Development Setup 1. **Clone this directory**: ```bash git clone https://github.com/dayongd1/mcp-veo3 cd mcp-veo3 ``` 2. **Install with uv**: ```bash uv sync ``` Or use the automated setup: ```bash python setup.py ``` 3. **Set up API key**: - Get your Gemini API key from [Google AI Studio](https://makersuite.google.com/app/apikey) - 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: ```bash # 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) ```json { "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) ```json { "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 ```json { "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:** ```json { "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:** ```json { "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 ```python # 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 ```python 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 ```python 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"** ```bash # 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"** ```bash # Ensure the output directory exists and is writable mkdir -p ~/Videos/Generated chmod 755 ~/Videos/Generated ``` **"Video generation timeout"** ```bash # Try using the fast model for testing uvx mcp-veo3 --output-dir ~/Videos # Then use: model="veo-3.0-fast-generate-preview" ``` **"Import errors"** ```bash # 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 ```bash # Install test dependencies pip install pytest pytest-asyncio # Run tests pytest tests/ ``` ### Code Formatting ```bash # 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 - **PyPI**: https://pypi.org/project/mcp-veo3/ - **GitHub**: https://github.com/dayongd1/mcp-veo3 - **MCP Docs**: https://modelcontextprotocol.io/ - **Veo 3 API**: https://ai.google.dev/gemini-api/docs/video ## License This project is licensed under the MIT License - see the LICENSE file for details. ## Support - **Documentation**: [Google Veo 3 API Docs](https://ai.google.dev/gemini-api/docs/video) - **API Key**: [Get your Gemini API key](https://makersuite.google.com/app/apikey) - **Issues**: Report bugs and feature requests in the GitHub issues ## Changelog ### v1.0.1 - **🔧 API Fix**: Updated to match official Veo 3 API specification - **Removed unsupported parameters**: aspect_ratio, negative_prompt, person_generation - **Simplified API calls**: Now using only model and prompt parameters as per official docs - **Fixed video generation errors**: Resolved "unexpected keyword argument" issues - **Updated documentation**: Added notes about current API limitations ### 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**

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/dayongd1/mcp-veo3'

If you have feedback or need assistance with the MCP directory API, please join our Discord server