video-mcp
Click on "Deploy 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., "@video-mcpgenerate a 10-second video of a sunset over ocean waves using veo-3.1-standard"
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.
video-mcp
Phase 2a skeleton — stubs only, no live API wiring yet. Live Veo wiring lands in Phase 2a.2.
An async video generation MCP server with multi-provider support.
Status
⚠️ This is a Phase 2a skeleton. All providers return stub responses — fake job IDs that advance from
submitted→pending→completeafter ~2 seconds of wall-clock time. No real video bytes are generated. Live Veo 3.1 wiring is the next milestone (Phase 2a.2).
Related MCP server: hyper-video-service
Purpose
Provides an MCP interface for async video generation using multiple backend providers. Designed
for use with the amplifier-bundle-creative orchestration bundle.
Related Links
Spec + decisions log: https://github.com/michaeljabbour/amplifier-bundle-creative/blob/main/spec/DECISIONS.md
D018: Async pattern —
generate_videoreturns ajob_idimmediately; callers poll viaget_job_statusD021: VideoProvider ABC shape (this repo's
src/providers/base.py)
Sibling image MCP: https://github.com/michaeljabbour/imagen-mcp (image generation)
Providers
Provider | Status | Notes |
Veo 3.1 Standard | Stub — live wiring pending | $0.40/sec, 4K, best lip-sync |
Veo 3.1 Fast | Stub — live wiring pending | $0.15/sec, 1080p, faster iteration |
Veo 3.1 Lite | Stub — live wiring pending | $0.05/sec, 720p/1080p, high volume |
Grok Imagine Video | Stub only — raises NotImplementedError | D019: xAI DPA/MSA pending |
Sora 2 Pro | Stub only — raises NotImplementedError | D010: API EOL 2026-09-24 |
Stub behavior: Veo stubs return a fake job_id (e.g. stub_veo_standard_abc123). A call
to get_job_status with that ID will return status: pending for ~2 seconds, then status: complete
with a placeholder output_url. No real video is produced.
Setup
Required environment variables:
Variable | Purpose |
| Veo 3.1 provider (live wiring pending) |
Optional:
Variable | Default | Purpose |
| — | Grok Imagine Video (gated — see D019) |
|
| Base output directory |
|
| Request timeout in seconds |
|
| Log full prompts to events log |
Quickstart
generate_video
Submit a video generation job (returns immediately with a job_id):
{
"tool": "generate_video",
"params": {
"prompt": "A serene mountain lake at golden hour, camera slowly panning right",
"provider": "veo-3.1-standard",
"duration": 8.0,
"aspect_ratio": "16:9"
}
}Response:
## ✅ Video Job Submitted
**Provider:** veo-3.1-standard
**Job ID:** `stub_veo_standard_a1b2c3d4e5f6`
**Status:** submitted
### ⏰ Polling Instructions
Call `get_job_status` with job_id `stub_veo_standard_a1b2c3d4e5f6` every ~15 seconds.
Typical completion: 30–120s for live Veo calls (2s for stubs).get_job_status
Poll for completion:
{
"tool": "get_job_status",
"params": {
"job_id": "stub_veo_standard_a1b2c3d4e5f6"
}
}Response (after ~2s with stubs):
## ✅ Video Complete
**Job ID:** `stub_veo_standard_a1b2c3d4e5f6`
**Status:** complete
**Progress:** 100%
**Output URL:** https://stub.example.com/video/stub_veo_standard_a1b2c3d4e5f6.mp4Project Structure
video-mcp/
├── src/
│ ├── server.py # MCP entry point — generate_video, get_job_status
│ ├── config/
│ │ ├── constants.py # VEO_MODELS, STUBBED_PROVIDERS, limits
│ │ ├── settings.py # Env-var settings (GEMINI_API_KEY, XAI_API_KEY, ...)
│ │ ├── paths.py # Output path resolution
│ │ └── dotenv.py # .env loader shim
│ ├── providers/
│ │ ├── base.py # VideoProvider ABC, VideoCapabilities, VideoJobResult, JobStore
│ │ ├── veo_provider.py # Veo 3.1 Standard/Fast/Lite stubs
│ │ ├── sora_provider.py # Sora 2 stub (D010)
│ │ ├── grok_provider.py # Grok Imagine stub (D019)
│ │ ├── selector.py # Provider routing (override + default)
│ │ └── registry.py # Provider factory + JobStore routing
│ ├── models/
│ │ └── input_models.py # Pydantic models for MCP tools
│ ├── exceptions.py # VideoError hierarchy
│ └── services/
│ └── logging_config.py # Structured JSONL event logging
└── tests/
├── test_providers.py
└── test_server.pyDevelopment
# Clone and install
git clone https://github.com/michaeljabbour/video-mcp.git
cd video-mcp
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Verify server loads
python3 -c "from src.server import mcp; print('Server loads OK')"
# Start server (waits for MCP stdio)
python -m src.serverLicense
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for Google Veo AI video generation
Stivio MCP server - AI image-to-video generator via MCP.
MCP server for Wan AI video generation
MCP server for MiniMax H3 multimodal video generation
Related MCP Servers
- AlicenseBqualityCmaintenanceMCP server that exposes Google's Veo2 video generation capabilities, allowing clients to generate videos from text prompts or images.734MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for programmatic video generation. Send a prompt, get an MP4.-
- AlicenseAqualityDmaintenanceA unified MCP server for video generation that intelligently routes requests to HeyGen (for avatar/presenter videos) or Google Veo (for creative/cinematic content).11MIT
- AlicenseAqualityDmaintenanceMCP server for Google Veo 3.1 video generation. Supports text/video/image-based generation, extension, and interpolation with cost estimation and batch processing.416 npm1MIT