mcp-veo3-azure-blob


Namemcp-veo3-azure-blob JSON
Version 1.0.17 PyPI version JSON
download
home_pageNone
SummaryMCP Veo 3 Video Generator - A Model Context Protocol server for Veo 3 video generation and Azure Blob Upload
upload_time2025-09-19 07:18:59
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords ai fastmcp gemini generation google mcp model-context-protocol veo video
VCS
bugtrack_url
requirements fastmcp google-genai pydantic python-dotenv azure-storage-blob Pillow requests aiohttp pytest pytest-asyncio black flake8 mypy
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # MCP Veo 3 Video Generation Server with Azure Blob Storage

A Model Context Protocol (MCP) server that provides video generation capabilities using Google's Veo 3 API through the Gemini API, with automatic upload to Azure Blob Storage. Generate high-quality videos from text prompts or images with realistic motion and audio, and store them securely in the cloud.

## Features

- ๐ŸŽฌ **Text-to-Video**: Generate videos from descriptive text prompts
- ๐Ÿ–ผ๏ธ **Image-to-Video**: Animate static images with motion prompts (supports local files and online URLs)
- ๐ŸŽต **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
- โ˜๏ธ **Azure Blob Storage**: Automatic upload to Azure Blob Storage
- ๐Ÿ”— **Cloud URLs**: Get direct URLs to your videos in the cloud
- ๐Ÿ—‚๏ธ **Cloud Management**: List, upload, and delete videos in Azure Blob Storage

## 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 keys and Azure**:
   - Get your Gemini API key from [Google AI Studio](https://makersuite.google.com/app/apikey)
   - Get your Azure Storage connection string from [Azure Portal](https://portal.azure.com)
   - Create `.env` file: `cp env_example.txt .env`
   - Edit `.env` and add your `GEMINI_API_KEY` and `AZURE_STORAGE_CONNECTION_STRING`
   - Or set environment variables:
     ```bash
     export GEMINI_API_KEY='your_gemini_key'
     export AZURE_STORAGE_CONNECTION_STRING='your_azure_connection_string'
     ```

## Configuration

### Environment Variables

Create a `.env` file with the following variables:

```bash
# 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=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. Supports both local image files and online image URLs.

**Parameters:**
- `prompt` (required): Text description of the desired motion/action
- `image_path` (required): Path to local image file OR URL to online image
- `model` (optional): Model to use (default: veo-3.0-generate-preview)

**Supported Image Sources:**
- **Local files**: `./images/photo.jpg`, `/absolute/path/image.png`
- **Online URLs**: `https://example.com/image.jpg`, `http://site.com/photo.png`

**Example with local file:**
```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"
}
```

**Example with online URL:**
```json
{
  "prompt": "The cat in the image starts playing with a ball of yarn",
  "image_path": "https://example.com/images/cat_sitting.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

### 5. upload_video_to_azure

Upload a video file to Azure Blob Storage.

**Parameters:**
- `video_path` (required): Path to the video file (can be relative to output directory)
- `blob_name` (optional): Custom blob name (defaults to filename)

**Example:**
```json
{
  "video_path": "veo3_video_20241218_230000.mp4",
  "blob_name": "my_custom_video_name.mp4"
}
```

### 6. list_azure_blob_videos

List all videos in Azure Blob Storage container.

**Parameters:** None

**Returns:** List of videos with URLs, sizes, and metadata

### 7. delete_azure_blob_video

Delete a video from Azure Blob Storage.

**Parameters:**
- `blob_name` (required): Name of the blob to delete

**Example:**
```json
{
  "blob_name": "veo3_video_20241218_230000.mp4"
}
```

## 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 Local File

```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",
    "model": "veo-3.0-generate-preview"
})
```

### Image-to-Video with Online URL

```python
result = await mcp_client.call_tool("generate_video_from_image", {
    "prompt": "The flowers in the garden sway gently in the breeze",
    "image_path": "https://example.com/images/garden_flowers.jpg",
    "model": "veo-3.0-generate-preview"
})
```

### 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"
})
```

