popcorn
Click on "Install 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., "@popcornAnalyze /Users/me/video.mp4 for transcript and key scenes"
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.
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 platformAdd 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
Related MCP server: mcp-video
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)'filterParallel Frame Extraction — Captures JPEGs at scene change timestamps
Multi-Backend Transcription — Whisper variants convert audio to timestamped text
Analysis Bundle — Results saved to
.popcorn/directoryMCP Response — Returns metadata + inline base64 images
Video File ──▶ FFprobe ──▶ FFmpeg ──▶ Whisper ──▶ Analysis Bundle
│ │ │ │
▼ ▼ ▼ ▼
metadata frames transcript MCP ResponseMCP Tools
Tool | Description |
| Main analysis — extracts frames, transcribes audio, returns results |
| Probe video metadata and get recommended settings |
| List available video types and objectives |
| Detect your system and show transcription options |
| 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 |
| Tutorials, coding sessions, UI demos | Low threshold |
| Slides, lectures, keynotes | Slide transitions |
| Films, TV shows | Balanced |
| Podcasts, talking heads | Transcription priority |
| Security footage, dashcam | High threshold |
| Live events, fast action | High frame rate |
Objectives
Objective | Use When |
| Quick overview needed |
| Don't miss anything |
| Searching for specific content |
| Audio/speech is most important |
| Only care about visuals |
| 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) |
|
faster-whisper | Fast | NVIDIA GPUs |
|
whisper-cpp | Moderate | Cross-platform |
|
whisper | Slow | Most compatible |
|
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 |
| string | Required. Absolute path to video file |
| string | Video type preset |
| string | Analysis objective preset |
| boolean | Enable/disable transcription |
| string | Transcription backend |
| string | Whisper model ( |
| string | Language code (e.g., |
| string |
|
| number | Scene sensitivity (0-1) |
| number | Maximum frames to extract |
| 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/DebianNo transcription backend
pip install mlx-whisper # Apple Silicon
pip install openai-whisper # Any platformToo 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 serverProject 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 skillsContributing
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
Available Tools
5 toolspopcorn_analyzeA
Analyze a video file. Extracts keyframes and transcripts. RECOMMENDED: First use popcorn_suggest to get optimal settings, or specify videoType and objective to use smart presets.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the video file. | |
| model | No | Whisper model: tiny, base, small, medium, large. | |
| outDir | No | Output directory for analysis bundle. | |
| backend | No | Transcription backend. 'auto' picks the best available. Options: whisper (OpenAI, most compatible), whisper-cpp (fast C++), mlx-whisper (Apple Silicon optimized), faster-whisper (GPU accelerated). | |
| language | No | Transcription language code (e.g., 'en'). | |
| frameMode | No | Override: 'scene' detects visual changes, 'interval' uses fixed timing. | |
| maxFrames | No | Override: maximum frames to extract. | |
| objective | No | What you want to accomplish. Options: summary (quick overview), detailed (thorough analysis), find_moment (searching for something specific), transcribe (focus on audio), visual_only (no transcription), quick_scan (fast preview). | |
| videoType | No | Type of video content. This auto-configures optimal settings. Options: screencast (UI recordings, tutorials), presentation (slides, lectures), movie (films, TV), interview (podcasts, talking heads), surveillance (security footage), sports (live action). | |
| transcribe | No | Override: whether to transcribe audio. | |
| framesPerMin | No | Override: frames per minute (interval mode). | |
| inlineFrames | No | Override: frames to return as base64 in response. | |
| maxChunkChars | No | Override: transcript chunk size. | |
| sceneThreshold | No | Override: scene sensitivity 0-1 (lower = more frames). | |
| minSceneInterval | No | Override: minimum seconds between scene frames. | |
| maxTranscriptChars | No | Override: transcript excerpt length. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the primary actions (extract keyframes and transcripts) but does not disclose side effects, resource usage, output location, potential failures, or how the analysis bundle is returned or stored. The description is too thin for a tool with 16 parameters and no annotation context, leaving significant behavioral unknowns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the primary purpose, and includes a useful recommendation without any fluff. Every sentence contributes meaning, making it appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 params, no output schema, no annotations), the description is minimal but not entirely inadequate. It states the core outputs and suggests a workflow with popcorn_suggest, but it does not explain what the analysis bundle contains or how to read results (e.g., via popcorn_read). The schema covers parameters richly, but the overall context for using this tool in the sibling workflow is incomplete, earning a middle score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all 16 parameters with 100% description coverage, so the baseline is 3. The description adds value by indicating that 'videoType and objective to use smart presets'—a cross-parameter relationship not explicit in the individual schema descriptions. This enhances the agent's understanding of how to combine parameters for optimal use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Analyze a video file.' and specifies its key outputs: 'Extracts keyframes and transcripts.' This is a specific verb+resource combination that differentiates it from the sibling tool popcorn_suggest, which recommends settings rather than performing analysis. The purpose is immediately clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'RECOMMENDED: First use popcorn_suggest to get optimal settings, or specify videoType and objective to use smart presets.' This tells the agent when to use this tool relative to popcorn_suggest and offers an alternative path using parameters. It lacks an explicit 'when not to use' exclusion, which prevents a perfect score, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
popcorn_backendsA
List available transcription backends on this system. Shows which backends are installed and ready to use. Use this to help users choose the best transcription option.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses read-only behavior through 'List' and 'Shows,' and the phrase 'installed and ready to use' indicates it checks availability. This is adequate for a simple listing tool, although it doesn't detail return format or potential caveats like configuration requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first states the core action, the second explains what it shows and offers a use case. Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, no annotations), the description is remarkably complete. It covers purpose, behavioral transparency, and usage context, making it sufficient for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema defines zero parameters, so there is nothing to add. The baseline for no parameters is 4, and the description correctly does not mention parameters that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List available transcription backends on this system' with a specific verb and resource. It further specifies the output ('Shows which backends are installed and ready to use'), and it distinguishes itself from sibling tools like suggest, presets, analyze, and read, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context with 'Use this to help users choose the best transcription option,' indicating when to invoke the tool. However, it does not explicitly mention alternatives or when not to use it, so it lacks direct exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
popcorn_presetsA
List all available video type presets and objectives. Use this to understand what options are available for popcorn_analyze.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It discloses a read-only listing behavior ('List all available') which is transparent for a zero-parameter tool. No side effects or edge cases are noted, but the operation is straightforward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, and the purpose is front-loaded. Excellent conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters and no output schema, the description fully covers what it does and why to use it, referencing the related tool popcorn_analyze. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline score is 4. No parameter information is needed in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available video type presets and objectives' with a specific verb and resource, and explicitly references popcorn_analyze, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: 'Use this to understand what options are available for popcorn_analyze.' It doesn't mention alternatives or exclusions, but the directive is clear for the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
popcorn_readA
Read a file from an analysis bundle with optional line slicing or transcript time filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the file to read. | |
| endSec | No | End time in seconds (transcript JSON filtering). | |
| endLine | No | 1-based line to stop reading. | |
| maxChars | No | Maximum characters to return. | |
| startSec | No | Start time in seconds (transcript JSON filtering). | |
| startLine | No | 1-based line to start reading. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions optional filtering but does not disclose return format, error behaviors, size limits, or whether the tool is read-only. 'Read' implies non-mutating, but details are lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and includes optional details. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite schema coverage, the description omits return value expectations, error handling, and any specifics about how filtering affects output. With no output schema and no annotations, the agent is left guessing about the tool's full behavior, making it incomplete for a 6-parameter read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, providing baseline 3. The description adds conceptual grouping by mentioning 'line slicing' (startLine/endLine) and 'transcript time filtering' (startSec/endSec), helping agents understand the parameters' joint purpose beyond their individual schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Read a file from an analysis bundle' with specific optional behaviors ('line slicing or transcript time filtering'). It differentiates from siblings by focusing on reading files, while siblings suggest, presets, analyze, or backend management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading files from an analysis bundle but provides no explicit guidance on when to choose this tool over alternatives or when not to use it. The optional filtering behaviors are mentioned but not elaborated with scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
popcorn_suggestA
Probe a video file and get suggested analysis settings. Returns video metadata, suggested video type, and recommended presets. Use this FIRST to understand the video and choose appropriate settings before running popcorn_analyze.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the video file to analyze. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns 'video metadata, suggested video type, and recommended presets' and implies read-only behavior via the verb 'probe'. With no annotations provided, it does not explicitly state that the file is never modified, nor does it mention any permissions or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences, placing the core action in the first sentence and usage guidance in the second. Every word adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and no output schema, the description covers what it does, what it returns, and when to use it. It also connects to the sibling tool for the next step, making it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the sole 'path' parameter with a description, giving 100% schema coverage. The description adds only minimal context by calling it a 'video file', which doesn't significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'probe' with the resource 'a video file' and explicitly names the output ('suggested analysis settings'). It also distinguishes itself from the sibling tool popcorn_analyze by stating 'before running popcorn_analyze', making its purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Use this FIRST' and 'before running popcorn_analyze', which provides clear temporal guidance. However, it does not mention scenarios where the tool should not be used or alternative tools for different situations beyond the implied next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.4.0- First observed
popcorn_analyze - First observed
popcorn_backends - First observed
popcorn_presets - First observed
popcorn_read - First observed
popcorn_suggest
TDQS
Each tool has a clear, distinct purpose: suggest probes and recommends settings, presets lists options, analyze performs the analysis, read accesses results, and backends shows system capabilities. No two tools appear to do the same thing.
All tools share a consistent popcorn_ prefix, but the suffix style mixes verbs (suggest, analyze, read) with nouns (presets, backends). This is a minor deviation from a uniform verb_noun pattern, but the names are still predictable and readable.
With 5 tools, the set is well-scoped for video analysis. Each tool covers a distinct step in the workflow (probe, list options, analyze, read output, check backends), earning its place without redundancy.
The tool surface provides a complete workflow: suggest gives metadata and recommended settings, analyze runs the analysis, and read retrieves results. Presets and backends offer configuration information. No critical operations are missing for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
MCP server for Wan AI video generation
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
MCP server for Google Veo AI video generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA local MCP server for extracting YouTube video transcripts, metadata, and performing visual analysis using Gemini Vision or local Whisper models. It enables users to process video content through various tools for subtitle retrieval and frame analysis.27MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables LLMs to analyze video content by extracting frames as base64 images and retrieving video metadata using ffmpeg.15MIT
- AlicenseNot gradedqualityAmaintenanceMCP server that enables AI agents to watch and analyze videos from 1800+ sources, with persistent indexing, OCR, transcription, and a self-verification loop for debugging.MIT
- AlicenseAqualityBmaintenanceMCP server that analyzes videos locally with frame-by-frame understanding and optional browser sidecars, producing structured context bundles for coding agents to fix bugs, add features, or build new functionality.142Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/haithamelmengad/popcorn'
If you have feedback or need assistance with the MCP directory API, please join our Discord server