popcorn
An MCP server that enables AI agents to analyze videos locally by extracting transcripts, detecting scene changes, and returning key frames.
README
<p align="center"> <a href="#quick-start">README</a> โข <a href="LICENSE">โ๏ธ License</a> </p>
<h1 align="center"> <br> ๐ฟ <br> popcorn <br> </h1>
<p align="center"> <a href="docs/i18n/README.zh.md">๐จ๐ณ ไธญๆ</a> โข <a href="docs/i18n/README.ja.md">๐ฏ๐ต ๆฅๆฌ่ช</a> โข <a href="docs/i18n/README.ko.md">๐ฐ๐ท ํ๊ตญ์ด</a> โข <a href="docs/i18n/README.es.md">๐ช๐ธ Espaรฑol</a> โข <a href="docs/i18n/README.de.md">๐ฉ๐ช Deutsch</a> โข <a href="docs/i18n/README.fr.md">๐ซ๐ท Franรงais</a> โข <a href="docs/i18n/README.pt.md">๐ง๐ท Portuguรชs</a> โข <a href="docs/i18n/README.ru.md">๐ท๐บ ะ ัััะบะธะน</a> โข <a href="docs/i18n/README.ar.md">๐ธ๐ฆ ุงูุนุฑุจูุฉ</a> โข <a href="docs/i18n/README.it.md">๐ฎ๐น Italiano</a> โข <a href="docs/i18n/README.nl.md">๐ณ๐ฑ Nederlands</a> โข <a href="docs/i18n/README.tr.md">๐น๐ท Tรผrkรงe</a> โข <a href="docs/i18n/README.vi.md">๐ป๐ณ Tiแบฟng Viแปt</a> โข <a href="docs/i18n/README.hi.md">๐ฎ๐ณ เคนเคฟเคจเฅเคฆเฅ</a> </p>
<h4 align="center">An agent skill that gives any coding agent the ability to watch and understand video. Works with <a href="https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview" target="_blank">Claude Code</a>, <a href="https://openai.com/index/introducing-codex/" target="_blank">Codex</a>, and any MCP-compatible agent.</h4>
<p align="center"> <a href="LICENSE"> <img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License"> </a> <a href="package.json"> <img src="https://img.shields.io/badge/version-0.4.0-green.svg" alt="Version"> </a> <a href="package.json"> <img src="https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg" alt="Node"> </a> <a href="https://modelcontextprotocol.io"> <img src="https://img.shields.io/badge/MCP-Compatible-purple.svg" alt="MCP Compatible"> </a> </p>
<br>
<p align="center"> <a href="#quick-start">Quick Start</a> โข <a href="#how-it-works">How It Works</a> โข <a href="#mcp-tools">MCP Tools</a> โข <a href="#transcription-backends">Transcription</a> โข <a href="#configuration">Configuration</a> โข <a href="#troubleshooting">Troubleshooting</a> โข <a href="#license">License</a> </p>
<p align="center"> Popcorn enables AI agents to watch and understand long-form videos by extracting transcripts, detecting scene changes, and returning key frames. Everything runs locallyโno external APIs, no fees, complete privacy. </p>
Quick Start
# Install FFmpeg (required)
brew install ffmpeg # macOS
sudo apt install ffmpeg # Ubuntu/Debian
# Install Popcorn
git clone https://github.com/anthropics/popcorn.git
cd popcorn && npm install && npm run build
# Optional: Install a transcription backend
pip install mlx-whisper # Apple Silicon (fastest)
pip install openai-whisper # Any platform
Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"popcorn": {
"command": "node",
"args": ["/path/to/popcorn/dist/index.js"]
}
}
}
Key Features:
- Scene Detection โ Captures frames at visual transitions, not fixed intervals
- Local Transcription โ 4 backend options (mlx-whisper, faster-whisper, whisper-cpp, whisper)
- Inline Images โ Returns key frames directly in MCP responses
- Smart Presets โ Auto-configures for screencasts, presentations, movies, interviews
- Zero Config โ Just pass a video path and it works
- Privacy First โ Everything runs locally, no data leaves your machine
Documentation
Getting Started
- Quick Start โ Installation & setup
- Tutorial โ Step-by-step usage guide
- MCP Tools โ Available tools reference
Guides
- Transcription Backends โ Choose the best backend for your system
- Video Types & Objectives โ Presets for different content
- Configuration โ Advanced parameters
Reference
- Troubleshooting โ Common issues & solutions
- Agent Skill โ Instructions for AI agents
- API Reference โ Tool schemas & responses
How It Works
Core Components:
- FFprobe โ Extracts video metadata (duration, resolution, codecs)
- FFmpeg Scene Detection โ Finds visual transitions using
select='gt(scene,N)'filter - Parallel Frame Extraction โ Captures JPEGs at scene change timestamps
- Multi-Backend Transcription โ Whisper variants convert audio to timestamped text
- Analysis Bundle โ Results saved to
.popcorn/directory - MCP Response โ Returns metadata + inline base64 images
Video File โโโถ FFprobe โโโถ FFmpeg โโโถ Whisper โโโถ Analysis Bundle
โ โ โ โ
โผ โผ โผ โผ
metadata frames transcript MCP Response
MCP Tools
| Tool | Description |
|---|---|
popcorn_analyze |
Main analysis โ extracts frames, transcribes audio, returns results |
popcorn_suggest |
Probe video metadata and get recommended settings |
popcorn_presets |
List available video types and objectives |
popcorn_backends |
Detect your system and show transcription options |
popcorn_read |
Read transcript slices with time filtering |
Basic Usage
{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4"
}
}
With Presets
{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4",
"videoType": "screencast",
"objective": "detailed"
}
}
Video Types
| Type | Best For | Scene Detection |
|---|---|---|
screencast |
Tutorials, coding sessions, UI demos | Low threshold |
presentation |
Slides, lectures, keynotes | Slide transitions |
movie |
Films, TV shows | Balanced |
interview |
Podcasts, talking heads | Transcription priority |
surveillance |
Security footage, dashcam | High threshold |
sports |
Live events, fast action | High frame rate |
Objectives
| Objective | Use When |
|---|---|
summary |
Quick overview needed |
detailed |
Don't miss anything |
find_moment |
Searching for specific content |
transcribe |
Audio/speech is most important |
visual_only |
Only care about visuals |
quick_scan |
Fast preview needed |
Transcription Backends
Popcorn auto-detects your system and recommends the best backend.
Backend Comparison
| Backend | Speed | Best For | Install |
|---|---|---|---|
| mlx-whisper | Fastest | Apple Silicon (M1/M2/M3/M4) | pip install mlx-whisper |
| faster-whisper | Fast | NVIDIA GPUs | pip install faster-whisper |
| whisper-cpp | Moderate | Cross-platform | brew install whisper-cpp |
| whisper | Slow | Most compatible | pip install openai-whisper |
Processing Times (60-min video)
| Backend | Time |
|---|---|
| mlx-whisper | 3-8 min |
| faster-whisper | 5-10 min |
| whisper-cpp | 10-20 min |
| whisper | 30-60 min |
Force a Backend
{
"tool": "popcorn_analyze",
"arguments": {
"path": "/path/to/video.mp4",
"backend": "mlx-whisper"
}
}
Configuration
All Parameters
| Parameter | Type | Description |
|---|---|---|
path |
string | Required. Absolute path to video file |
videoType |
string | Video type preset |
objective |
string | Analysis objective preset |
transcribe |
boolean | Enable/disable transcription |
backend |
string | Transcription backend |
model |
string | Whisper model (tiny, base, small, medium, large) |
language |
string | Language code (e.g., en, es, fr) |
frameMode |
string | scene or interval |
sceneThreshold |
number | Scene sensitivity (0-1) |
maxFrames |
number | Maximum frames to extract |
inlineFrames |
number | Frames to return as base64 |
Output Structure
.popcorn/<video>_<timestamp>/
โโโ analysis.json # Full metadata
โโโ transcript.txt # Plain text
โโโ transcript.json # Timestamped segments
โโโ transcript.chunks.json # LLM-friendly chunks
โโโ assets/
โโโ audio.wav
โโโ frames/
โโโ scene_000001.jpg
โโโ ...
Troubleshooting
FFmpeg not found
brew install ffmpeg # macOS
sudo apt install ffmpeg # Ubuntu/Debian
No transcription backend
pip install mlx-whisper # Apple Silicon
pip install openai-whisper # Any platform
Too few frames detected
{ "sceneThreshold": 0.15, "minSceneInterval": 2 }
Too many frames detected
{ "sceneThreshold": 0.5, "minSceneInterval": 10 }
See Troubleshooting Guide for more solutions.
Development
npm install # Install dependencies
npm run build # Build
npm run dev # Development mode
npm start # Run server
Project Structure
popcorn/
โโโ src/
โ โโโ index.ts # MCP server
โ โโโ analyze.ts # Analysis pipeline
โ โโโ ffmpeg.ts # Video processing
โ โโโ transcribe.ts # Multi-backend transcription
โ โโโ presets.ts # Video type presets
โ โโโ commands.ts # Shell execution
โโโ docs/ # Documentation
โโโ skills/ # Agent skills
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing) - Open a Pull Request
License
MIT License โ see LICENSE for details.
Acknowledgments
- OpenAI Whisper โ Speech recognition
- whisper.cpp โ C++ port
- MLX Whisper โ Apple Silicon
- faster-whisper โ CTranslate2
- FFmpeg โ Video processing
- Model Context Protocol โ MCP spec
<p align="center"> Made with ๐ฟ for AI agents everywhere </p>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.