### Azure Blob Storage Management

```python
# List videos in Azure Blob Storage
blob_videos = await mcp_client.call_tool("list_azure_blob_videos", {})

# Upload a specific video to Azure
upload_result = await mcp_client.call_tool("upload_video_to_azure", {
    "video_path": "my_video.mp4",
    "blob_name": "custom_name.mp4"
})

# Delete a video from Azure Blob Storage
delete_result = await mcp_client.call_tool("delete_azure_blob_video", {
    "blob_name": "old_video.mp4"
})
```

## 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
```

**"Azure upload failed"**
```bash
# Check your Azure connection string
echo $AZURE_STORAGE_CONNECTION_STRING

# Test Azure connection
python test_azure_blob.py

# Verify container permissions in Azure Portal
```

**"Azure Storage SDK not available"**
```bash
# Install Azure Storage SDK
pip install azure-storage-blob>=12.19.0
```

## 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
- **Azure Connection Errors**: Graceful fallback when Azure is not configured
- **Azure Upload Failures**: Detailed error messages with troubleshooting hints
- **Container Creation**: Automatic container creation if it doesn't exist

## Development

### Running Tests

```bash
# Install test dependencies
pip install pytest pytest-asyncio

# Run tests
pytest tests/

# Test Azure Blob Storage functionality
python test_azure_blob.py
```

### 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.2 (Current)
- **โ˜๏ธ Azure Blob Storage Integration**: Automatic upload of generated videos to Azure Blob Storage
- **๐Ÿ”— Cloud URLs**: Get direct URLs to videos stored in Azure Blob Storage
- **๐Ÿ—‚๏ธ Cloud Management**: New MCP tools for managing videos in Azure Blob Storage
  - `upload_video_to_azure`: Upload videos to Azure Blob Storage
  - `list_azure_blob_videos`: List all videos in Azure container
  - `delete_azure_blob_video`: Delete videos from Azure Blob Storage
- **โš™๏ธ Enhanced Configuration**: Added Azure-specific environment variables
- **๐Ÿงช Test Suite**: Added comprehensive Azure Blob Storage testing script
- **๐Ÿ“š Updated Documentation**: Complete Azure setup and usage guide

### 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**

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "mcp-veo3-azure-blob",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "Tom Chen <ctoicqtao@gmail.com>",
    "keywords": "ai, fastmcp, gemini, generation, google, mcp, model-context-protocol, veo, video",
    "author": null,
    "author_email": "Tom Chen <ctoicqtao@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/6e/f1/7cd2997da7f717a33a5866f2869bbb42f0a283d7a5e3fa241150a7f71c45/mcp_veo3_azure_blob-1.0.17.tar.gz",
    "platform": null,
    "description": "# MCP Veo 3 Video Generation Server with Azure Blob Storage\n\nA Model Context Protocol (MCP) server that provides video generation capabilities using Google's Veo 3 API through the Gemini API, with automatic upload to Azure Blob Storage. Generate high-quality videos from text prompts or images with realistic motion and audio, and store them securely in the cloud.\n\n## Features\n\n- \ud83c\udfac **Text-to-Video**: Generate videos from descriptive text prompts\n- \ud83d\uddbc\ufe0f **Image-to-Video**: Animate static images with motion prompts (supports local files and online URLs)\n- \ud83c\udfb5 **Audio Generation**: Native audio generation with Veo 3 models\n- \ud83c\udfa8 **Multiple Models**: Support for Veo 3, Veo 3 Fast, and Veo 2\n- \ud83d\udcd0 **Aspect Ratios**: Widescreen (16:9) and portrait (9:16) support\n- \u274c **Negative Prompts**: Specify what to avoid in generated videos\n- \ud83d\udcc1 **File Management**: List and manage generated videos\n- \u26a1 **Async Processing**: Non-blocking video generation with progress tracking\n- \u2601\ufe0f **Azure Blob Storage**: Automatic upload to Azure Blob Storage\n- \ud83d\udd17 **Cloud URLs**: Get direct URLs to your videos in the cloud\n- \ud83d\uddc2\ufe0f **Cloud Management**: List, upload, and delete videos in Azure Blob Storage\n\n## Supported Models\n\n| Model | Description | Speed | Quality | Audio |\n|-------|-------------|-------|---------|-------|\n| `veo-3.0-generate-preview` | Latest Veo 3 with highest quality | Slower | Highest | \u2705 |\n| `veo-3.0-fast-generate-preview` | Optimized for speed and business use | Faster | High | \u2705 |\n| `veo-2.0-generate-001` | Previous generation model | Medium | Good | \u274c |\n\n## \ud83d\udce6 Installation Options\n\n```bash\n# Run without installing (recommended)\nuvx mcp-veo3 --output-dir ~/Videos/Generated\n\n# Install globally\npip install mcp-veo3\n\n# Development install\ngit clone && cd mcp-veo3 && uv sync\n```\n\n## Installation\n\n### Option 1: Direct Usage (Recommended)\n```bash\n# No installation needed - run directly with uvx\nuvx mcp-veo3 --output-dir ~/Videos/Generated\n```\n\n### Option 2: Development Setup\n1. **Clone this directory**:\n   ```bash\n   git clone https://github.com/dayongd1/mcp-veo3\n   cd mcp-veo3\n   ```\n\n2. **Install with uv**:\n   ```bash\n   uv sync\n   ```\n   \n   Or use the automated setup:\n   ```bash\n   python setup.py\n   ```\n\n3. **Set up API keys and Azure**:\n   - Get your Gemini API key from [Google AI Studio](https://makersuite.google.com/app/apikey)\n   - Get your Azure Storage connection string from [Azure Portal](https://portal.azure.com)\n   - Create `.env` file: `cp env_example.txt .env`\n   - Edit `.env` and add your `GEMINI_API_KEY` and `AZURE_STORAGE_CONNECTION_STRING`\n   - Or set environment variables:\n     ```bash\n     export GEMINI_API_KEY='your_gemini_key'\n     export AZURE_STORAGE_CONNECTION_STRING='your_azure_connection_string'\n     ```\n\n## Configuration\n\n### Environment Variables\n\nCreate a `.env` file with the following variables:\n\n```bash\n# Required\nGEMINI_API_KEY=your_gemini_api_key_here\n\n# Azure Blob Storage (Required for cloud upload)\nAZURE_STORAGE_CONNECTION_STRING=your_azure_storage_connection_string_here\nAZURE_BLOB_CONTAINER_NAME=generated-videos\nAZURE_UPLOAD_ENABLED=true\n\n# Optional\nDEFAULT_OUTPUT_DIR=generated_videos\nDEFAULT_MODEL=veo-3.0-generate-preview\nDEFAULT_ASPECT_RATIO=16:9\nPERSON_GENERATION=dont_allow\nPOLL_INTERVAL=10\nMAX_POLL_TIME=600\n```\n\n### MCP Client Configuration\n\n#### Option 1: Using uvx (Recommended - after PyPI publication)\n```json\n{\n  \"mcpServers\": {\n    \"veo3\": {\n      \"command\": \"uvx\",\n      \"args\": [\"mcp-veo3\", \"--output-dir\", \"~/Videos/Generated\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n#### Option 2: Using uv run (Development)\n```json\n{\n  \"mcpServers\": {\n    \"veo3\": {\n      \"command\": \"uv\",\n      \"args\": [\"run\", \"--directory\", \"/path/to/mcp-veo3\", \"mcp-veo3\", \"--output-dir\", \"~/Videos/Generated\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n#### Option 3: Direct Python\n```json\n{\n  \"mcpServers\": {\n    \"veo3\": {\n      \"command\": \"python\",\n      \"args\": [\"/path/to/mcp-veo3/mcp_veo3.py\", \"--output-dir\", \"~/Videos/Generated\"],\n      \"env\": {\n        \"GEMINI_API_KEY\": \"your_api_key_here\"\n      }\n    }\n  }\n}\n```\n\n**CLI Arguments:**\n- `--output-dir` (required): Directory to save generated videos\n- `--api-key` (optional): Gemini API key (overrides environment variable)\n\n## Available Tools\n\n### 1. generate_video\n\nGenerate a video from a text prompt.\n\n**Parameters:**\n- `prompt` (required): Text description of the video\n- `model` (optional): Model to use (default: veo-3.0-generate-preview)\n- `negative_prompt` (optional): What to avoid in the video\n- `aspect_ratio` (optional): 16:9 or 9:16 (default: 16:9)\n- `output_dir` (optional): Directory to save videos (default: generated_videos)\n\n**Example:**\n```json\n{\n  \"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?'\",\n  \"model\": \"veo-3.0-generate-preview\",\n  \"aspect_ratio\": \"16:9\"\n}\n```\n\n### 2. generate_video_from_image\n\nGenerate a video from a starting image and motion prompt. Supports both local image files and online image URLs.\n\n**Parameters:**\n- `prompt` (required): Text description of the desired motion/action\n- `image_path` (required): Path to local image file OR URL to online image\n- `model` (optional): Model to use (default: veo-3.0-generate-preview)\n\n**Supported Image Sources:**\n- **Local files**: `./images/photo.jpg`, `/absolute/path/image.png`\n- **Online URLs**: `https://example.com/image.jpg`, `http://site.com/photo.png`\n\n**Example with local file:**\n```json\n{\n  \"prompt\": \"The person in the image starts walking forward with a confident stride\",\n  \"image_path\": \"./images/person_standing.jpg\",\n  \"model\": \"veo-3.0-generate-preview\"\n}\n```\n\n**Example with online URL:**\n```json\n{\n  \"prompt\": \"The cat in the image starts playing with a ball of yarn\",\n  \"image_path\": \"https://example.com/images/cat_sitting.jpg\",\n  \"model\": \"veo-3.0-generate-preview\"\n}\n```\n\n### 3. list_generated_videos\n\nList all generated videos in the output directory.\n\n**Parameters:**\n- `output_dir` (optional): Directory to list videos from (default: generated_videos)\n\n### 4. get_video_info\n\nGet detailed information about a video file.\n\n**Parameters:**\n- `video_path` (required): Path to the video file\n\n### 5. upload_video_to_azure\n\nUpload a video file to Azure Blob Storage.\n\n**Parameters:**\n- `video_path` (required): Path to the video file (can be relative to output directory)\n- `blob_name` (optional): Custom blob name (defaults to filename)\n\n**Example:**\n```json\n{\n  \"video_path\": \"veo3_video_20241218_230000.mp4\",\n  \"blob_name\": \"my_custom_video_name.mp4\"\n}\n```\n\n### 6. list_azure_blob_videos\n\nList all videos in Azure Blob Storage container.\n\n**Parameters:** None\n\n**Returns:** List of videos with URLs, sizes, and metadata\n\n### 7. delete_azure_blob_video\n\nDelete a video from Azure Blob Storage.\n\n**Parameters:**\n- `blob_name` (required): Name of the blob to delete\n\n**Example:**\n```json\n{\n  \"blob_name\": \"veo3_video_20241218_230000.mp4\"\n}\n```\n\n## Usage Examples\n\n### Basic Text-to-Video Generation\n\n```python\n# Through MCP client\nresult = await mcp_client.call_tool(\"generate_video\", {\n    \"prompt\": \"A majestic waterfall in a lush forest with sunlight filtering through the trees\",\n    \"model\": \"veo-3.0-generate-preview\"\n})\n```\n\n### Image-to-Video with Local File\n\n```python\nresult = await mcp_client.call_tool(\"generate_video_from_image\", {\n    \"prompt\": \"The ocean waves gently crash against the shore\",\n    \"image_path\": \"./beach_scene.jpg\",\n    \"model\": \"veo-3.0-generate-preview\"\n})\n```\n\n### Image-to-Video with Online URL\n\n```python\nresult = await mcp_client.call_tool(\"generate_video_from_image\", {\n    \"prompt\": \"The flowers in the garden sway gently in the breeze\",\n    \"image_path\": \"https://example.com/images/garden_flowers.jpg\",\n    \"model\": \"veo-3.0-generate-preview\"\n})\n```\n\n### Creative Animation\n\n```python\nresult = await mcp_client.call_tool(\"generate_video\", {\n    \"prompt\": \"A stylized animation of a paper airplane flying through a colorful abstract landscape\",\n    \"model\": \"veo-3.0-fast-generate-preview\",\n    \"aspect_ratio\": \"16:9\"\n})\n```\n\n### Azure Blob Storage Management\n\n```python\n# List videos in Azure Blob Storage\nblob_videos = await mcp_client.call_tool(\"list_azure_blob_videos\", {})\n\n# Upload a specific video to Azure\nupload_result = await mcp_client.call_tool(\"upload_video_to_azure\", {\n    \"video_path\": \"my_video.mp4\",\n    \"blob_name\": \"custom_name.mp4\"\n})\n\n# Delete a video from Azure Blob Storage\ndelete_result = await mcp_client.call_tool(\"delete_azure_blob_video\", {\n    \"blob_name\": \"old_video.mp4\"\n})\n```\n\n## Prompt Writing Tips\n\n### Effective Prompts\n- **Be specific**: Include details about lighting, mood, camera angles\n- **Describe motion**: Specify the type of movement you want\n- **Set the scene**: Include environment and atmospheric details\n- **Mention style**: Cinematic, realistic, animated, etc.\n\n### Example Prompts\n\n**Cinematic Realism:**\n```\nA tracking drone view of a red convertible driving through Palm Springs in the 1970s, warm golden hour sunlight, long shadows, cinematic camera movement\n```\n\n**Creative Animation:**\n```\nA stylized animation of a large oak tree with leaves blowing vigorously in strong wind, peaceful countryside setting, warm lighting\n```\n\n**Dialogue Scene:**\n```\nClose-up of two people having an intense conversation in a dimly lit room, dramatic lighting, one person gesturing emphatically while speaking\n```\n\n### Negative Prompts\nDescribe what you **don't** want to see:\n- \u274c Don't use \"no\" or \"don't\": `\"no cars\"` \n- \u2705 Do describe unwanted elements: `\"cars, vehicles, traffic\"`\n\n## Limitations\n\n- **Generation Time**: 11 seconds to 6 minutes depending on complexity\n- **Video Length**: 8 seconds maximum\n- **Resolution**: 720p output\n- **Storage**: Videos are stored on Google's servers for 2 days only\n- **Regional Restrictions**: Person generation defaults to \"dont_allow\" in EU/UK/CH/MENA\n- **Watermarking**: All videos include SynthID watermarks\n\n## \ud83d\udea8 Troubleshooting\n\n**\"API key not found\"**\n```bash\n# Set your Gemini API key\nexport GEMINI_API_KEY='your_api_key_here'\n# Or add to .env file\necho \"GEMINI_API_KEY=your_api_key_here\" >> .env\n```\n\n**\"Output directory not accessible\"**\n```bash\n# Ensure the output directory exists and is writable\nmkdir -p ~/Videos/Generated\nchmod 755 ~/Videos/Generated\n```\n\n**\"Video generation timeout\"**\n```bash\n# Try using the fast model for testing\nuvx mcp-veo3 --output-dir ~/Videos\n# Then use: model=\"veo-3.0-fast-generate-preview\"\n```\n\n**\"Import errors\"**\n```bash\n# Install/update dependencies\nuv sync\n# Or with pip\npip install -r requirements.txt\n```\n\n**\"Azure upload failed\"**\n```bash\n# Check your Azure connection string\necho $AZURE_STORAGE_CONNECTION_STRING\n\n# Test Azure connection\npython test_azure_blob.py\n\n# Verify container permissions in Azure Portal\n```\n\n**\"Azure Storage SDK not available\"**\n```bash\n# Install Azure Storage SDK\npip install azure-storage-blob>=12.19.0\n```\n\n## Error Handling\n\nThe server handles common errors gracefully:\n\n- **Invalid API Key**: Clear error message with setup instructions\n- **File Not Found**: Validation for image paths in image-to-video\n- **Generation Timeout**: Configurable timeout with progress updates\n- **Model Errors**: Fallback error handling with detailed messages\n- **Azure Connection Errors**: Graceful fallback when Azure is not configured\n- **Azure Upload Failures**: Detailed error messages with troubleshooting hints\n- **Container Creation**: Automatic container creation if it doesn't exist\n\n## Development\n\n### Running Tests\n\n```bash\n# Install test dependencies\npip install pytest pytest-asyncio\n\n# Run tests\npytest tests/\n\n# Test Azure Blob Storage functionality\npython test_azure_blob.py\n```\n\n### Code Formatting\n\n```bash\n# Format code\nblack mcp_veo3.py\n\n# Check linting\nflake8 mcp_veo3.py\n\n# Type checking\nmypy mcp_veo3.py\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Submit a pull request\n\n## \ud83d\udcda Links\n\n- **PyPI**: https://pypi.org/project/mcp-veo3/\n- **GitHub**: https://github.com/dayongd1/mcp-veo3\n- **MCP Docs**: https://modelcontextprotocol.io/\n- **Veo 3 API**: https://ai.google.dev/gemini-api/docs/video\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Support\n\n- **Documentation**: [Google Veo 3 API Docs](https://ai.google.dev/gemini-api/docs/video)\n- **API Key**: [Get your Gemini API key](https://makersuite.google.com/app/apikey)\n- **Issues**: Report bugs and feature requests in the GitHub issues\n\n## Changelog\n\n### v1.0.2 (Current)\n- **\u2601\ufe0f Azure Blob Storage Integration**: Automatic upload of generated videos to Azure Blob Storage\n- **\ud83d\udd17 Cloud URLs**: Get direct URLs to videos stored in Azure Blob Storage\n- **\ud83d\uddc2\ufe0f Cloud Management**: New MCP tools for managing videos in Azure Blob Storage\n  - `upload_video_to_azure`: Upload videos to Azure Blob Storage\n  - `list_azure_blob_videos`: List all videos in Azure container\n  - `delete_azure_blob_video`: Delete videos from Azure Blob Storage\n- **\u2699\ufe0f Enhanced Configuration**: Added Azure-specific environment variables\n- **\ud83e\uddea Test Suite**: Added comprehensive Azure Blob Storage testing script\n- **\ud83d\udcda Updated Documentation**: Complete Azure setup and usage guide\n\n### v1.0.1\n- **\ud83d\udd27 API Fix**: Updated to match official Veo 3 API specification\n- **Removed unsupported parameters**: aspect_ratio, negative_prompt, person_generation\n- **Simplified API calls**: Now using only model and prompt parameters as per official docs\n- **Fixed video generation errors**: Resolved \"unexpected keyword argument\" issues\n- **Updated documentation**: Added notes about current API limitations\n\n### v1.0.0\n- Initial release\n- Support for Veo 3, Veo 3 Fast, and Veo 2 models\n- Text-to-video and image-to-video generation\n- FastMCP framework with progress tracking\n- Comprehensive error handling and logging\n- File management utilities\n- uv/uvx support for easy installation\n\n---\n\n**Built with FastMCP** | **Python 3.10+** | **MIT License**\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "MCP Veo 3 Video Generator - A Model Context Protocol server for Veo 3 video generation and Azure Blob Upload",
    "version": "1.0.17",
    "project_urls": {
        "Bug Tracker": "https://github.com/ctoicqtao/mcp-veo3-azure-blob/issues",
        "Changelog": "https://github.com/ctoicqtao/mcp-veo3-azure-blob/releases",
        "Documentation": "https://github.com/ctoicqtao/mcp-veo3-azure-blob/blob/main/README.md",
        "Homepage": "https://github.com/ctoicqtao/mcp-veo3-azure-blob",
        "Repository": "https://github.com/ctoicqtao/mcp-veo3-azure-blob"
    },
    "split_keywords": [
        "ai",
        " fastmcp",
        " gemini",
        " generation",
        " google",
        " mcp",
        " model-context-protocol",
        " veo",
        " video"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9afb896d4e885352ac30c80f337dad40392472ab6f91e802397528a1390e9abe",
                "md5": "5eb7b4012376040f85652a54a935c097",
                "sha256": "2d7787ba1bc3c419402fd537ef06be847988c6ec5b6af078ec4afaef2895ad20"
            },
            "downloads": -1,
            "filename": "mcp_veo3_azure_blob-1.0.17-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5eb7b4012376040f85652a54a935c097",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 16247,
            "upload_time": "2025-09-19T07:18:57",
            "upload_time_iso_8601": "2025-09-19T07:18:57.580679Z",
            "url": "https://files.pythonhosted.org/packages/9a/fb/896d4e885352ac30c80f337dad40392472ab6f91e802397528a1390e9abe/mcp_veo3_azure_blob-1.0.17-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6ef17cd2997da7f717a33a5866f2869bbb42f0a283d7a5e3fa241150a7f71c45",
                "md5": "1c63cdd8889e5f42b551fa9c09c1c3d0",
                "sha256": "06dce79c2f3109cc7b799833a2804ab9c7b6faae95c92bc2eb791f85f322ab45"
            },
            "downloads": -1,
            "filename": "mcp_veo3_azure_blob-1.0.17.tar.gz",
            "has_sig": false,
            "md5_digest": "1c63cdd8889e5f42b551fa9c09c1c3d0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 17949,
            "upload_time": "2025-09-19T07:18:59",
            "upload_time_iso_8601": "2025-09-19T07:18:59.853416Z",
            "url": "https://files.pythonhosted.org/packages/6e/f1/7cd2997da7f717a33a5866f2869bbb42f0a283d7a5e3fa241150a7f71c45/mcp_veo3_azure_blob-1.0.17.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-19 07:18:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ctoicqtao",
    "github_project": "mcp-veo3-azure-blob",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "fastmcp",
            "specs": [
                [
                    ">=",
                    "0.9.0"
                ]
            ]
        },
        {
            "name": "google-genai",
            "specs": [
                [
                    ">=",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "azure-storage-blob",
            "specs": [
                [
                    ">=",
                    "12.19.0"
                ]
            ]
        },
        {
            "name": "Pillow",
            "specs": [
                [
                    ">=",
                    "10.0.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "aiohttp",
            "specs": [
                [
                    ">=",
                    "3.8.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    ">=",
                    "7.0.0"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    ">=",
                    "0.21.0"
                ]
            ]
        },
        {
            "name": "black",
            "specs": [
                [
                    ">=",
                    "23.0.0"
                ]
            ]
        },
        {
            "name": "flake8",
            "specs": [
                [
                    ">=",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "mypy",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        }
    ],
    "lcname": "mcp-veo3-azure-blob"
}
        
Elapsed time: 1.60417s