# Features: every video editing tool your agent gets (72 tools)

> Everything cuttingfloor can do, in plain words: cut by transcript, captions, voiceover, stems, mixing and loudness, effects, motion graphics, background removal, checks and export to MP4, FCPXML, OTIO and EDL. All 72 MCP tools listed.

Canonical: https://cuttingfloor.ai/features · Updated 2026-11-01

cuttingfloor is an open-source video editing MCP server: connect Claude, ChatGPT, Cursor or Kazi and your agent gets 72 editing tools. It cuts by what was said, captions, mixes and levels the sound, makes graphics and voiceovers, checks its own work and exports an MP4 or the edit for your editing app.

## Cut and arrange

Every cut a video editor makes, as a tool your agent calls. Each edit makes a new version, and every earlier version stays, so going back is one step.

- Cut by words: pick a line from the transcript, from one word to another, and it lands on the timeline as a clip. (`media.analyze`, `clip.add`)
- Cut out pauses, ums, mistakes or any stretch of time across every track at once, closing the gap. (`range.extract`, `range.lift`)
- Place, move, trim, split and remove clips; trim only the sound for J and L cuts. (`clip.add`, `clip.move`, `clip.trim`, `clip.split`, `clip.remove`)
- Choose between takes: compare their transcripts and frames, keep the best and swap footage in place without losing the timing or look. (`judge.ask`, `clip.replace`)
- Roll, slip and slide edits: move a cut, show a different part of a clip, or move a clip between its neighbours. (`clip.roll`, `clip.slip`, `clip.slide`)
- Speed: faster, slower, a speed ramp over the clip, or reverse, with the pitch kept. (`clip.set_speed`)
- Freeze frames: hold any frame for as long as you like. (`clip.freeze`)
- Nesting: drop one edit into another of the same size and frame rate as a single clip. (`clip.add`)
- Tracks: add, remove, mute, hide and lock video and audio tracks; link picture and sound so they move together. (`track.add`, `track.set`, `clip.link`, `clip.unlink`)
- Change size and frame rate at any point, e.g. 16:9 to 9:16 for Shorts, Reels and TikTok, keeping every clip in time. (`timeline.set_sequence`)
- Many edits as one change, all or nothing, with one preview. (`edit.batch`)

## Captions and text

Captions come from the transcript, so they land on the words and follow every cut and speed change.

- Captions from the transcript, an SRT or a VTT, burned into the export. (`caption.add`)
- Word highlights as each word is said: fill, word, karaoke, pop. (`caption.add`, `text.set`)
- Titles with font, size, colour, outline, shadow and box, revealed by typewriter, word fade, word pop. (`title.add`)
- Restyle every caption on a track at once, or change any title’s words. (`text.set`)
- Use your own fonts: import a .ttf or .otf file. (`media.import`, `text.set`)
- Export captions as SRT or VTT files. (`export.timeline`)

## Audio and voice

Voice, music and sound get the same care as the picture: words timed, stems split, levels ridden, effects on, and the loudness measured after every change.

- Transcripts with a time on every word (Whisper). For English the word edges are aligned to the sound, to about 0.05 s; other languages keep Whisper’s timing. (`media.analyze`)
- Voiceover from English text in a natural voice (Kokoro), with every word timed, so captions and cuts land on it. (`create.voiceover`)
- Stems: split any sound into voice, drums, bass and everything else (Demucs), or everything but the voice in one file. Lose the music under an interview, or keep only the music. (`create.stems`)
- Volume rides with keyframes, pan left to right, and fades in and out. (`audio.set_gain`, `audio.set_pan`, `audio.fade`)
- Duck the music under speech: speech spans from the voice-activity detector become gain keyframes on the music. (`media.analyze`, `audio.set_gain`)
- Sound effects: equalizer, compressor, noise reduction, voice denoise, de esser, dialogue enhance, reverb, echo, pitch, highpass, lowpass, telephone, dereverb, channels. EQ, compressor, denoise (including a neural voice cleaner for speech) and pitch, on a clip, a track or the whole mix. (`filter.add`)
- Master gain and a peak limiter on the whole mix. (`audio.set_master`)
- Loudness measured and shown: every audio edit previews as a waveform with its loudness; checks give integrated loudness (LUFS), true peak (dBTP) and loudness range. (`audio.set_gain`, `qa.check`, `media.analyze`)
- Listen for sounds you describe in plain words: laughter, applause, a cough, a door, music starting. Or find 447 named sounds as data. (`media.listen`, `media.analyze`)
- Line up a camera with a separate microphone, or two cameras, from their sound. (`media.correlate`)
- Lip-sync: redraw a speaker’s mouth to match new words, to fix a line without a reshoot. Runs on your own sync. labs key. (`create.lipsync`)

## Look and effects

Grade it, key it, mask it, animate it. Effects go on a clip, a track or the whole video, and any number can change over time with keyframes.

