Skip to main content
Glama

claudeclip

CI

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

get_video_info

Duration, resolution, fps, codecs, bitrate, file size

sample_frames

Contact sheet of timestamped frames — lets Claude see the video before editing

detect_scenes

Timestamps of cuts/shot changes, ready to feed into trims

detect_silence

Silent stretches plus the non-silent segments to keep (cut dead air)

trim_video

Cut to a time range — frame-accurate re-encode, or instant fast_copy

concat_videos

Join clips in order, with hard cuts or crossfades; mixed resolutions/frame rates are normalized automatically

convert_video

Re-encode to mp4 / webm / mov / mkv with a quality preset

resize_video

Scale by width, height, or percentage (aspect ratio preserved)

crop_video

Crop a rectangle out of the frame

compress_video

Shrink to an approximate target size in MB, or general-purpose compression

change_speed

0.25x–4x playback speed, audio pitch preserved

rotate_video

Rotate 90/180/270° and/or mirror horizontally/vertically

add_fade

Fade in from black / out to black, video and audio

reverse_video

Play backwards (best for short clips)

loop_video

Repeat N times or until a target duration, no re-encode

adjust_colors

Brightness, contrast, saturation (saturation 0 = black & white)

stack_videos

Side-by-side, vertical, or grid comparison layouts

picture_in_picture

Overlay a video in a corner (webcam/reaction style)

video_from_images

Slideshow from images, optional soundtrack

create_gif

Palette-optimized animated GIF from a clip

extract_frame

Save a still frame as jpg/png (thumbnails, covers)

extract_audio

Audio track out to mp3 / wav / m4a / flac

remove_audio

Strip audio without re-encoding

replace_audio

Swap in music or a voiceover, optionally looped to fit

adjust_volume

Louder/quieter by a multiplier

normalize_audio

EBU R128 loudness normalization (podcast/social levels)

add_text_overlay

Captions/titles: position presets, color, background box, show/hide times

add_watermark

Image/logo overlay with size and opacity

draw_box

Rectangle outline or filled box for highlighting/redacting, with time window

blur_region

Blur or pixelate a region (faces, plates, names), with time window

burn_subtitles

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 install always 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 is FFMPEG_PATH/FFPROBE_PATH env 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 build

Connect to Claude

Claude Cowork / Claude Desktop

Add the server to your Claude config file:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/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.js

Example prompts

  • "How long is C:\Videos\demo.mp4 and what resolution is it?"

  • "Cut talk.mp4 from 12:30 to 14:00 and compress the result to about 25 MB"

  • "Join these three clips and add my logo.png as a watermark in the bottom right"

  • "Make a 5-second GIF of the goal at 1:23, 480px wide"

  • "Replace the audio in timelapse.mp4 with song.mp3, looped to fit"

  • "Burn episode1.srt into 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.mp4 and webcam.mp4 side 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 tool

License

MIT

Available Tools

31 tools
add_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

    A3.7/5.0

    Scored across 31 tools

    Disambiguation5/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness5/5

    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

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An 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
    • A
      license
      A
      quality
      D
      maintenance
      Enables 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.
      5
      8
      MIT