StudioMeyer MCP-Video

Cinema-grade video production MCP server — 8 tools for recording, editing, effects, captions, TTS, and smart screenshots. Built on ffmpeg + Playwright.

Documentation

Part of the StudioMeyer MCP Stack — Built in Mallorca 🌴 · ⭐ if you use it

mcp-video

npm version npm downloads License Last commit GitHub stars

**Cinema-grade video production for AI agents.**

CI License: MIT TypeScript Version npm version Node

8 MCP tools for recording, editing, effects, captions, TTS, and smart screenshots.
Built on ffmpeg and Playwright. Works with any MCP client.

Features · Quick Start · Examples · Architecture

A note from us

We have been building tools and systems for ourselves for the past two years. The fact that this repo is small and has few stars is not because it is new. It is because we only just decided to share what we have built. It is not a fresh experiment, it is a long story with a recent commit.

We love building things and sharing them. We do not love social media tactics, growth hacks, or chasing stars and followers. So this repo is small. The code is real, it gets used, issues get answered. Judge for yourself.

If it helps you, sharing, testing, and feedback help us. If it could be better, an issue is more useful. If you build something with it, tell us at hello@studiomeyer.io. That genuinely makes our day.

From a small studio in Palma de Mallorca.

Features

ToolOperationsDescription
video_recordcinema, scroll, multi-deviceRecord websites at 60fps with frame-by-frame capture
video_editspeed, crop, reverse, keyframe, pipEdit clips with zoom/pan, PiP, slow-mo
video_colorgrade, effect, lut, chromaColor grading, 22 LUT presets, green screen
video_audioextract, music, ducking, mix, voiceAudio extraction, mixing, 9 voice effects
video_textsubtitles, caption, overlay, animateBurn SRT, Whisper auto-caption, 15 text animations
video_composeconcat, intro, social, beat-sync, templatesJoin clips, social format conversion, beat sync
video_speechgenerate, voices, narratedElevenLabs/OpenAI TTS, full narrated videos
video_screenshotcapture, detectElement-aware screenshots, page feature detection

Highlights

  • 60fps frame-by-frame capture — Playwright screenshots every frame, ffmpeg encodes. Zero frame drops.
  • Cinema easing curves — 16 easing options including cinematic and showcase for buttery smooth scrolling.
  • Smart screenshots — Auto-detects 15+ UI elements (chat widgets, pricing sections, booking forms, etc.).
  • Narrated videos — Provide a URL + script, get a professional video with synchronized AI voiceover.
  • 22 LUT presets — Film-grade color grading (teal-orange, noir, vintage, cyberpunk, etc.).
  • Social format export — One-click conversion to Instagram Reel, TikTok, YouTube Short, LinkedIn.
  • Dual transport — Stdio (default) or HTTP mode for persistent microservice deployment.

Prerequisites

  • Node.js >= 18
  • ffmpeg and ffprobe (validated on startup, cross-platform)
  • Playwright browsers (npx playwright install chromium)
  • Optional: ELEVENLABS_API_KEY for ElevenLabs TTS
  • Optional: OPENAI_API_KEY for Whisper captions and OpenAI TTS

If ffmpeg lives outside PATH, set FFMPEG_PATH and FFPROBE_PATH to the absolute binary paths. Both env vars are honoured at startup AND at every runtime spawn site.

Quick Start

With Claude Code (stdio)

{
  "mcpServers": {
    "video": {
      "command": "npx",
      "args": ["-y", "mcp-video"]
    }
  }
}

With npx

npx mcp-video

From source

git clone https://github.com/studiomeyer-io/mcp-video.git
cd mcp-video
npm install
npx playwright install chromium
npm run build
npm start

HTTP mode

# Start as HTTP microservice
npx mcp-video --http --port=9847

# Or via environment variables
MCP_HTTP=1 MCP_PORT=9847 npx mcp-video

Configuration

Environment VariableDefaultDescription
VIDEO_OUTPUT_DIR./outputDirectory for generated files
FFMPEG_PATHAbsolute path to ffmpeg binary if not on PATH
FFPROBE_PATHAbsolute path to ffprobe binary if not on PATH
ELEVENLABS_API_KEYElevenLabs TTS API key
OPENAI_API_KEYOpenAI API key (Whisper + TTS)
MCP_HTTPfalseEnable HTTP transport
MCP_PORT9847HTTP port
MCP_HOST127.0.0.1HTTP bind address
MCP_VIDEO_DEBUGfalseEnable debug logging
MCP_VIDEO_ALLOW_INTERNALfalseSet to 1 to allow URLs that resolve to localhost / private / metadata IPs. Local dev only — leave unset in production (SSRF guard).

What You Can Build

Use CaseTools UsedOutput
Product demo videovideo_recordvideo_textvideo_audio60fps website recording + auto-captions + background music
Social media clipsvideo_recordvideo_composeRecord once → export to Instagram Reel, TikTok, YouTube Short
Narrated explainervideo_speechvideo_colorAI voiceover + cinematic color grade
Before/after comparisonvideo_screenshotvideo_editSmart element screenshots + PiP composition
Automated QAvideo_record + video_screenshotRecord user flows + screenshot specific elements

Usage Examples

Record a website

Use video_record with type "cinema" to record https://example.com
with a smooth scroll and hover over the navbar.

Create a narrated explainer video

Use video_speech with type "narrated" to create a narrated video of
https://example.com with these segments:
1. "Welcome to our homepage" — pause on hero section
2. "Check out our features" — scroll to features
3. "Get started today" — hover over CTA button

Auto-caption a video

Use video_text with type "caption" to add auto-generated captions
to /path/to/video.mp4

Export for social media

Use video_compose with type "social-all" to convert
/path/to/video.mp4 to all social media formats.

Smart screenshot

Use video_screenshot with type "capture" to screenshot the chat widget
and pricing section on https://example.com

Architecture

src/
  server.ts            Entry point, 8 consolidated MCP tools
  lib/                 Logger, types, dual transport
  handlers/            Tool handlers (video, editing, post-production, tts, screenshots)
  schemas/             JSON Schema definitions for legacy tool format
  tools/
    engine/            Core engines
      capture.ts       Frame-by-frame recording (Playwright → PNG → ffmpeg)
      encoder.ts       ffmpeg encoding pipeline
      scenes.ts        Scene execution (scroll, hover, click, type, wait)
      cursor.ts        Visible cursor simulation
      smart-screenshot.ts  Element-aware screenshot engine
      tts.ts           ElevenLabs + OpenAI TTS with fallback
      narrated-video.ts    Full narration pipeline
      social-format.ts     Social media format conversion
      concat.ts        Video concatenation with transitions
      lut-presets.ts   22 cinema LUT presets
      ...and more

Development

npm run dev          # Start with tsx (hot reload)
npm run typecheck    # Type check
npm test             # Run tests
npm run check        # Verify ffmpeg/ffprobe installed

About StudioMeyer

StudioMeyer is an AI and design studio based in Palma de Mallorca, working with clients worldwide. We build custom websites and AI infrastructure for small and medium businesses. Production stack on Claude Agent SDK, MCP and n8n, with Sentry, Langfuse and LangGraph for observability and an in-house guard layer.

License

MIT

Credits

Built by StudioMeyer. Part of our open-source toolkit for AI-powered content creation.