Mcp Video Reader — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mcp Video Reader (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP server that gives Claude full access to ffmpeg — extract frames, convert formats, trim and join clips, manipulate audio, apply filters, and handle subtitles. No external API key required.
ffmpeg must be installed and available on your PATH.
winget install ffmpeg or choco install ffmpegbrew install ffmpegsudo apt install ffmpegnpx mcp-video-readernpm install -g mcp-video-readernpx github:lawriec/mcp-video-readergit clone https://github.com/lawriec/mcp-video-reader.git
cd mcp-video-reader
npm install
npm run buildAdd to your Claude Desktop config (claude_desktop_config.json):
Via npx (recommended):
{
"mcpServers": {
"video-reader": {
"command": "npx",
"args": ["-y", "mcp-video-reader"]
}
}
}Via GitHub (before npm publish):
{
"mcpServers": {
"video-reader": {
"command": "npx",
"args": ["-y", "github:lawriec/mcp-video-reader"]
}
}
}Local build:
{
"mcpServers": {
"video-reader": {
"command": "node",
"args": ["/absolute/path/to/mcp-video-reader/build/index.js"]
}
}
}claude mcp add video-reader -- npx -y mcp-video-reader#### get_video_info
Get metadata about a video file.
Input:
file_path (string, required) — Absolute path to the video fileOutput: Text with duration, resolution, fps, codecs, bitrate, file size.
#### extract_frames
Extract evenly-spaced frames from a video file as JPEG images.
Input:
file_path (string, required) — Absolute path to the video filenum_frames (number, optional) — Number of frames to extract, 1–20 (default: 10)start_time (number, optional) — Start time in seconds (default: beginning)end_time (number, optional) — End time in seconds (default: end of video)Output: Text summary + base64 JPEG images of each frame.
#### extract_frame_at_timestamp
Extract a single frame at a specific timestamp.
Input:
file_path (string, required) — Absolute path to the video filetimestamp (number, required) — Timestamp in secondsOutput: Text label + single base64 JPEG image.
#### convert_video
Convert a video to a different container format and/or codec. Audio is copied without re-encoding unless the container requires otherwise.
Input:
file_path (string, required) — Absolute path to the input video fileoutput_format (string, required) — Container format: mp4, mkv, webm, avi, or movcodec (string, optional) — Video codec: h264, h265, vp9, av1, or copy (re-container without re-encode)crf (number, optional) — Constant Rate Factor for quality (0–63; lower = better). Typical: 18–28 for h264/h265, 28–40 for vp9bitrate (string, optional) — Target video bitrate, e.g. 2000k or 5M. Cannot be combined with crfoutput_path (string, optional) — Defaults to same directory as input with _converted suffixOutput: Text confirming the output file path.
#### trim_video
Cut a clip from a video by start and end time. Re-muxes without re-encoding (lossless, fast).
Input:
file_path (string, required) — Absolute path to the input video filestart_time (number, required) — Start time in secondsend_time (number, required) — End time in secondsoutput_path (string, optional) — Defaults to same directory with _trimmed suffixOutput: Text confirming the output file path.
#### concat_videos
Join multiple video files into one in the order provided, without re-encoding (lossless, fast). All inputs must share the same codec and resolution.
Input:
file_paths (array of strings, required) — Ordered list of absolute paths (minimum 2)output_path (string, optional) — Defaults to same directory as the first file with _concat suffixoutput_format (string, optional) — mp4, mkv, webm, avi, or mov. Defaults to the format of the first input fileOutput: Text confirming the output file path.
#### split_video
Split a video into equal-duration segments without re-encoding. Output files are named <basename>_part_000.<ext>, <basename>_part_001.<ext>, etc.
Input:
file_path (string, required) — Absolute path to the input video filesegment_duration (number, required) — Duration of each segment in secondsoutput_dir (string, optional) — Directory to write segments to. Defaults to same directory as inputoutput_format (string, optional) — mp4, mkv, webm, avi, or mov. Defaults to same format as inputOutput: Text listing all created segment file paths.
#### extract_audio
Extract the audio track from a video and save it as a standalone audio file.
Input:
file_path (string, required) — Absolute path to the input video fileoutput_format (string, optional) — Audio format: mp3, aac, flac, wav, or ogg (default: mp3)output_path (string, optional) — Defaults to same directory with _audio suffixOutput: Text confirming the output file path.
#### strip_audio
Remove the audio track from a video, producing a silent video. The video stream is copied without re-encoding.
Input:
file_path (string, required) — Absolute path to the input video fileoutput_path (string, optional) — Defaults to same directory with _noaudio suffixOutput: Text confirming the output file path.
#### adjust_volume
Change the audio volume of a video. The video stream is copied without re-encoding.
Input:
file_path (string, required) — Absolute path to the input video filevolume (number, required) — Volume multiplier: 1.0 = original, 2.0 = double, 0.5 = half. Must be ≥ 0output_path (string, optional) — Defaults to same directory with _volume suffixOutput: Text confirming the output file path.
#### resize_video
Resize a video to new dimensions. Omit one dimension to scale proportionally and preserve aspect ratio.
Input:
file_path (string, required) — Absolute path to the input video filewidth (number, optional) — Output width in pixelsheight (number, optional) — Output height in pixelsoutput_path (string, optional) — Defaults to same directory with _resized suffixAt least one of width or height must be provided.
Output: Text confirming the output file path.
#### crop_video
Crop a video to a rectangular region.
Input:
file_path (string, required) — Absolute path to the input video filewidth (number, required) — Width of the crop region in pixelsheight (number, required) — Height of the crop region in pixelsx (number, optional) — X offset of the top-left corner (default: 0)y (number, optional) — Y offset of the top-left corner (default: 0)output_path (string, optional) — Defaults to same directory with _cropped suffixOutput: Text confirming the output file path.
#### rotate_video
Rotate a video 90, 180, or 270 degrees clockwise.
Input:
file_path (string, required) — Absolute path to the input video filerotation (number, required) — Degrees clockwise: 90, 180, or 270output_path (string, optional) — Defaults to same directory with _rotatedN suffixOutput: Text confirming the output file path.
#### adjust_video
Adjust brightness, contrast, and/or saturation using the ffmpeg eq filter.
Input:
file_path (string, required) — Absolute path to the input video filebrightness (number, optional) — Range: -1.0 to 1.0. Default: 0 (no change)contrast (number, optional) — Range: -1000 to 1000. Default: 1 (no change)saturation (number, optional) — Range: 0 (grayscale) to 3.0. Default: 1 (no change)output_path (string, optional) — Defaults to same directory with _adjusted suffixOutput: Text confirming the output file path.
#### add_text_overlay
Burn a text string onto every frame of a video using the ffmpeg drawtext filter.
Input:
file_path (string, required) — Absolute path to the input video filetext (string, required) — Text to overlay (max 500 characters)x (number, optional) — X position in pixels from the left edge (default: 10)y (number, optional) — Y position in pixels from the top edge (default: 10)font_size (number, optional) — Font size in pixels (default: 24)color (string, optional) — Color name (e.g. white, red) or hex (e.g. #FF0000). Default: whiteoutput_path (string, optional) — Defaults to same directory with _text suffixOutput: Text confirming the output file path.
#### change_speed
Speed up or slow down a video. Both video and audio are adjusted. Values above 1.0 speed up; values below 1.0 slow down.
Input:
file_path (string, required) — Absolute path to the input video filespeed (number, required) — Speed multiplier, range 0.01–100. E.g. 2.0 = twice as fast, 0.5 = half speedoutput_path (string, optional) — Defaults to same directory with _Nx suffixOutput: Text confirming the output file path.
#### generate_thumbnail_grid
Generate a contact-sheet JPEG with evenly-spaced thumbnail frames arranged in a grid. Useful for quickly skimming a video's content.
Input:
file_path (string, required) — Absolute path to the input video filecolumns (number, optional) — Number of columns in the grid, 1–20 (default: 4)rows (number, optional) — Number of rows in the grid, 1–20 (default: 3)output_path (string, optional) — Defaults to same directory with _grid.jpg suffixOutput: Text confirming the path of the generated JPEG contact sheet.
#### extract_subtitles
Extract a subtitle track from a video file and save it as a standalone subtitle file.
Input:
file_path (string, required) — Absolute path to the input video filestream_index (number, optional) — Zero-based index of the subtitle stream to extract (default: 0)output_format (string, optional) — Subtitle format: srt, vtt, or ass (default: srt)output_path (string, optional) — Defaults to same directory with _subtitles suffixOutput: Text confirming the output file path.
#### embed_subtitles
Embed a subtitle file as a soft (selectable) subtitle track inside the video container. The subtitles are not burned into the video frames. Supports mp4, mkv, and mov output.
Input:
file_path (string, required) — Absolute path to the input video filesubtitle_path (string, required) — Absolute path to the subtitle file (.srt, .vtt, or .ass)output_path (string, optional) — Defaults to same directory with _subtitled suffixoutput_format (string, optional) — mp4, mkv, or mov. Defaults to same format as inputOutput: Text confirming the output file path.
#### burn_subtitles
Permanently burn (hard-code) subtitles into the video frames. Subtitles will always be visible regardless of player settings. Requires re-encoding the video stream.
Input:
file_path (string, required) — Absolute path to the input video filesubtitle_path (string, required) — Absolute path to the subtitle file (.srt, .vtt, or .ass)output_path (string, optional) — Defaults to same directory with _burned suffixOutput: Text confirming the output file path.
FFMPEG_PATH — Override path to the ffmpeg executableFFPROBE_PATH — Override path to the ffprobe executableMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.