MCP Veo 3 Azure Blob Video Generator
Provides video generation capabilities using Google's Veo 3 models through the Gemini API, enabling text-to-video and image-to-video creation with automatic cloud storage.
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., "@MCP Veo 3 Azure Blob Video GeneratorCreate a video of a sunset over the ocean with waves crashing"
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.
MCP Veo 3 Azure Blob Video Generator
A powerful Model Context Protocol (MCP) server that provides professional video generation capabilities using Google's state-of-the-art Veo 3 API through the Gemini API, with seamless Azure Blob Storage integration. Generate high-quality 8-second videos with native audio from text prompts or images, and automatically store them in the cloud.
โจ Key Features
๐ฌ Text-to-Video Generation: Create videos from descriptive text prompts
๐ผ๏ธ Image-to-Video Animation: Animate static images with motion prompts
๐ Local Files: Support for local image files (JPG, PNG, GIF, WebP, BMP)
๐ Online URLs: Direct support for online image URLs
๐ต Native Audio: Automatic audio generation with Veo 3 models
๐จ Multiple Models: Veo 3, Veo 3 Fast, and Veo 2 support
โก Real-time Progress: Live progress tracking with detailed status updates
โ๏ธ Azure Integration: Automatic upload to Azure Blob Storage
๐ Cloud URLs: Instant access to cloud-hosted videos
๐๏ธ Cloud Management: Complete Azure Blob Storage management tools
๐ก๏ธ Robust Error Handling: Comprehensive error handling and recovery
โฑ๏ธ Extended Timeout: 45-minute timeout for complex video generation
Related MCP server: Sora2 MCP
Supported Models
Model | Description | Speed | Quality | Audio |
| Latest Veo 3 with highest quality | Slower | Highest | โ |
| Optimized for speed and business use | Faster | High | โ |
| Previous generation model | Medium | Good | โ |
๐ Quick Start
Option 1: Install from PyPI (Recommended)
# Install the package
pip install mcp-veo3-azure-blob
# Set up environment variables
export GEMINI_API_KEY='your_gemini_api_key_here'
export AZURE_STORAGE_CONNECTION_STRING='your_azure_connection_string_here'Option 2: Development Setup
# Clone the repository
git clone https://github.com/ctoicqtao/mcp-veo3-azure-blob
cd mcp-veo3-azure-blob
# Install dependencies
pip install -r requirements.txt
# Set up environment
cp env_example.txt .env
# Edit .env file with your API keys๐ API Keys Setup
1. Get Gemini API Key
Visit Google AI Studio
Create a new API key
Copy the key for configuration
2. Set up Azure Blob Storage
Go to Azure Portal
Create a Storage Account
Get the connection string from "Access keys"
Create a container for videos (optional - will be auto-created)
Configuration
Environment Variables
Create a .env file with the following variables:
# Required
GEMINI_API_KEY=your_gemini_api_key_here
# Azure Blob Storage (Required for cloud upload)
AZURE_STORAGE_CONNECTION_STRING=your_azure_storage_connection_string_here
AZURE_BLOB_CONTAINER_NAME=generated-videos
AZURE_UPLOAD_ENABLED=true
# 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=600MCP Client Configuration
Add this to your MCP client configuration file:
{
"mcpServers": {
"veo3-azure-blob": {
"command": "python",
"args": ["mcp_veo3_azure_blob.py", "--output-dir", "~/Videos/Generated"],
"env": {
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"AZURE_STORAGE_CONNECTION_STRING": "${AZURE_STORAGE_CONNECTION_STRING}",
"AZURE_BLOB_CONTAINER_NAME": "${AZURE_BLOB_CONTAINER_NAME:-generated-videos}",
"AZURE_UPLOAD_ENABLED": "${AZURE_UPLOAD_ENABLED:-true}"
}
}
}
}CLI Arguments:
--output-dir(required): Directory to save generated videos locally--api-key(optional): Gemini API key (overrides environment variable)
๐ ๏ธ Available MCP Tools
1. generate_video
Generate a video from a text prompt with automatic Azure upload.
Parameters:
prompt(required): Detailed text description of the videomodel(optional): Model to use (default:veo-3.0-generate-preview)
Example:
{
"prompt": "A cinematic drone shot of a red sports car driving through winding mountain roads at golden hour, with dramatic shadows and warm sunlight filtering through pine trees",
"model": "veo-3.0-generate-preview"
}Returns:
{
"video_path": "/path/to/veo3_video_20250919_151806.mp4",
"filename": "veo3_video_20250919_151806.mp4",
"azure_video_url": "https://yourstorageaccount.blob.core.windows.net/generated-videos/veo3_video_20250919_151806.mp4",
"file_size": 15728640,
"generation_time": 127.5,
"azure_upload_success": true
}2. generate_video_from_image
Animate a static image with motion prompts. Supports both local files and online URLs.
Parameters:
prompt(required): Description of the desired motion/animationimage_path(required): Local file path OR online image URLmodel(optional): Model to use (default:veo-3.0-generate-preview)
Supported Image Formats:
Local files: JPG, PNG, GIF, WebP, BMP, TIFF
Online URLs: Direct image URLs from any accessible server
Example with local file:
{
"prompt": "็ๆไธๆฎต่ฟไธช่ฟๅจๅ่ฟๅจ็่ง้ข๏ผๅจ่ทๆญฅๅงใ",
"image_path": "./images/athlete.jpg",
"model": "veo-3.0-generate-preview"
}Example with online URL:
{
"prompt": "The flowers in the garden gently sway in a warm breeze",
"image_path": "https://example.com/images/garden.jpg",
"model": "veo-3.0-fast-generate-preview"
}3. list_generated_videos
List all locally generated videos.
Parameters:
output_dir(optional): Directory to scan (default: configured output directory)
Returns: Array of video files with metadata
4. get_video_info
Get detailed information about a specific video file.
Parameters:
video_path(required): Path to the video file
Returns: Video metadata including size, duration, and creation time
5. upload_video_to_azure
Manually upload a video to Azure Blob Storage.
Parameters:
video_path(required): Path to video file (relative to output directory)blob_name(optional): Custom blob name (defaults to filename)
Example:
{
"video_path": "veo3_video_20250919_151806.mp4",
"blob_name": "my_awesome_video.mp4"
}6. list_azure_blob_videos
List all videos stored in Azure Blob Storage.
Parameters: None
Returns:
{
"videos": [
{
"name": "veo3_video_20250919_151806.mp4",
"url": "https://storage.blob.core.windows.net/container/video.mp4",
"size": 15728640,
"last_modified": "2025-09-19T15:18:06Z"
}
],
"total_count": 1,
"total_size": 15728640
}7. delete_azure_blob_video
Delete a video from Azure Blob Storage.
Parameters:
blob_name(required): Name of the blob to delete
Example:
{
"blob_name": "old_video.mp4"
}๐ก Usage Examples
Text-to-Video Generation
# Generate a cinematic video
result = await mcp_client.call_tool("generate_video", {
"prompt": "A majestic eagle soaring over snow-capped mountains at sunrise, cinematic wide shot with golden lighting",
"model": "veo-3.0-generate-preview"
})
# Result includes local path and Azure URL
print(f"Video saved locally: {result['video_path']}")
print(f"Azure URL: {result['azure_video_url']}")Image-to-Video Animation
# Animate a local image
result = await mcp_client.call_tool("generate_video_from_image", {
"prompt": "The person starts walking forward with confident steps",
"image_path": "./portrait.jpg",
"model": "veo-3.0-generate-preview"
})
# Animate from online URL
result = await mcp_client.call_tool("generate_video_from_image", {
"prompt": "็ๆไธๆฎต่ฟไธช่ฟๅจๅ่ฟๅจ็่ง้ข๏ผๅจ่ทๆญฅๅงใ",
"image_path": "https://example.com/athlete.jpg",
"model": "veo-3.0-fast-generate-preview"
})Azure Blob Management
# List all cloud videos
videos = await mcp_client.call_tool("list_azure_blob_videos", {})
print(f"Found {videos['total_count']} videos in cloud storage")
# Upload a specific video
upload_result = await mcp_client.call_tool("upload_video_to_azure", {
"video_path": "special_video.mp4",
"blob_name": "presentation_video.mp4"
})
# Clean up old videos
await mcp_client.call_tool("delete_azure_blob_video", {
"blob_name": "old_video.mp4"
})๐จ Prompt Writing Guide
Best Practices
Be descriptive: Include lighting, mood, camera angles, and atmosphere
Specify motion: Describe the exact type of movement or action
Set the scene: Include environmental details and context
Choose style: Mention cinematic, realistic, animated, artistic styles
Use active language: Focus on what IS happening, not what isn't
Effective Prompt Examples
Cinematic Shots:
A sweeping drone shot of a lone figure walking across a vast desert at sunset, dramatic golden lighting casting long shadows, cinematic wide-angle perspectiveNature Scenes:
A gentle waterfall cascading over moss-covered rocks in a serene forest, with dappled sunlight filtering through green leaves and creating dancing light patternsUrban Environments:
A bustling city street at night with neon lights reflecting on wet pavement, people walking with umbrellas, rain creating atmospheric mood lightingCharacter Animation:
A person in a cozy cafรฉ slowly turning pages of a book while steam rises from their coffee cup, warm ambient lighting creating a peaceful atmosphereโก Technical Specifications
Video Output
Duration: 8 seconds per video
Resolution: 720p (1280x720) or 1080p (1920x1080)
Audio: Native audio generation with Veo 3 models
Format: MP4 with H.264 encoding
Watermark: SynthID digital watermark included
Performance
Generation Time: 30 seconds to 10 minutes (depending on complexity)
Timeout: 45 minutes maximum (3x extended from default)
Concurrent Requests: Handled asynchronously
Progress Tracking: Real-time status updates
Storage
Local: Videos saved to specified output directory
Cloud: Automatic upload to Azure Blob Storage
Retention: Google servers store videos for 2 days
Azure: Permanent storage with configurable retention policies
๐จ Troubleshooting
Common Issues
API Key Problems
# Set environment variable
export GEMINI_API_KEY='your_api_key_here'
# Or add to .env file
echo "GEMINI_API_KEY=your_api_key_here" >> .env
# Verify key is set
echo $GEMINI_API_KEYAzure Connection Issues
# Check connection string format
echo $AZURE_STORAGE_CONNECTION_STRING
# Test Azure connectivity
python -c "from azure.storage.blob import BlobServiceClient; print('Azure SDK working')"
# Verify container exists in Azure PortalVideo Generation Timeouts
Use
veo-3.0-fast-generate-previewfor faster generationCurrent timeout is 45 minutes (3x extended)
Check network connectivity
Monitor progress logs for status updates
Image Format Issues
Supported formats: JPG, PNG, GIF, WebP, BMP, TIFF
Online URLs must be directly accessible
Check image file size (recommended < 10MB)
Verify MIME type detection in logs
Permission Errors
# Ensure output directory is writable
mkdir -p ~/Videos/Generated
chmod 755 ~/Videos/Generated
# Check file permissions
ls -la ~/Videos/GeneratedError Recovery
The server includes comprehensive error handling:
Auto-retry: Network failures are automatically retried
Graceful fallback: Azure upload failures don't stop video generation
Detailed logging: All operations are logged with request IDs
Progress tracking: Real-time status updates during generation
Cleanup: Temporary files are automatically cleaned up
Validation: Input validation prevents common errors
๐ง Development
Testing
# Test basic functionality
python test_direct_call.py
# Test Azure Blob Storage
python test_azure_blob.py
# Test image URL functionality
python test_url_image.pyBuilding and Publishing
# Build the package
uv build
# Publish to PyPI
uv publish๐ค Contributing
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Make your changes
Test thoroughly
Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
๐ Resources
PyPI Package: https://pypi.org/project/mcp-veo3-azure-blob/
GitHub Repository: https://github.com/ctoicqtao/mcp-veo3-azure-blob
MCP Documentation: https://modelcontextprotocol.io/
Google Veo 3 API: https://ai.google.dev/gemini-api/docs/video
Azure Blob Storage: https://docs.microsoft.com/en-us/azure/storage/blobs/
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Support
API Key Setup: Get your Gemini API key
Azure Setup: Azure Blob Storage Documentation
Issues: Report bugs and feature requests in GitHub Issues
Discussions: Join the conversation in GitHub Discussions
๐ Changelog
v1.0.18 (Current)
โฑ๏ธ Extended Timeout: Increased default timeout to 45 minutes (3x original) for complex video generation
๐ก๏ธ Enhanced Error Handling: Improved error recovery and retry mechanisms
๐ Better Progress Tracking: More detailed progress updates during generation
v1.0.17
๐ง API Format Fix: Fixed Google Gemini API image format issues
๐ฅ Download Fix: Corrected video download method for proper file saving
๐ฏ Image Processing: Enhanced image handling with proper MIME type detection
v1.0.16
๐ผ๏ธ Image Format Support: Fixed image-to-video generation with correct API format
๐ URL Image Support: Enhanced support for online image URLs
๐ Improved Retry Logic: Better handling of network failures
v1.0.15
โ๏ธ Azure Blob Storage Integration: Complete Azure cloud storage integration
๐ Cloud URLs: Direct access to cloud-hosted videos
๐๏ธ Cloud Management Tools: Full suite of Azure Blob Storage management tools
๐ฑ Progress Tracking: Real-time progress updates with detailed status
๐ก๏ธ Error Recovery: Comprehensive error handling and graceful fallbacks
v1.0.0 - v1.0.14
Initial releases with core video generation functionality
Text-to-video and image-to-video generation
FastMCP framework integration
Basic file management utilities
๐ Built with FastMCP | ๐ Python 3.10+ | ๐ MIT License | โ๏ธ Azure Powered
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/ctoicqtao/mcp-veo3-azure-blob'
If you have feedback or need assistance with the MCP directory API, please join our Discord server