{
  "markdown": "<!-- studiomeyer-mcp-stack-banner:start -->\n> **Part of the [StudioMeyer MCP Stack](https://studiomeyer.io)** — Built in Mallorca 🌴 · ⭐ if you use it\n<!-- studiomeyer-mcp-stack-banner:end -->\n\n<div align=\"center\">\n\n# mcp-video\n\n\n<!-- badges -->\n[![npm version](https://img.shields.io/npm/v/mcp-video?style=flat-square&color=cb3837&logo=npm&label=npm)](https://www.npmjs.com/package/mcp-video)\n[![npm downloads](https://img.shields.io/npm/dm/mcp-video?style=flat-square&color=cb3837&logo=npm&label=installs%2Fmo)](https://www.npmjs.com/package/mcp-video)\n![License](https://img.shields.io/github/license/studiomeyer-io/mcp-video?style=flat-square&color=22c55e&label=license)\n![Last commit](https://img.shields.io/github/last-commit/studiomeyer-io/mcp-video?style=flat-square&color=88c0d0&label=updated)\n![GitHub stars](https://img.shields.io/github/stars/studiomeyer-io/mcp-video?style=flat-square&color=ffd700&logo=github&label=stars)\n<!-- /badges -->**Cinema-grade video production for AI agents.**\n\n![CI](https://github.com/studiomeyer-io/mcp-video/actions/workflows/ci.yml/badge.svg)\n![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)\n![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n[![npm version](https://img.shields.io/npm/v/mcp-video?color=blue)](https://www.npmjs.com/package/mcp-video)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org)\n\n8 MCP tools for recording, editing, effects, captions, TTS, and smart screenshots.<br>\nBuilt on [ffmpeg](https://ffmpeg.org/) and [Playwright](https://playwright.dev/). Works with any MCP client.\n\n[Features](#features) · [Quick Start](#quick-start) · [Examples](#usage-examples) · [Architecture](#architecture)\n\n</div>\n\n## A note from us\n\nWe 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.\n\nWe 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.\n\nIf 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.\n\nFrom a small studio in Palma de Mallorca.\n\n## Features\n\n| Tool | Operations | Description |\n|------|-----------|-------------|\n| `video_record` | cinema, scroll, multi-device | Record websites at 60fps with frame-by-frame capture |\n| `video_edit` | speed, crop, reverse, keyframe, pip | Edit clips with zoom/pan, PiP, slow-mo |\n| `video_color` | grade, effect, lut, chroma | Color grading, 22 LUT presets, green screen |\n| `video_audio` | extract, music, ducking, mix, voice | Audio extraction, mixing, 9 voice effects |\n| `video_text` | subtitles, caption, overlay, animate | Burn SRT, Whisper auto-caption, 15 text animations |\n| `video_compose` | concat, intro, social, beat-sync, templates | Join clips, social format conversion, beat sync |\n| `video_speech` | generate, voices, narrated | ElevenLabs/OpenAI TTS, full narrated videos |\n| `video_screenshot` | capture, detect | Element-aware screenshots, page feature detection |\n\n### Highlights\n\n- **60fps frame-by-frame capture** — Playwright screenshots every frame, ffmpeg encodes. Zero frame drops.\n- **Cinema easing curves** — 16 easing options including `cinematic` and `showcase` for buttery smooth scrolling.\n- **Smart screenshots** — Auto-detects 15+ UI elements (chat widgets, pricing sections, booking forms, etc.).\n- **Narrated videos** — Provide a URL + script, get a professional video with synchronized AI voiceover.\n- **22 LUT presets** — Film-grade color grading (teal-orange, noir, vintage, cyberpunk, etc.).\n- **Social format export** — One-click conversion to Instagram Reel, TikTok, YouTube Short, LinkedIn.\n- **Dual transport** — Stdio (default) or HTTP mode for persistent microservice deployment.\n\n## Prerequisites\n\n- **Node.js** >= 18\n- **ffmpeg** and **ffprobe** (validated on startup, cross-platform)\n- **Playwright** browsers (`npx playwright install chromium`)\n- Optional: `ELEVENLABS_API_KEY` for ElevenLabs TTS\n- Optional: `OPENAI_API_KEY` for Whisper captions and OpenAI TTS\n\nIf ffmpeg lives outside `PATH`, set `FFMPEG_PATH` and `FFPROBE_PATH` to the\nabsolute binary paths. Both env vars are honoured at startup AND at every\nruntime spawn site.\n\n## Quick Start\n\n### With Claude Code (stdio)\n\n```json\n{\n  \"mcpServers\": {\n    \"video\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-video\"]\n    }\n  }\n}\n```\n\n### With npx\n\n```bash\nnpx mcp-video\n```\n\n### From source\n\n```bash\ngit clone https://github.com/studiomeyer-io/mcp-video.git\ncd mcp-video\nnpm install\nnpx playwright install chromium\nnpm run build\nnpm start\n```\n\n### HTTP mode\n\n```bash\n# Start as HTTP microservice\nnpx mcp-video --http --port=9847\n\n# Or via environment variables\nMCP_HTTP=1 MCP_PORT=9847 npx mcp-video\n```\n\n## Configuration\n\n| Environment Variable | Default | Description |\n|---------------------|---------|-------------|\n| `VIDEO_OUTPUT_DIR` | `./output` | Directory for generated files |\n| `FFMPEG_PATH` | — | Absolute path to `ffmpeg` binary if not on `PATH` |\n| `FFPROBE_PATH` | — | Absolute path to `ffprobe` binary if not on `PATH` |\n| `ELEVENLABS_API_KEY` | — | ElevenLabs TTS API key |\n| `OPENAI_API_KEY` | — | OpenAI API key (Whisper + TTS) |\n| `MCP_HTTP` | `false` | Enable HTTP transport |\n| `MCP_PORT` | `9847` | HTTP port |\n| `MCP_HOST` | `127.0.0.1` | HTTP bind address |\n| `MCP_VIDEO_DEBUG` | `false` | Enable debug logging |\n| `MCP_VIDEO_ALLOW_INTERNAL` | `false` | Set to `1` to allow URLs that resolve to localhost / private / metadata IPs. **Local dev only** — leave unset in production (SSRF guard). |\n\n## What You Can Build\n\n| Use Case | Tools Used | Output |\n|----------|-----------|--------|\n| **Product demo video** | `video_record` → `video_text` → `video_audio` | 60fps website recording + auto-captions + background music |\n| **Social media clips** | `video_record` → `video_compose` | Record once → export to Instagram Reel, TikTok, YouTube Short |\n| **Narrated explainer** | `video_speech` → `video_color` | AI voiceover + cinematic color grade |\n| **Before/after comparison** | `video_screenshot` → `video_edit` | Smart element screenshots + PiP composition |\n| **Automated QA** | `video_record` + `video_screenshot` | Record user flows + screenshot specific elements |\n\n## Usage Examples\n\n### Record a website\n\n```\nUse video_record with type \"cinema\" to record https://example.com\nwith a smooth scroll and hover over the navbar.\n```\n\n### Create a narrated explainer video\n\n```\nUse video_speech with type \"narrated\" to create a narrated video of\nhttps://example.com with these segments:\n1. \"Welcome to our homepage\" — pause on hero section\n2. \"Check out our features\" — scroll to features\n3. \"Get started today\" — hover over CTA button\n```\n\n### Auto-caption a video\n\n```\nUse video_text with type \"caption\" to add auto-generated captions\nto /path/to/video.mp4\n```\n\n### Export for social media\n\n```\nUse video_compose with type \"social-all\" to convert\n/path/to/video.mp4 to all social media formats.\n```\n\n### Smart screenshot\n\n```\nUse video_screenshot with type \"capture\" to screenshot the chat widget\nand pricing section on https://example.com\n```\n\n## Architecture\n\n```\nsrc/\n  server.ts            Entry point, 8 consolidated MCP tools\n  lib/                 Logger, types, dual transport\n  handlers/            Tool handlers (video, editing, post-production, tts, screenshots)\n  schemas/             JSON Schema definitions for legacy tool format\n  tools/\n    engine/            Core engines\n      capture.ts       Frame-by-frame recording (Playwright → PNG → ffmpeg)\n      encoder.ts       ffmpeg encoding pipeline\n      scenes.ts        Scene execution (scroll, hover, click, type, wait)\n      cursor.ts        Visible cursor simulation\n      smart-screenshot.ts  Element-aware screenshot engine\n      tts.ts           ElevenLabs + OpenAI TTS with fallback\n      narrated-video.ts    Full narration pipeline\n      social-format.ts     Social media format conversion\n      concat.ts        Video concatenation with transitions\n      lut-presets.ts   22 cinema LUT presets\n      ...and more\n```\n\n## Development\n\n```bash\nnpm run dev          # Start with tsx (hot reload)\nnpm run typecheck    # Type check\nnpm test             # Run tests\nnpm run check        # Verify ffmpeg/ffprobe installed\n```\n\n## About StudioMeyer\n\n[StudioMeyer](https://studiomeyer.io) 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.\n\n## License\n\nMIT\n\n## Credits\n\nBuilt by [StudioMeyer](https://studiomeyer.io). Part of our open-source toolkit for AI-powered content creation.\n\n- [ai-shield](https://github.com/studiomeyer-io/ai-shield) — LLM security middleware for TypeScript\n- [agent-fleet](https://github.com/studiomeyer-io/agent-fleet) — Multi-agent orchestration for Claude Code\n- [darwin-agents](https://github.com/studiomeyer-io/darwin-agents) — Self-evolving agent framework",
  "bytes": 9535,
  "sha": "844501ecbe7637b26ba40ac6dc19c943e5b777c2032d8ca0747139457ed04050",
  "repo_slug": "studiomeyer-io/mcp-video",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_studiomeyer_video_f9fa0e35/readme"
}