video-tools-mcp
Click on "Deploy 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., "@video-tools-mcp find the cuts in ~/Movies/demo.mp4 and list each shot with its length"
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.
video-tools-mcp
An MCP server that gives AI agents local video tools. Claude, Cursor, and other MCP clients can read video metadata, find shots and cuts, extract frames to look at, and check keyframes. The tools run FFmpeg on your machine. You do not need an API key, and the server does not upload your video anywhere.
Tool | What it does |
| Reads the duration, container, codecs, resolution, frame rate, rotation, bitrate, and audio facts. |
| Finds the camera cuts and returns each shot with a start and an end time. |
| Extracts JPEG frames at given times, or spread evenly, and returns the images to the agent. |
| Lists the keyframe times and checks the interval for seeking, trimming, and HLS or DASH streaming. |
| Builds one JSON document with the media facts, shots, and keyframes in the open Video Context schema. |
Each tool accepts a local file path or an http(s) URL.
Requirements
Node.js 20 or later.
FFmpeg and ffprobe on your
PATH.macOS:
brew install ffmpegUbuntu or Debian:
sudo apt install ffmpegWindows:
winget install ffmpeg
Related MCP server: video-reader-mcp
Install
Claude Code
claude mcp add video-tools -- npx -y github:video-context/video-tools-mcpClaude Desktop, Cursor, Windsurf, and other MCP clients
Add this to the MCP configuration file of your client:
{
"mcpServers": {
"video-tools": {
"command": "npx",
"args": ["-y", "github:video-context/video-tools-mcp"]
}
}
}For Claude Desktop, the file is claude_desktop_config.json. For Cursor, the file is .cursor/mcp.json.
Example prompts
"Look at
~/Movies/demo.mp4and tell me what happens in it.""Find the cuts in
launch.mp4and list each shot with its length.""Get 8 frames from this video and write alt text for each one."
"Will
ad.mp4stream well with HLS? Check the keyframes.""Make a Video Context JSON file for every video in this folder."
Example output
video_context returns a document like this one (illustrative):
{
"schema_version": "0.1",
"video_id": "launch.mp4",
"duration": 15,
"media": {
"container": "mov,mp4,m4a,3gp,3g2,mj2",
"video": { "codec": "h264", "width": 1280, "height": 720, "fps": 30, "pixel_format": "yuv420p" }
},
"shots": [
{ "start": 0, "end": 3 },
{ "start": 3, "end": 6 }
],
"keyframes": [0, 3, 6],
"provenance": [{ "source": "ffmpeg", "tracks": ["shots", "keyframes"] }]
}How it works
video_metadatarunsffprobe -show_format -show_streams.detect_shotsruns the FFmpegselect='gt(scene,0.3)'filter on a small copy of each frame. Changethresholdto find more or fewer cuts.check_keyframesreads the packet flags with ffprobe. It does not decode the video, so it is fast.extract_framesseeks to each time and saves one JPEG. The files go to your temporary folder.
These tools find technical facts. They do not understand the content. To search many videos by meaning, or to get transcripts, on-screen text, objects, and summaries, see Video Context.
Use the tools in code
import { buildContext, detectShots, extractFrames } from 'video-tools-mcp'
const { shots } = await detectShots('launch.mp4', { threshold: 0.25 })
const frames = await extractFrames('launch.mp4', { times: shots.map((s) => s.start) })Develop
npm install
npm testThe tests make a short video with FFmpeg, so FFmpeg must be installed.
Related
video-schema: the open JSON schema for video data, with converters from Google Video Intelligence, Amazon Rekognition, and Amazon Transcribe.
awesome-video-understanding: a list of video understanding APIs, models, tools, and datasets.
Free video tools in the browser: scene detection, frame extraction, a keyframe checker, and a metadata viewer.
License
MIT
Available Tools
5 toolscheck_keyframesCheck keyframesARead-only
List the keyframe (I-frame) times of a video and check the keyframe interval. Use it to find out if a video seeks fast, trims at exact times, and streams well with HLS or DASH.
Inputs: input (required).
detect_shotsDetect shotsARead-only
Find the camera cuts in a video and return the shots between them, with start and end times in seconds.
Inputs: input (required), min_shot, threshold.
extract_framesExtract framesARead-only
Extract still frames from a video as JPEG images, so that you can look at the video. Give exact times, or a count of frames to spread evenly. Returns the images and their file paths.
Inputs: input (required), count, times, width, +1 more.
video_contextVideo contextBRead-only
Build one JSON document for a video in the open Video Context schema (https://github.com/video-context/video-schema): media facts, shots, and keyframes. For semantic search, transcripts, on-screen text, and objects across many videos, see Video Context: https://videocontextapi.com
Inputs: input (required), threshold.
video_metadataVideo metadataBRead-only
Read the duration, container, codecs, resolution, frame rate, rotation, bitrate, and audio facts of a video.
Inputs: input (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool targets a distinct aspect: metadata, shot detection, frame extraction, keyframe analysis, and context aggregation. There is mild overlap since video_metadata and check_keyframes both report technical video facts, and video_context aggregates the same data the individual tools produce, but purposes remain distinguishable.
All names use snake_case, which is consistent. However, the prefix convention is mixed: detect_shots, extract_frames, and check_keyframes use verb_noun, while video_metadata and video_context use noun_noun, a minor deviation that keeps things readable.
Five tools is well-scoped for a focused video inspection server, with each tool earning its place covering a distinct inspection task plus one aggregation helper.
The surface covers core video inspection: media facts, shots, frames, keyframes, and aggregated context output. Minor gaps exist (e.g. no audio/subtitle extraction or transcript tooling), but these are explicitly deferred to an external service, so agents can work around them.
Maintenance
Related MCP Connectors
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
Video how-to search for AI agents: 2,000+ video skills, tutorials and FFmpeg recipes. No key.
Video, audio, and image processing for AI agents: convert, transcribe, upscale - 150+ operations.
Transform video, audio and images, and generate media from prompts. FFmpeg, captions, models.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables local media processing (video/audio) using FFmpeg and FFprobe, allowing frame extraction, audio conversion, and metadata retrieval through natural language.5MIT
- AlicenseNot gradedqualityFmaintenanceExtracts ffprobe metadata, subtitles, scenes, and timelines from video files without frame-by-frame LLM vision, providing evidence-first reading for AI agents.66 npm3MIT
- AlicenseAqualityCmaintenanceEnables coding agents to turn videos from social platforms or local files into a small set of distinct frames plus a manifest, so they can answer visual questions by reading image paths. Also provides metadata lookup for captions and authors without downloading the video.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to download, convert, and visually analyze videos by providing timestamped frames and locally transcribed speech, all without API keys.MIT