- Picture effects: brightness contrast, saturation, exposure, temperature, hue, vibrance, curves, lut, grayscale, sepia, invert, blur, sharpen, vignette, grain, chromatic aberration, pixelate, glitch, denoise, chroma key, lens correction, directional blur. Colour, LUTs (.cube), blur, vignette and chroma key (green screen) among them. (`filter.add`, `filter.set`)
- Grade or blur everything underneath for a stretch of the video with an adjustment clip. (`adjustment.add`)
- Picture-in-picture, overlays and punch-ins: position, scale, rotate, crop, flip and fade, animated with keyframes and eases. (`clip.set_transform`)
- Masks: rectangle, ellipse, linear, mirror, heart, star, polygon, matte, with feather and invert, animated. (`clip.set_mask`)
- Blend modes: normal, add, multiply, screen, overlay, darken, lighten, color dodge, color burn, hard light, soft light, difference, exclusion. (`clip.set_blend`)
- Entrance and exit animations (fade, zoom in, zoom out, slide left, slide right, slide up, slide down, pop, spin, drop) and loops (pulse, sway, shake, float, spin, flicker). (`clip.set_animation`)
- Transitions at a cut: dissolve, dip to black, dip to white, wipe left, wipe right, wipe up, wipe down, slide left, slide right, slide up, slide down, push left, push right, push up, push down, zoom in, zoom out, iris, spin. Linked sound crossfades at the same cut, and a sound-only crossfade is there too. (`transition.add`, `transition.set`, `transition.remove`)
- Pin a title, sticker or mask to a moving subject from its tracked position; reframe wide shots to vertical around the faces. (`media.analyze`, `clip.set_transform`)

## Create from nothing

No footage needed. Your agent writes the graphics as HTML and they render frame-exactly; voice and backgrounds are made on the server.

- Motion graphics from animated HTML, with transparency: lower thirds, animated titles, callouts, logo stings, kinetic type. Up to 60 seconds each. (`create.motion`)
- Stills from HTML as PNG, transparent where nothing is painted: title and end cards, thumbnails, overlays. (`create.still`)
- Mattes: solid colours and gradients for backgrounds and colour washes. (`create.matte`)
- Voiceover with timed words. (`create.voiceover`)
- Background removal for people (fast enough for long video) or any subject: products, animals, objects. Video comes out with transparency and its sound. (`create.cutout`)
- Stabilize shaky handheld footage. (`create.stabilized`)

## Analyze and judge

Your agent can’t watch every second of your footage, so the server reads it and returns data it can cut on.

- Analyses: transcript, beats, faces, track, look, silence, scenes, speech, loudness, sounds, speakers, voice, colour, picture. Cut on beats, reframe on face boxes, follow a tracked object, find silences and scene changes. (`media.analyze`)
- Find moments in plain words: “where the demo starts”, “a wide shot of a city street at night”, “frames too dark to see the faces”. In a file or in the edit as it renders. (`media.seek`)
- Typed visual judgments: yes or no, one of your choices, a score, or a box around something, about frames, stills and text, in about a second. (`judge.ask`)
- Ask the same questions of frames sampled across a whole video. (`media.analyze`)

## Review

Every edit can come back with a picture of the result, so your agent sees what it made and fixes it before you watch.

- A preview with every edit: frames of the picture, or a waveform with loudness for sound. (`clip.add`, `audio.set_gain`)
- Frames of the edit or any file, as a contact sheet or full-size stills; transparency shown honestly over a checkerboard. (`render.frames`)
- A small, quick review render to watch the cut with sound. (`export.video`)
- QA checks on the render: gaps, missing media, frame count, loudness and true peak, black and silent stretches, and, cut by cut, whether it lands while someone is speaking or clips a word. (`qa.check`)
- What changed between two versions, and the full history of edits to step back through. (`timeline.diff`, `timeline.history`)

## Export

Get a video to post, or take the edit into the editing app you already use and keep going by hand.

- Presets: web_1080p_h264, master_prores_422hq, social_9x16_h264, web_1080p_av1, gif, review_h264, audio_wav_48k, audio_mp3. MP4 (H.264 or AV1), vertical 9:16, ProRes, GIF, WAV and MP3; size, frame rate and bitrate can be changed. (`export.video`)
- The edit for your editing app: fcpxml, otio, edl, srt, vtt. FCPXML for Final Cut Pro and DaVinci Resolve, OTIO for Premiere and Resolve, EDL, and captions as SRT or VTT, optionally zipped with the media. (`export.timeline`)
- A download link and a page to watch it in any browser, to share. (`export.video`, `media.get`)

## Media, timelines and jobs

Bring footage in, keep track of it, and follow long jobs. Media is kept 7 days after last use, timelines a day; save the edit and load it back any time.

