NestDaddy

cuttingfloor

io.github.Mvp2o-ai/cuttingfloor · v0.45.3

Hosted video editing for AI agents: cut, caption, mix and export real video. Sign in with OAuth.

Connect Remote server

Terminal
claude mcp add --transport http cuttingfloor https://api.cuttingfloor.ai/mcp
~/.cursor/mcp.json
{
  "mcpServers": {
    "cuttingfloor": {
      "url": "https://api.cuttingfloor.ai/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "cuttingfloor": {
      "type": "http",
      "url": "https://api.cuttingfloor.ai/mcp"
    }
  }
}
Claude Desktop
Settings > Connectors > Add custom connector
URL: https://api.cuttingfloor.ai/mcp

Tools 72 found in our last check

  • timeline.create

    Start an empty timeline. Returns its timeline_id and its tracks (ids for track_id). Timelines are immutable: every edit returns a new timeline_id, and older ids stay valid for 24 hours after last use. For work longer than a day, keep the timeline.get document on your side and re…

  • timeline.get

    The full timeline: tracks, clips (frames, end exclusive), link groups and the media it uses. The server keeps a timeline 24 hours after last use: for work longer than a day, save this document on your side (it is the edit) and restore it with timeline.load.

  • timeline.load

    Restore a timeline from the document timeline.get returned, e.g. after it expired (24 h after last use). Its media must still be here: media expires 7 days after last use, so import saved files again with media.import and swap them in with clip.replace.

  • timeline.history

    The chain of edits that made this timeline, newest first. To go back, keep using an older timeline_id.

  • timeline.diff

    Which clips, tracks and settings differ between two timelines.

  • timeline.set_sequence

    Change resolution, frame rate or audio format. Clip times are kept in time, so they survive a rate change. Each picture is refitted to the new shape by its fit (contain by default, which leaves bars where the shapes differ); the result warns how many clips no longer fill the fra…

  • track.add

    Add an empty video or audio track. New video tracks go on top. Returns the edit result (see the server instructions).

  • track.remove

    Remove a track and its clips. Returns the edit result (see the server instructions).

  • track.set

    Rename, mute (audio), hide (video) or lock a track. Returns the edit result (see the server instructions).

  • clip.add

    Place media on the timeline. A/V media lands as a linked pair on a video and an audio track. Default: the whole media, after the last clip, overwriting. A picture is scaled to fit the frame (a small logo fills it edge to edge); clip.set_transform {fit: "none"} keeps its own pixe…

  • clip.remove

    Remove a clip and the clips linked to it; ripple closes the gap. Returns the edit result (see the server instructions).

  • clip.move

    Move a clip (and its linked clips) to a frame and optionally another track. Returns the edit result (see the server instructions).

  • clip.trim

    Move the start or end edge of a clip. side: video or audio trims one half of a link group (J/L cuts). Returns the edit result (see the server instructions).

  • clip.split

    Cut a clip (and its linked clips) in two at a frame. Returns the edit result (see the server instructions).

  • clip.link

    Make clips move, trim and split together. Returns the edit result (see the server instructions).

  • clip.unlink

    Break the link group a clip belongs to. Returns the edit result (see the server instructions).

  • clip.set_enabled

    A disabled clip stays on the timeline but renders as a gap. Returns the edit result (see the server instructions).

  • clip.set_speed

    Speed up, slow down, ramp or reverse a clip and its linked clips. rate is constant; curve is a speed ramp over the clip. The clip keeps its source and its length changes; ripple (default) moves later clips. Pitch is kept unless preserve_pitch is false. Returns the edit result (s…

  • clip.freeze

    Hold the frame at at_frame for duration_frames: the clip splits there, a freeze frame goes in, and later clips on its tracks move later. Freezing a clip's last frame holds it after the clip, with silence under the hold. Returns the edit result (see the server instructions).

  • clip.roll

    Move the cut between a clip and the clip right after it: one gets longer, the other shorter, nothing else moves. Returns the edit result (see the server instructions).

  • clip.slip

    Show earlier or later source in a clip without moving or resizing it. Returns the edit result (see the server instructions).

  • clip.slide

    Move a clip between its neighbours: the clip before it and the clip after it change length so nothing else moves. Returns the edit result (see the server instructions).

  • clip.replace

    Swap the media in a clip, keeping its place, length, speed and look. Starts at source_in (default 0). Its linked clips swap too (linked: false for this clip only); clip_ids lists every clip swapped. Returns the edit result (see the server instructions).

  • range.lift

    Remove everything in a frame range on the given tracks (default all unlocked, so a picture range takes the sound under it too: lock a track with track.set or name track_ids to keep it), leaving a gap. changed lists each clip removed or cut, with its track; a warning says when so…

  • range.extract

    Remove everything in a frame range on the given tracks (default all unlocked, so a picture range takes the sound under it too: lock a track with track.set or name track_ids to keep it) and close the gap. For cutting out silences, filler words or mistakes across all tracks at onc…

  • title.add

    Text on a video track, over the tracks below: styled with font, size, colour, outline, shadow and box, placed by x/y, revealed with a typewriter or word animation. A style field you leave out takes the published default (video://catalog/text: bold white Inter at 9% of the frame…

  • caption.add

    Captions on a video track from segments (with optional word timings for highlights), from SRT/VTT text, or in_clip: segments timed in seconds of a clip's media, such as transcript word times, placed where they play. One clip per caption; returns their clip_ids. A style field you…

  • text.set

    Change a title's or caption's text, or restyle many at once (clip_ids, or every one on track_id). The style is merged; null turns an outline, shadow, box or highlight off (and max_lines back to all lines). spans (one clip) restyle part of its text. Fonts: video://catalog/fonts,…

  • audio.set_gain

    Volume of an audio clip (or a video clip's linked audio) in dB; keyframes ride it up and down. The preview is a waveform of the clip; with preview inline it also carries the measured loudness (preview.loudness), a link preview does not. Returns the edit result (see the server in…

  • audio.set_pan

    Place a clip's sound left (-1) to right (1). Returns the edit result (see the server instructions).

  • audio.fade

    Fade a clip's sound in from its start and out to its end. null removes a fade. Returns the edit result (see the server instructions).

  • audio.set_master

    Gain (dB) and limiter ceiling on the whole mix. The ceiling caps sample peaks (dBFS); the true peak between samples can land above it, most on dense, bright sound, and qa.check measures it (dBTP). Audio edits with preview inline carry the measured loudness (preview.loudness); a…

  • filter.add

    Apply an effect to a clip, every clip on a track, or the whole timeline: picture effects (colour, LUT, blur, vignette, chroma key, glitch, denoise and more) on video, sound effects (EQ, compressor, noise_reduction, voice_denoise, pitch and more) on audio. Order matters: effects…

  • filter.set

    Change an effect's params (merged) or turn it off and on. Returns the edit result (see the server instructions).

  • filter.remove

    Take an effect off. Returns the edit result (see the server instructions).

  • adjustment.add

    An empty clip on a video track whose effects (filter.add with its clip_id) change everything below it while it runs: a colour grade or blur over a stretch of the edit. Returns the edit result (see the server instructions).

  • transition.add

    Transition at the cut after a clip, into the clip that touches it (video://catalog/transitions). Linked audio gets a crossfade at the same cut. kind crossfade is sound only: on a video clip it crossfades the linked audio and the picture cuts hard (use mode handles for that). mod…

  • transition.set

    Change a transition's kind or duration. Returns the edit result (see the server instructions).

  • transition.remove

    Remove a transition; the cut becomes a hard cut. Returns the edit result (see the server instructions).

  • clip.set_transform

    Position, scale, rotate, fade, flip, crop or fit a video clip over the tracks below (picture-in-picture, overlays, punch-ins). fit none shows a graphic at its own pixel size, so scale 1 is its real size; the default contain scales it to touch the frame edges. Any number takes a…

  • clip.set_blend

    How a video clip mixes with the tracks below: normal, multiply, screen, overlay and more (video://catalog/blend_modes). Returns the edit result (see the server instructions).

  • clip.set_mask

    Select part of a video clip, then show, hide or fill it: rectangle (rounded), ellipse, linear, mirror, heart, star, polygon or matte (a media's alpha, e.g. a create.cutout), with feather and invert. Several shapes: add. A fill paints the selection from the picture around it and…

  • clip.set_animation

    Entrance, exit and loop presets layered over the clip transform (video://catalog/animations): e.g. in {name: "pop", duration_frames: 12}, loop {name: "float"}; a loop runs the whole clip, or only from_frame to to_frame of it (loop {name: "shake", from_frame: 30, to_frame: 45} fo…

  • edit.batch

    Apply many edits as one change: one new timeline_id, one preview. All apply or none do. Use {"$ref":"ops[N].clip_id"} (or track_id, clip_ids[M]) to use an id an earlier op made. Returns the edit result plus results: [{tool, clip_id?, clip_ids?, track_id?}] per op.

  • media.import

    Import the user's own video, audio, image or font to edit with or place as is: probe, fingerprint, conform if needed (VFR, rotation, HDR → BT.709), 540p proxy and integrated loudness. A reference image to recreate needs no import: rebuild it with create.motion or create.still. L…

  • media.upload

    A link to send one of the user's files to this server, for files on their phone or computer that the server can't read, including a file attached in the chat that the chat app doesn't hand you. Give the user the url: they open it on their phone or computer and pick the file; the…

  • media.list

    What the user has here: imported and created media, and files they sent that aren't imported yet (through media.upload's link, or dropped on the cuttingfloor site), with names, sizes and when each expires, plus this account's storage used and how much it holds. When the user men…

  • media.delete

    Delete a media for good, so an old or wrong version stops turning up: its file here, proxy, mezzanine and media.analyze results go, and its room comes back to this account’s storage. A path import leaves the original in its folder; exports made from it stay. Timelines that use i…

  • media.analyze

    Find what is in imported media, or in the sound of an edit, as data for edits. transcript: every word with its time (whisper.cpp on the CPU; the model downloads once). For English the word edges are then aligned to the sound (wav2vec2 forced alignment): a word starts and ends wi…

  • media.correlate

    Find how far one recording sits from another: the sync offset of b against a, by cross-correlating their sound, with how strongly they match. Use it to line up a camera with a separate microphone, two cameras of the same moment, or a re-recorded line against the original. Each s…

  • media.get

    Status, where it came from (origin: the import source, the export of which timeline_id and preset, or the create.* tool and the media it was made from), a signed download url for the file (media is kept 7 days after last use: save the file from it to keep it, and media.import it…

  • media.seek

    Find the moments in a video, or in an edit as it renders, that match what you describe in plain words, so you go straight to them instead of watching it all. Name each criterion and say what a matching frame shows; you get back the stretches of time where each one holds, with th…

  • media.listen

    Find when something can be heard in a video or audio file, or in an edit as it plays, from what you describe in plain words, so you go straight to it instead of listening to it all: laughter, applause, a cough, a door slamming, a phone ringing, a dog barking, music starting, som…

  • judge.ask

    Answer your questions about text and pictures you give (yes or no, a choice, a score, or where something is in a picture), as typed answers in about a second. It asks TypeSafe Jev, a fast judgment model (preview). Jev sees exactly the state: each entry under its name, and your q…

  • create.motion

    Render animated HTML to a video with alpha, frame-exactly: lower thirds, animated titles, callouts, logo stings, kinetic type, generated graphics. Place the media_id with clip.add on a track above the video. Up to 60 s, and width × height × fps × seconds up to 30 s of 1080p30. R…

  • create.still

    Render an HTML page to a PNG: title and end cards, thumbnails, overlays, designed text. Transparent where nothing is painted. Capture waits for fonts, and for window.__ready if the page sets it to a promise (up to 10 s). Runs in the sandbox: no network (inline everything, load l…

  • create.matte

    A solid or gradient picture (PNG, any length on a timeline): backgrounds, slugs, colour washes with clip.set_blend. Gradients work like CSS: angle 180 runs top to bottom; radial reaches the corners; colours may carry alpha (#RRGGBBAA). Long-running like every create.* tool, but…

  • create.voiceover

    English text spoken by a natural voice (Kokoro, local; the model downloads once) as WAV media. words (default) times each word into the media transcript (media.get include transcript). Long-running: a task, or {job_id, media_id} for job.get.

  • create.cutout

    A subject without its background, local: ProRes 4444 with alpha and the sound, or a PNG, to lay over a new background. subject any (BiRefNet) cuts out products, animals or objects; people (MODNet) is fast enough for long video. region: one item by its bounds, followed; also a cl…

  • create.stabilized

    A steadied copy of shaky video, local (vid.stab): one pass measures the camera shake over the whole media, a second moves each frame against a smoothed camera path. New media, ProRes with the sound, to put on the timeline in place of the shaky clip (clip.replace keeps its place…

  • create.upscaled

    A larger copy of low-resolution video or an image with detail drawn in, local: Real-ESRGAN (realesr-general-x4v3, on the CPU) makes each frame four times the size, then it is resized to scale. Slow: on 8 cores about 1 s a frame for 320x180, 2.5 s for 640x360. Sources up to 1280x…

  • create.stems

    The sound of a video or audio file pulled apart into stems, each new audio media for clip.add: vocals (voices, spoken or sung), drums, bass, other (everything else: guitars, keys, effects, room noise) and no_vocals (all but the voice, in one file). Laid together at the same time…

  • create.lipsync

    Make a person on camera say different words: their mouth is redrawn to match the speech you give (a re-recorded line, a create.voiceover, a word taken from elsewhere in the take). Runs at the user's lip-sync provider on their own key (sync. labs), and the provider bills them for…

  • render.frames

    Look at a timeline (or a media file): up to 16 frames as one contact-sheet image (layout grid) or one image each (single). Media frames are numbered at the media frame rate; a picture that can be see-through (alpha or a palette) is shown over a light checkerboard, so transparenc…

  • export.video

    Render the timeline to a file. Presets: web_1080p_h264 (MP4, fits 1920x1080), master_prores_422hq (MOV, sequence size), social_9x16_h264 (9:16 sequences, 1080x1920), web_1080p_av1 (MP4, AV1/Opus), gif (640 px, 15 fps), review_h264 (MP4, fits 854x854 with sound: small and quick,…

  • qa.check

    Measure the rendered timeline: gaps in the picture, offline media, rendered against expected frame count, integrated loudness (LUFS) and true peak (dBTP), plus black and silent stretches when you give their settings. With speech {min_probability}, every cut is listed with speech…

  • job.get

    Status, progress and, once completed, the result of long-running calls (media.import, media.analyze, create.*, export.video, qa.check). Same record as tasks/get. status_message says what it is doing, or where it stands in the queue; for names the media or timeline. wait_seconds…

  • job.list

    Your recent jobs, newest first, each with its status, progress and for (the media or timeline it is for), filtered by status, tool or media_id. Results are left out unless you ask (result summary or full); job.get reads one.

  • job.cancel

    Stop a job, queued or running, within seconds: its engines are killed and its slot goes to the next job. Finished jobs are left as they are.

  • export.timeline

    Write the edit for another editor: fcpxml (Final Cut Pro, DaVinci Resolve), otio (Premiere, Resolve, OpenTimelineIO apps), edl (CMX 3600, one video track), or srt/vtt (the captions). Best effort: warnings lists what the format could not carry (masks, blend modes, effects, animat…

  • skills.search

    Find step-by-step instructions for a common job, written for you to follow with these tools: cutting the pauses, ums and restarts out of a talking video, for one. Search in the user's words; every skill comes back best first with its score (roughly 0 to 1). Below 0.1 is unrelate…

  • skills.get

    The whole skill as Markdown: when to use it, what it needs, numbered Steps naming the tools to call, a decision table and the rules to keep. Follow the Steps in order.

Details

Endpointhttps://api.cuttingfloor.ai/mcp (Streamable HTTP)
First published12 Nov 2026
Last updated12 Nov 2026
Registry nameio.github.Mvp2o-ai/cuttingfloor

More ai and media servers See all

Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.