Skip to main content
Glama

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


Related MCP server: mcp-video

Documentation

Getting Started

Guides

Reference


How It Works

Core Components:

  1. FFprobe — Extracts video metadata (duration, resolution, codecs)

  2. FFmpeg Scene Detection — Finds visual transitions using select='gt(scene,N)' filter

  3. Parallel Frame Extraction — Captures JPEGs at scene change timestamps

  4. Multi-Backend Transcription — Whisper variants convert audio to timestamped text

  5. Analysis Bundle — Results saved to .popcorn/ directory

  6. 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

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing)

  3. Commit changes (git commit -m 'Add amazing feature')

  4. Push to branch (git push origin feature/amazing)

  5. Open a Pull Request


License

MIT License — see LICENSE for details.


Acknowledgments


Available Tools

5 tools
popcorn_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the video file.
modelNoWhisper model: tiny, base, small, medium, large.
outDirNoOutput directory for analysis bundle.
backendNoTranscription backend. 'auto' picks the best available. Options: whisper (OpenAI, most compatible), whisper-cpp (fast C++), mlx-whisper (Apple Silicon optimized), faster-whisper (GPU accelerated).
languageNoTranscription language code (e.g., 'en').
frameModeNoOverride: 'scene' detects visual changes, 'interval' uses fixed timing.
maxFramesNoOverride: maximum frames to extract.
objectiveNoWhat 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).
videoTypeNoType 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).
transcribeNoOverride: whether to transcribe audio.
framesPerMinNoOverride: frames per minute (interval mode).
inlineFramesNoOverride: frames to return as base64 in response.
maxChunkCharsNoOverride: transcript chunk size.
sceneThresholdNoOverride: scene sensitivity 0-1 (lower = more frames).
minSceneIntervalNoOverride: minimum seconds between scene frames.
maxTranscriptCharsNoOverride: transcript excerpt length.

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to read.
endSecNoEnd time in seconds (transcript JSON filtering).
endLineNo1-based line to stop reading.
maxCharsNoMaximum characters to return.
startSecNoStart time in seconds (transcript JSON filtering).
startLineNo1-based line to start reading.

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the video file to analyze.

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv0.4.0
    • First observedpopcorn_analyze
    • First observedpopcorn_backends
    • First observedpopcorn_presets
    • First observedpopcorn_read
    • First observedpopcorn_suggest

TDQS

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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.
    27
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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

Latest Blog Posts

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