- Import video, audio, images and fonts from a link (Dropbox and Google Drive share links work), an upload from your computer, or a file dropped on your account page. (`media.import`, `media.upload`, `media.list`)
- Phone footage is fixed on import: variable frame rate, rotation and HDR are conformed. (`media.import`)
- Save an edit and bring it back later. (`timeline.get`, `timeline.load`)
- Long jobs (imports, renders, analyses) run in the background with progress, and can be cancelled. (`job.get`, `job.list`, `job.cancel`)
- Skills: step-by-step instructions for common jobs, found by your agent in your own words. (`skills.search`, `skills.get`)

## What needs your own key

| Feature | Tools | Hosted | Self-hosted |
| --- | --- | --- | --- |
| Lip-sync (redraw a speaker’s mouth to new words) | `create.lipsync` | Your own sync. labs key, saved on your account page or sent as a header. sync. labs bills you per second. | Your own sync. labs key as SYNC_API_KEY. |
| Visual judgment: questions about frames, looking across a video, finding moments in plain words | `judge.ask`, `media.analyze (look)`, `media.seek` | Included. No key. | A TypeSafe key as TYPESAFE_API_KEY (typesafe.ai). |

No key, hosted or self-hosted:

- Transcripts with word times (whisper.cpp)
- Voiceover with timed words (Kokoro)
- Background removal for people or any subject (MODNet, BiRefNet)
- Voice, drums, bass and music split apart (Demucs)
- Stabilizing shaky footage (vid.stab)
- Motion graphics and stills from HTML, with transparency
- Beats, faces, object tracking, silences and scene changes
- Every edit, effect, caption, mix and export (FFmpeg and MLT)

Plans and what they include: https://cuttingfloor.ai/pricing

## All 72 tools

