vidshaper
vidshaper is a local MCP server that lets you edit and process video and audio files using ffmpeg, offering a wide range of capabilities.
Inspect media: Get detailed metadata (duration, resolution, codecs, FPS, bitrate), generate contact sheets, detect scenes, and detect silence.
Basic editing: Trim (frame‑accurate or fast keyframe copy), concatenate/join (auto‑normalizing resolution/FPS), convert format (mp4, webm, mov, mkv with quality presets), resize (by width, height, or percentage), crop, and compress (target MB or quality‑based).
Speed & rotation: Change playback speed (0.25× – 4×) while preserving audio pitch, rotate, and mirror.
Effects: Add fade in/out, reverse, loop, adjust colors, and stack videos side‑by‑side.
Overlays & graphics: Overlay text (custom position, font, color, background box, time window), image watermarks (corner, size, opacity), draw boxes, blur regions, and burn subtitles (.srt/.ass).
Audio tools: Extract audio (mp3, wav, m4a, flac), remove audio without re‑encoding, replace audio (optional loop), adjust volume (multiplier), and normalize audio.
GIFs & frames: Create optimized animated GIFs with palette optimization and extract still frames as JPG or PNG.
Safe by default: Tools never overwrite source files; output is saved alongside inputs with descriptive names and collision‑avoiding counters.
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., "@vidshaper Trim video.mp4 to the first 30 seconds and convert to GIF"
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.
claudeclip
A local MCP server that lets Claude edit videos on your machine, powered by ffmpeg. Works with Claude Cowork, Claude Desktop, Claude Code, and any other MCP client, on Windows, macOS, and Linux — ffmpeg is bundled automatically if you don't have it.
Ask things like "trim the first 30 seconds off intro.mp4 and turn the best part into a GIF" — Claude inspects the file, picks the right tools, and writes the results next to your originals.
Tools
Tool | What it does |
| Duration, resolution, fps, codecs, bitrate, file size |
| Contact sheet of timestamped frames — lets Claude see the video before editing |
| Timestamps of cuts/shot changes, ready to feed into trims |
| Silent stretches plus the non-silent segments to keep (cut dead air) |
| Cut to a time range — frame-accurate re-encode, or instant |
| Join clips in order, with hard cuts or crossfades; mixed resolutions/frame rates are normalized automatically |
| Re-encode to mp4 / webm / mov / mkv with a quality preset |
| Scale by width, height, or percentage (aspect ratio preserved) |
| Crop a rectangle out of the frame |
| Shrink to an approximate target size in MB, or general-purpose compression |
| 0.25x–4x playback speed, audio pitch preserved |
| Rotate 90/180/270° and/or mirror horizontally/vertically |
| Fade in from black / out to black, video and audio |
| Play backwards (best for short clips) |
| Repeat N times or until a target duration, no re-encode |
| Brightness, contrast, saturation (saturation 0 = black & white) |
| Side-by-side, vertical, or grid comparison layouts |
| Overlay a video in a corner (webcam/reaction style) |
| Slideshow from images, optional soundtrack |
| Palette-optimized animated GIF from a clip |
| Save a still frame as jpg/png (thumbnails, covers) |
| Audio track out to mp3 / wav / m4a / flac |
| Strip audio without re-encoding |
| Swap in music or a voiceover, optionally looped to fit |
| Louder/quieter by a multiplier |
| EBU R128 loudness normalization (podcast/social levels) |
| Captions/titles: position presets, color, background box, show/hide times |
| Image/logo overlay with size and opacity |
| Rectangle outline or filled box for highlighting/redacting, with time window |
| Blur or pixelate a region (faces, plates, names), with time window |
| Permanently render an .srt/.ass subtitle file onto the video |
Safe by default: tools never overwrite files. Without an explicit output_path, results land next to the input as name_trimmed.mp4, name_clip.gif, etc., and name collisions get a numeric counter.
Related MCP server: videolab-mcp
Requirements
Node.js 18+
ffmpeg — required, and installed for you:
npm installalways fetches ffmpeg/ffprobe binaries for your platform (Windows, macOS Intel/Apple Silicon, Linux), so the server works out of the box. If a system ffmpeg is present it is preferred (newer and faster); the lookup order isFFMPEG_PATH/FFPROBE_PATHenv vars → common install locations (incl.~/ffmpeg,C:\ffmpeg\bin, Homebrew) →PATH→ bundled.
Install
Option 1 — npx (easiest)
No download at all — with Node.js 18+ installed, just use npx in your Claude config (first run fetches everything, including ffmpeg):
{
"mcpServers": {
"claudeclip": {
"command": "npx",
"args": ["-y", "claudeclip"]
}
}
}Or for Claude Code: claude mcp add claudeclip -- npx -y claudeclip
Option 2 — download a release
Grab the zip for your platform from the latest release, unzip it somewhere permanent, and point your Claude config at dist/index.js inside it (see below). The zip is self-contained — Node.js 18+ is the only requirement, ffmpeg is included.
Option 3 — from source
git clone https://github.com/gulkoa/claudeclip.git
cd claudeclip
npm install
npm run buildConnect to Claude
Claude Cowork / Claude Desktop
Add the server to your Claude config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"claudeclip": {
"command": "node",
"args": ["/absolute/path/to/claudeclip/dist/index.js"]
}
}
}Restart the Claude app; the tools appear under the claudeclip server. (If node isn't found, use the full path to the Node executable as command.)
Claude Code
claude mcp add claudeclip -- node /absolute/path/to/claudeclip/dist/index.jsExample prompts
"How long is
C:\Videos\demo.mp4and what resolution is it?""Cut
talk.mp4from 12:30 to 14:00 and compress the result to about 25 MB""Join these three clips and add my
logo.pngas a watermark in the bottom right""Make a 5-second GIF of the goal at 1:23, 480px wide"
"Replace the audio in
timelapse.mp4withsong.mp3, looped to fit""Burn
episode1.srtinto the video and caption the intro with the show title""Look at what's in
raw.mp4, then cut it into separate scenes""Remove the dead air from this recording and normalize the audio"
"Put
screen.mp4andwebcam.mp4side by side" / "webcam in the corner""Pixelate the license plate at the top right from 0:12 to 0:31"
Notes
Text overlays render with a system font (Arial/Segoe UI on Windows, Helvetica on macOS, DejaVu on Linux). Arbitrary text is safe — it's passed to ffmpeg via a temp file, so quotes,
%,:and friends can't break the filter graph.Encoding defaults favor compatibility: H.264 + AAC in mp4 with
+faststart, VP9 + Opus for webm.Long jobs time out after 15 minutes.
Development
npm run build # compile TypeScript to dist/
node test/smoke.mjs # end-to-end test: spawns the server over stdio,
# generates test media with ffmpeg, exercises every toolLicense
MIT
Available Tools
31 toolsadd_fadeAdd fade in/outA
Fade the video (and its audio) in from black at the start and/or out to black at the end.
Inputs: input_path (required), fade_in, fade_out, output_path.
add_text_overlayAdd text overlayC
Draw text on the video (caption, title, label). Optionally limited to a time range.
Inputs: text (required), input_path (required), box, end, +5 more.
add_watermarkAdd image watermarkA
Overlay an image (logo/watermark) on the video at a chosen corner, with optional size and opacity.
Inputs: image_path (required), input_path (required), width, opacity, +2 more.
adjust_colorsAdjust colorsA
Tune brightness, contrast, and/or saturation. Neutral values: brightness 0, contrast 1, saturation 1 (saturation 0 = black & white).
Inputs: input_path (required), contrast, brightness, saturation, +1 more.
adjust_volumeAdjust volumeA
Make the audio louder or quieter. Use a multiplier (2 = double volume, 0.5 = half) — video is untouched.
Inputs: factor (required), input_path (required), output_path.
blur_regionBlur / pixelate regionA
Blur or pixelate a rectangle of the frame — for hiding faces, license plates, names, or other sensitive content. Optionally limited to a time range.
Inputs: x (required), y (required), width (required), height (required), +6 more.
burn_subtitlesBurn in subtitlesB
Permanently render a subtitle file (.srt or .ass) onto the video frames.
Inputs: input_path (required), subtitle_path (required), font_size, output_path.
change_speedChange playback speedA
Speed up or slow down a video (audio pitch is preserved). Factor 2 = twice as fast, 0.5 = half speed.
Inputs: factor (required), input_path (required), output_path.
compress_videoCompress videoA
Shrink a video's file size. Give a target size in MB (bitrate is computed from the duration) or omit it for a general-purpose quality-based compression.
Inputs: input_path (required), output_path, target_size_mb.
concat_videosJoin videosA
Concatenate two or more videos into one file, in the order given, with hard cuts or a crossfade between clips. Clips are normalized (scaled/padded to the first clip's resolution and frame rate) so mixed sources join cleanly.
Inputs: input_paths (required), crossfade, output_path.
convert_videoConvert video formatB
Re-encode a video to another container/format (mp4, webm, mov, mkv) with a quality setting.
Inputs: format (required), input_path (required), quality, output_path.
create_gifCreate GIFA
Turn a video (or a section of it) into an animated GIF with an optimized color palette. Keep GIFs short and small — they get big fast.
Inputs: input_path (required), fps, start, width, +2 more.
crop_videoCrop videoA
Crop a rectangular region out of the video frame. x/y is the top-left corner of the region to keep.
Inputs: x (required), y (required), width (required), height (required), +2 more.
detect_scenesDetect scene changesA
Find timestamps where the picture changes abruptly (cuts between scenes/shots). Returns a list of cut times you can feed into trim_video/concat_videos to split or re-edit the video.
Inputs: input_path (required), threshold.
detect_silenceDetect silenceA
Find silent stretches in the audio track. Returns silent ranges plus the non-silent segments to keep — useful for cutting dead air (feed the keep-segments into trim_video/concat_videos).
Inputs: input_path (required), noise_db, min_duration.
draw_boxDraw boxA
Draw a rectangle outline (or filled box) on the video — for highlighting or redacting a region. Optionally limited to a time range.
Inputs: x (required), y (required), width (required), height (required), +7 more.
extract_audioExtract audioA
Pull the audio track out of a video into its own file (mp3, wav, m4a, or flac).
Inputs: input_path (required), format, output_path.
extract_frameExtract frameA
Save a single frame of the video as an image (thumbnail/still). Good for previews and cover images.
Inputs: input_path (required), format, timestamp, output_path.
get_video_infoGet video infoA
Read metadata from a video or audio file: duration, resolution, frame rate, codecs, bitrate, and file size. Use this first to understand a file before editing it.
Inputs: input_path (required).
loop_videoLoop videoA
Repeat a video back-to-back a number of times, or long enough to fill a target duration. Fast — no re-encoding.
Inputs: input_path (required), plays, output_path, target_duration.
normalize_audioNormalize loudnessA
Normalize the audio to a broadcast-standard loudness (EBU R128) so it matches typical podcast/social-media levels — fixes too-quiet or wildly varying audio. Video is untouched.
Inputs: input_path (required), output_path, target_lufs.
picture_in_picturePicture in pictureA
Overlay one video on top of another in a corner (like a webcam feed or reaction box). The overlay's own audio is dropped; the main video's audio is kept. The overlay disappears when its clip ends.
Inputs: input_path (required), overlay_path (required), start, width, +2 more.
remove_audioRemove audioA
Strip the audio track from a video, leaving silent video. Fast — no re-encoding.
Inputs: input_path (required), output_path.
replace_audioReplace audioA
Replace a video's audio track with a different audio file (e.g. background music or a voiceover). The output ends when the shorter of the two ends, unless loop_audio is set.
Inputs: audio_path (required), input_path (required), loop_audio, output_path.
resize_videoResize videoA
Scale a video to a new resolution. Give width and/or height in pixels (the missing one keeps aspect ratio), or a scale percentage.
Inputs: input_path (required), width, height, percent, +1 more.
reverse_videoReverse videoA
Play the video (and audio) backwards. Buffers the whole clip in memory, so best for short clips — trim first for anything over a minute or two.
Inputs: input_path (required), output_path.
rotate_videoRotate / flip videoB
Rotate a video by 90/180/270 degrees clockwise and/or mirror it horizontally or vertically.
Inputs: input_path (required), flip, degrees, output_path.
sample_framesSample frames (contact sheet)A
Tile evenly-spaced frames from across the video into one image, each stamped with its timestamp. Use this to SEE what's in a video before deciding how to edit it — create the sheet, then view the image file.
Inputs: input_path (required), count, columns, tile_width, +1 more.
stack_videosStack videosA
Play videos side by side (horizontal), on top of each other (vertical), or in a grid — great for comparisons. Clips are normalized to the first clip's size; audio comes from the first clip that has any.
Inputs: input_paths (required), layout, output_path.
trim_videoTrim videoA
Cut a video down to a time range. Give a start time plus either an end time or a duration (omit both to keep everything from start to the end of the file). Times are seconds (12.5) or clock form (1:23:45.6).
Inputs: input_path (required), end, start, duration, +2 more.
video_from_imagesSlideshow from imagesA
Build a video from a list of images, shown in order for a fixed number of seconds each, optionally with a soundtrack. Images are fitted to the first image's size.
Inputs: image_paths (required), audio_path, output_path, seconds_per_image.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 31 tools
Each tool targets a distinct video editing operation—audio removal vs. extraction, resizing vs. cropping, overlays vs. filters—so there is no real ambiguity. The descriptions further clarify any potential overlap, such as adjust_volume vs. normalize_audio.
The vast majority of tool names follow a clear verb_noun pattern (remove_audio, trim_video, detect_scenes). Two exceptions—picture_in_picture and video_from_images—are noun phrases, breaking the otherwise consistent scheme.
At 31 tools, this is a hefty surface that exceeds the comfortable 16-25 tool range. While the scope of video editing is broad and each tool serves a purpose, the sheer count makes the server feel dense and harder to navigate.
The tool set covers the full video editing lifecycle: capture (get_video_info, sample_frames), cutting (trim, concat), transformation (resize, crop, rotate), audio handling (extract, replace, normalize), overlays (text, watermark, box, blur), and more. Missing advanced features like stabilization or chroma keying, but the core domain is thoroughly covered.
Maintenance
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Hosted MCP tools for FFmpeg-style video and audio processing through FFMPEG API.
MCP server for Kling AI video generation
MCP server for Grok Imagine AI video generation
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides 17 FFmpeg-based tools for video and audio processing, including conversion, compression, and editing. It enables AI assistants to perform complex media tasks like extracting audio, adding watermarks, and merging videos using natural language.16,348 npm2MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that turns Claude into a hands-on video editor for short-form videos, enabling music generation, script writing, voiceover synthesis, and video stitching with FFmpeg. It also features a text-to-documentary skill that converts long-form text into structured documentary videos.MIT
- FlicenseNot gradedqualityDmaintenanceA local MCP server that gives Claude Desktop full video editing capabilities via FFmpeg, Whisper, and yt-dlp.-
- AlicenseAqualityDmaintenanceEnables LLMs to perform FFmpeg operations like clipping, merging, extracting audio, adding subtitles, and transcoding videos via a set of tools exposed as an MCP server.58MIT