video-render-mcp
Give any AI agent a scene plan, get a 1080p MP4 back. Motion graphics + AI narration + optional captions + your own images. One MCP tool call, no watermark, no post-production.
56s explainer rendered by this MCP — premium voice + custom SVG mockups + Ken Burns
How it works
Tell your agent what you want. It drafts a scene plan — title, stats, images, script, voice.
Agent calls render_video. Returns a jobId in <1s. Actual render runs 30–300s server-side.
Poll GET /api/jobs/{id} every ~5s. Once status=success, fetch the MP4. Valid 7 days.
Quickstart
1. Get an API key
Sign in with Google (100 free credits ≈ 5 minutes of free-voice video or ~100s of premium voice). Rotate the key any time from the dashboard.
2. Wire it into your MCP client
Claude Desktop / Cursor / Zed — any MCP client with streamable-http support:
{
"mcpServers": {
"video-render": {
"url": "https://video-render.regiq.in/api/mcp",
"headers": {
"Authorization": "Bearer vrm_live_..."
}
}
}
}3. Or hit the JSON-RPC endpoint directly
curl -X POST https://video-render.regiq.in/api/mcp \
-H "Authorization: Bearer vrm_live_..." \
-H "Content-Type: application/json" \
-d '{
"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"render_video","arguments":{
"title":"My video",
"targetDurationSec":30,
"voice":"female-uk",
"script":"Hello world...",
"scenes":[
{"type":"title","copy":"My video"},
{"type":"cta","url":"example.com","copy":"Try it"}
]
}}
}'The two tools
plan_video_scenesDraft a scene plan from a natural-language brief.Pure scaffolder — echoes back a validated ScenePlan the model can iterate on with the user before spending credits. Free.
render_videoEnqueue an async render of an MP4 from a ScenePlan.Returns immediately with { jobId, statusUrl, videoUrl }. Deducts credits up front (refunded on failure). Renders 60–300s server-side; poll statusUrl. Async by design so a Cloudflare-tunnel-style 100s HTTP cap can't 524 the render.
Async job model
# 1. Enqueue (returns in <1s)
POST /api/mcp -> { "jobId": "cmr...", "statusUrl": ".../api/jobs/cmr...",
"videoUrl": ".../api/renders/cmr....mp4" }
# 2. Poll every 5s until success (auth required)
GET /api/jobs/{jobId} -> { "status": "pending" | "rendering"
| "success" | "failed",
"videoUrl": "..." (when success),
"durationSec": 46.8, "sizeBytes": 8829777 }
# 3. Fetch the mp4 (public, valid 7 days)
GET /api/renders/{jobId}.mp4Scene types
A scene plan is 1–12 scenes, each one of these types. Duration is allocated proportionally to the scenes based on their kind.
Big animated headline with an accent underline and optional subtitle. Ideal opener.
Full-frame image with Ken Burns pan/zoom. Accepts https URLs or data:image/* URLs — inline your own screenshots, photos, or SVG mockups.
Big word or number with a caption underneath. Add an image and it switches to two-column (mockup left, copy right).
Syntax-highlighted code snippet with optional highlighted lines and a caption underneath.
Radial-glow call-to-action with a pulsing URL bubble. Use for the closing frame.
Example scene plan
Send this as the arguments object to a render_video tools/call. Images are optional — omit them for pure motion-graphics text.
{
"title": "60-second product explainer",
"targetDurationSec": 60,
"voice": "premium-female-uk",
"music": "upbeat",
"captions": true,
"accent": "#0EA5A0",
"script": "Your full narration here, sized to ~150 wpm × duration...",
"scenes": [
{ "type": "image",
"src": "data:image/png;base64,iVBORw0K...",
"caption": "A friendly helper — on your phone",
"fit": "contain" },
{ "type": "stat",
"big": "Reminders",
"small": "Pinged on WhatsApp when it's time",
"image": "https://example.com/whatsapp-mockup.svg" },
{ "type": "code",
"language": "typescript",
"snippet": "const x: number = 42;\nconsole.log(x);",
"caption": "Fully typed" },
{ "type": "cta", "url": "paperloft.uk", "copy": "Free to try" }
]
}Voices
Free = Microsoft Edge neural (msedge-tts, no key needed). Premium = ElevenLabs Turbo v2.5 with word-level timestamps for burn-in captions. Premium voices sound noticeably more human but cost 3×; captions add another 25%.
Credits
New accounts start with 100 free credits. 1 credit ≈ 3 seconds of free-voice output, or ≈ 1 second of premium voice. Rendering is free — you only pay for narration seconds.
Self-host
MIT-licensed. Clone the repo, drop in a Postgres URL and (optionally) an ElevenLabs key, docker compose up. Full source for everything you see here.