| Tool | What it does | Group | Runs | Your key |
| --- | --- | --- | --- | --- |
| `timeline.set_sequence` | Change the size, frame rate or sound format, e.g. vertical for Shorts. | Cut and arrange | At once | None |
| `track.add` | Add a video or audio track. | Cut and arrange | At once | None |
| `track.remove` | Remove a track and what is on it. | Cut and arrange | At once | None |
| `track.set` | Rename, mute, hide or lock a track. | Cut and arrange | At once | None |
| `clip.add` | Put a video, sound, picture or a run of spoken words on the timeline. | Cut and arrange | At once | None |
| `clip.remove` | Take a clip out, closing the gap or leaving it. | Cut and arrange | At once | None |
| `clip.move` | Move a clip to another time or track. | Cut and arrange | At once | None |
| `clip.trim` | Shorten or lengthen a clip from either end, or just its sound (J and L cuts). | Cut and arrange | At once | None |
| `clip.split` | Cut a clip in two at a frame. | Cut and arrange | At once | None |
| `clip.link` | Make clips move, trim and split together, like picture and its sound. | Cut and arrange | At once | None |
| `clip.unlink` | Let linked clips move on their own again. | Cut and arrange | At once | None |
| `clip.set_enabled` | Turn a clip off without removing it. | Cut and arrange | At once | None |
| `clip.set_speed` | Speed up, slow down, ramp or reverse a clip, keeping the pitch. | Cut and arrange | At once | None |
| `clip.freeze` | Hold one frame as a freeze frame. | Cut and arrange | At once | None |
| `clip.roll` | Move the cut between two clips (a roll edit). | Cut and arrange | At once | None |
| `clip.slip` | Show an earlier or later part of a clip in the same spot (a slip edit). | Cut and arrange | At once | None |
| `clip.slide` | Move a clip between its neighbours, which give and take the time (a slide edit). | Cut and arrange | At once | None |
| `clip.replace` | Swap the footage in a clip, keeping its place, length and look. | Cut and arrange | At once | None |
| `range.lift` | Clear a stretch of time on every track, leaving a gap. | Cut and arrange | At once | None |
| `range.extract` | Cut a stretch of time out of every track and close the gap. | Cut and arrange | At once | None |
| `edit.batch` | Make many edits as one change, all or nothing. | Cut and arrange | At once | None |
| `title.add` | Add a styled title, with a typewriter or word-by-word reveal. | Captions and text | At once | None |
| `caption.add` | Add captions from the transcript, an SRT or a VTT, with word highlights. | Captions and text | At once | None |
| `text.set` | Change the words or restyle many titles and captions at once. | Captions and text | At once | None |
| `audio.set_gain` | Set a clip’s volume, or ride it up and down with keyframes. | Audio and voice | At once | None |
| `audio.set_pan` | Place a sound left or right. | Audio and voice | At once | None |
| `audio.fade` | Fade a sound in or out. | Audio and voice | At once | None |
| `audio.set_master` | Set the gain and peak limiter on the whole mix. | Audio and voice | At once | None |
| `media.correlate` | Find how far apart two recordings are, to line up a camera and a mic. | Audio and voice | At once, or a job when long | None |
| `media.listen` | Find when a sound you describe can be heard: laughter, a cough, applause. | Audio and voice | Background job | None |
| `create.voiceover` | Turn English text into a natural voiceover, every word timed. | Audio and voice | Background job | None |
| `create.stems` | Split sound into voice, drums, bass and everything else. | Audio and voice | Background job | None |
| `create.lipsync` | Redraw a speaker’s mouth to match new words (your own sync. labs key). | Audio and voice | Background job | Hosted and self-hosted |
| `filter.add` | Add a picture or sound effect to a clip, a track or the whole video. | Look and effects | At once | None |
| `filter.set` | Change an effect’s settings, or switch it off and on. | Look and effects | At once | None |
| `filter.remove` | Take an effect off. | Look and effects | At once | None |
| `adjustment.add` | Grade or blur everything underneath for a stretch of the video. | Look and effects | At once | None |
| `transition.add` | Add a dissolve, dip, wipe, slide, push, zoom, iris or spin at a cut. | Look and effects | At once | None |
| `transition.set` | Change a transition’s kind or length. | Look and effects | At once | None |
| `transition.remove` | Turn a transition back into a hard cut. | Look and effects | At once | None |
| `clip.set_transform` | Position, scale, rotate, crop, flip or fade a clip, animated with keyframes. | Look and effects | At once | None |
| `clip.set_blend` | Blend a clip with what is below: multiply, screen, overlay and more. | Look and effects | At once | None |
| `clip.set_mask` | Show only part of a clip through a shape, soft-edged or inverted. | Look and effects | At once | None |
| `clip.set_animation` | Add an entrance, exit or looping animation such as pop or float. | Look and effects | At once | None |
| `create.motion` | Turn animated HTML into a motion graphic with transparency. | Create from nothing | Background job | None |
| `create.still` | Turn an HTML page into a PNG: a title card, thumbnail or overlay. | Create from nothing | Background job | None |
| `create.matte` | Make a solid colour or gradient background. | Create from nothing | Background job | None |
| `create.cutout` | Remove the background from a person, product or object. | Create from nothing | Background job | None |
| `create.stabilized` | Steady shaky footage. | Create from nothing | Background job | None |
| `create.upscaled` | Enlarge low-resolution footage with detail drawn in. | Create from nothing | Background job | None |
| `media.analyze` | Read footage as data: transcript, beats, faces, tracking, silences, scenes, speech, loudness, sounds. | Analyze and judge | Background job | Self-hosted only: look |
| `media.seek` | Find the moments that match what you describe in plain words. | Analyze and judge | Background job | Self-hosted only |
| `judge.ask` | Get typed answers (yes/no, a choice, a score, a box) about frames and text. | Analyze and judge | At once | Self-hosted only |
| `timeline.history` | List the edits that made this version, to step back to any of them. | Review | At once | None |
| `timeline.diff` | Show what changed between two versions of the edit. | Review | At once | None |
| `render.frames` | See frames of the edit or a file, as a contact sheet or full-size stills. | Review | At once | None |
| `qa.check` | Measure the render: gaps, missing media, loudness, true peak, black and silent stretches, cuts mid-word. | Review | At once, or a job when long | None |
| `export.video` | Render the edit to MP4, MOV, GIF, WAV or MP3. | Export | Background job | None |
| `export.timeline` | Hand the edit to Final Cut Pro, Premiere or Resolve (FCPXML, OTIO, EDL), or the captions as SRT/VTT. | Export | Background job | None |
| `timeline.create` | Start an empty edit at a size and frame rate. | Media, timelines and jobs | At once | None |
| `timeline.get` | Read the whole edit: tracks, clips and media. | Media, timelines and jobs | At once | None |
| `timeline.load` | Bring back a saved edit. | Media, timelines and jobs | At once | None |
| `media.import` | Bring in your video, audio, image or font from a link, an upload or a path. | Media, timelines and jobs | Background job | None |
| `media.upload` | Get a link to send a file from your computer. | Media, timelines and jobs | At once | None |
| `media.list` | List your media and uploads, with storage used. | Media, timelines and jobs | At once | None |
| `media.delete` | Delete a file for good. | Media, timelines and jobs | At once | None |
| `media.get` | A file’s details, a download link and a page to watch it. | Media, timelines and jobs | At once | None |
| `job.get` | Check on an import, render or other long job. | Media, timelines and jobs | At once | None |
| `job.list` | List recent jobs. | Media, timelines and jobs | At once | None |
| `job.cancel` | Stop a running job. | Media, timelines and jobs | At once | None |
| `skills.search` | Find step-by-step instructions for a common job. | Media, timelines and jobs | At once | None |
| `skills.get` | Read one skill in full. | Media, timelines and jobs | At once | None |
