Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

FableCut

NPM · FABLECUT · 2 COMPONENTS

Zero-dependency browser video editor AI agents drive via a JSON timeline over MCP; ffmpeg export.

79 Trust /100

Last scanned (9 hours ago)

Scores higher than 59% of npm servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to ronak-create/FableCut). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 4 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability60
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6201 tokens (~442/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 14 Oct 26 +29
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: excellent functional
    • First check of Destructive annotations: pass functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 100 functional
  • 12 Oct 26 50

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 17 Oct 2026 · Analysed npm/fablecut@1.14.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo ronak-create/FableCut
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/ronak-create/FableCut/.github/workflows/publish-npm.yml@refs/tags/v1.14.0
Rekor log index 3225846763
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:bbfae6a2c19c20b4f4e390c3b37beffd0dedd886fc7435127ca9bb087fadfcbd7a69ac1e6b3426925d19cd34878d142de316c4029d6bf9eea46f13753

Background: How many MCP packages publish verified provenance →

Dependencies 0 packages
Packages resolved 0
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 14 exposed · ~6,201 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
fablecut_analyze_reference ~276

Analyze a reference video into an EDIT BLUEPRINT so a similar edit can be rebuilt with different footage over the same music. Returns: shot boundaries (cuts) with per-shot audio energy, music beats + BPM, a loudness curve, the detected drop, and extracts the reference's music track into media/ (registered in the project, ready to place on A1). Remake recipe: copy the reference's width/height/fps to the project, write `beats` into project `markers`, lay the extracted music on A1, then place one clip per blueprint `shot` at the same start/duration — pick calm footage for low-energy shots and action for high-energy ones, and make the biggest moment land on `drop`. See the 'Remake a reference video' section of fablecut_docs.

NameTypeReqDescription
pathstringyesThe reference video: an absolute file path (copied into media/ automatically) or an existing '/media/…' src
registerMusicboolean–Extract the reference's music and register it as project media (default true)
thresholdnumber–Scene-cut sensitivity 0–1 (default: adaptive 0.30→0.20→0.12). Lower it if obvious cuts are missed, raise it if too many false cuts.

No output schema declared.

No examples provided.

fablecut_auto_duck ~335

Duck music under dialogue: finds where the voice tracks have sound (RMS above `threshold`, short gaps bridged so the music doesn't pump between words) and writes `duck` keyframes (dB) on the given music clips — a dip of `amount` dB ramping down `attack` s before speech and back up `release` s after. The duck multiplies the clip's volume, so its own level, volume keyframes and fades are untouched, and re-running replaces the previous dips (amount 0 clears them). Voice = every audio clip on `under` tracks (default: all audio tracks the music isn't on). Linked stems of a music clip get the same keys. The same pipeline as the editor's Auto-duck. Needs ffmpeg + ffprobe on PATH. Refuses locked clips unless force:true.

NameTypeReqDescription
amountnumber–Dip depth in dB, -40…0 (default -12; 0 removes the ducking)
attacknumber–Seconds to ramp down before speech (default 0.3)
clipIdsarrayyesThe music / bed clips to duck
forceboolean–Also change clips the user locked (only when they asked)
releasenumber–Seconds to ramp back up after speech (default 0.6)
thresholdnumber–Voice detection level in dBFS (default -40; raise it if room noise triggers ducks)
underarray–Audio tracks holding the voice, e.g. ["A1"] (default: every other audio track)

No output schema declared.

No examples provided.

fablecut_denoise ~181

Reduce background noise (hiss, hum, room tone) on audio clips: ffmpeg's FFT denoiser renders a cleaned FLAC of each clip's whole source file into media/, and the clip — with its linked stems — switches to it (the picture keeps its own file, so links and timing stay intact). The same as the inspector's Noise control. amount 'off' switches back to the original. Re-running reuses a file already rendered. Needs ffmpeg + ffprobe on PATH. Refuses locked clips unless force:true.

NameTypeReqDescription
amountstring–How hard to pull the noise down (default medium); off restores the original audio
clipIdsarrayyesAudio clips, or video clips with linked audio stems
forceboolean–Also change clips the user locked (only when they asked)

No output schema declared.

No examples provided.

fablecut_docs ~112

Return the FableCut project schema documentation: clips, tracks, props, keyframe animation, transitions, and editing recipes. Read this before editing. TOKEN TIP: pass `section` to fetch only the '## …' section(s) you need (substring match, e.g. "props", "Recipes", "Remake") instead of the whole manual.

NameTypeReqDescription
sectionstring–Return only '## ' sections whose heading contains this text (case-insensitive). Omit for the full document.

No output schema declared.

No examples provided.

fablecut_encode_profiles ~156

List ffmpeg encoding profiles for Fast export (from encoding-profiles.json). Each profile is a raw ffmpeg argument list plus jpegQuality, extension, and optional color (output matrix/range — default BT.709 tv). Use to pick a profile id for project.encodeProfile. Edit encoding-profiles.json on disk to add custom profiles — anything the local ffmpeg supports works, and the server hot-reloads the file. Profiles are dry-run against ffmpeg when an export starts, so a bad argument is rejected before rendering.

NameTypeReqDescription
detailboolean–Include the full ffmpeg args array per profile (default: a truncated summary)
profilestring–Return one profile by id instead of the full list

No output schema declared.

No examples provided.

fablecut_export ~330

Render the timeline to a video file in exports/ — the editor's own Fast export (same compositor, audio mix and encoding profile as the Export button), so the file matches what the user sees. It runs in a browser: an open editor tab takes the job (the user sees the progress bar), or with no tab open the server starts headless Chrome / Edge (set FABLECUT_CHROME to pick one) and closes it afterwards. Waits for the file by default and returns its path. Range: the project's inPoint→outPoint when set, else the whole timeline (or pass range). Needs ffmpeg on PATH. One export at a time. Long edits: pass wait:false, then poll with {job}; {cancel:job} stops one.

NameTypeReqDescription
cancelstring–Cancel this export job
jobstring–Report on an export started earlier instead of starting one
profilestring–Encoding profile id (fablecut_encode_profiles); default: project.encodeProfile, else the server default
rangestring–Whole timeline, or the project's inPoint→outPoint (default: in-out when either is set)
timeoutnumber–Seconds to wait before returning the job's status instead (default 900); the export keeps running
waitboolean–Block until the file is written (default true)
wherestring–auto (default): an open editor tab, else headless · tab: only an open tab · headless: always a background browser, leaving the user's tab alone

No output schema declared.

No examples provided.

fablecut_get_project ~88

Get the FableCut project (the timeline document). TOKEN TIP: pass compact:true for a one-line-per-clip summary (ids, tracks, timings, non-default props) — usually all you need to plan an edit; fetch the full JSON only when you must inspect exact keyframes.

NameTypeReqDescription
compactboolean–Return a compact human-readable summary instead of the full JSON

No output schema declared.

No examples provided.

fablecut_import_media ~114

Import a media file into FableCut's media library and register it in the project. Pass a local absolute path (copied, including .svg) or an https:// URL (downloaded into ./media/; video/audio/image only — remote SVG is refused). The URL is never kept as the playback src — CORS would break export. Returns the created media entry (use its id in clips).

NameTypeReqDescription
pathstringyesAbsolute path to a local file, or an https:// URL to download

No output schema declared.

No examples provided.

fablecut_normalize_audio ~259

Loudness-normalize clips: measures each clip's source audio (ITU-R BS.1770 integrated LUFS, or sample peak) after its channel routing and sets `props.gain` (clip gain, dB) so it lands on the target — the same measurement as the editor's Normalize button. Linked stems (a video's per-channel audio clips) are measured together and get one shared gain, so a stereo pair stays balanced; passing a video clip normalizes its stems. Volume keyframes / fades are untouched (they ride on top). Typical targets: -14 LUFS streaming/social, -16 LUFS podcast/dialogue, -23 LUFS broadcast, or mode 'peak' at -1 dBFS. Needs ffmpeg + ffprobe on PATH. Refuses locked clips unless force:true.

NameTypeReqDescription
clipIdsarrayyesClips to normalize (audio, or video with audio)
forceboolean–Also change clips the user locked (only when they asked)
modestring–Measure integrated loudness (default) or sample peak
targetnumber–Target level: LUFS for mode lufs (default -14), dBFS for mode peak (default -1)

No output schema declared.

No examples provided.

fablecut_patch_project ~3,159

Apply targeted edits to the FableCut project WITHOUT round-tripping the whole document — PREFER THIS over get+set for every edit (it is ~10-100x cheaper in tokens and merge-safe by design: it re-reads the latest document from disk, applies your ops in order, bumps revision once, saves atomically). Ops: {op:'addClip', clip:{…}} (id auto-generated if omitted) · {op:'updateClip', id, set:{…}} · {op:'removeClip', id} · {op:'addMedia', media:{…}} · {op:'removeMedia', id} · {op:'setProject', set:{name|width|height|fps|background|markers|disabledTracks|lockedTracks|untargetedTracks|encodeProfile|master}} (markers = the full list [{t, label?, color?}], color: gold|red|orange|green|cyan|blue|purple|pink; master = {gain}, the master fader in dB) · {op:'setTrack', id:'A1', set:{gain?, pan?, out?}} (audio-track fader in dB −60…+12, pan −1…1, out = a submix bus id or 'master'; null or 0 resets) · {op:'setBus', id:'B1', set:{name?, gain?, pan?, mute?}} (submix bus, created if missing; route tracks into it with setTrack out) · {op:'removeBus', id} · {op:'setFx', target:'clip'|'track'|'bus'|'master', id?, preset?:'podcast'|… OR fx:[{type,…params}], append?:true} (audio effects — validated; presets: clean-voice, podcast, radio, deep-voice, telephone, cinematic, wide, muffled; fx:null clears; on a clip it applies to its linked stems too) · {op:'setFxKeys', target, id?, index?|type?, param, keys:[{t, v, ease?}]|null} (automate one effect parameter: t is clip-local for a clip's effects, timeline seconds otherwise; see the 'Audio mix' docs section) · {op:'setGrade', id | ids:[…], grade:{exposure?, temp?, tint?, lift?, gamma?, gain?, offset?, contrast?, pivot?, blacks?, shadows?, midtones?, highlights?, whites?, lowSoft?, highSoft?, saturation?, curves?:{y?, r?, g?, b?}, hueHue?, hueSat?, hueLuma?, satLuma?, layers?:[…], on?}, replace?:true} (color grade on video / image / svg / adjust clips — wheels are [r, g, b, master]; curves are [[x, y], …] point lists on 0…1 and merge per channel;…

NameTypeReqDescription
baseRevisioninteger–Revision these ops were planned against. If project.json has moved past it, the patch is refused with CONFLICT (nothing saved). Omit to apply on top of the latest revision.
opsarrayyesEdit operations, applied in order (see tool description for shapes). Any op may carry force:true to override a lock the user set.

No output schema declared.

No examples provided.

fablecut_scopes ~363

Measure the graded picture at one moment — what the editor's scopes show, as numbers: luma levels (min, 1st percentile, median, mean, 99th percentile, max on 0–1), the % of pixels crushed to black / clipped to white, mean R/G/B, average saturation, and the colour cast of the midtones (hue name + strength; neutral below 0.01), plus the clips on screen with their grades, masks, track mattes and blend modes. Rendered by the same compositor as export (an open editor tab, else headless Chrome / Edge), over the export frame when one is set. Use it to check a grade: e.g. a cast strength above ~0.03 on footage that should be neutral, whitePct above ~1 (clipped highlights), or a median far from ~0.4 for a normally exposed shot. The user's playhead does not move.

NameTypeReqDescription
maskobject–Also measure a clip's masks: {clip}. Adds how much of that clip's picture the masks keep (coverage %, the feathered matte measured alone) and how much of the frame the masked clip covers
matteobject–Also measure what one grade layer selects: {clip, layer} (layer = index into the clip's grade.layers). Adds the matte's coverage (% of that clip's picture) and the levels / colour of the selected pix…
timenumber–Timeline seconds to measure (default: the editor's playhead)
timeoutnumber–Seconds to wait (default 60)
wherestring–auto (default): an open editor tab, else headless · tab · headless

No output schema declared.

No examples provided.

fablecut_set_project ~170

Replace the FableCut project JSON. Pass the COMPLETE document (read with fablecut_get_project, modify, send back whole). Revision is auto-bumped; the open editor UI hot-reloads instantly so the user sees the edit live. CONFLICT-SAFE: if the project changed on disk since your last fablecut_get_project (e.g. the user tweaked something in the UI), the call errors instead of overwriting — re-read, re-apply your edit on top of the latest document, and retry.

NameTypeReqDescription
forceboolean–Overwrite even if the project changed since it was last read (discards those external/user changes). Only when the user explicitly asks.
projectobjectyesThe complete project document (see fablecut_docs for schema)

No output schema declared.

No examples provided.

fablecut_status ~48

FableCut video editor: ensure the editor web server is running (auto-starts it), and get the editor URL, project summary and media library. Call this first in a session.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

fablecut_track ~610

Follow something in a video clip frame by frame (motion tracking, in the editor: an open tab, else headless Chrome / Edge) and store it on the clip as a named track (props.tracks). Then, in the same call, make a mask follow it (apply:{mask}) or pin another clip to it (apply:{clip} — a title, sticker, blur box… its x / y, and optionally scale / rotation, get keyframes that ride on the track, keeping where it is at `at`). What to follow: region {x, y, w, h} or point {x, y} (+ size), as fractions of the clip's picture (0…1, y down) at time `at`; or leave both out with apply:{mask} to follow what that mask covers. To re-apply an existing track, pass its name with apply and no region. Pick something with detail (a corner, a logo, text, an eye), not a flat area; the result reports match quality (≥ 0.8 is solid) and where the region was lost, if it was. Check the outcome with fablecut_scopes or by looking at the keyed clip.

NameTypeReqDescription
applyobject–Bake the track into keys: {mask: index | name} (the mask's x / y — and scale / rotation when tracked — follow) or {clip: id, scale?, rotation?, at?} (that clip rides on the track)
atnumber–Timeline seconds where the region is as given (default: the clip's start)
clipstringyesThe video clip to track in
directionstring–Track from `at` to the clip's end (default), to its start, or both
forceboolean–Allow changing locked clips — only when the user asked
namestring–The track's name (default: the mask's name, or Track n). An existing name is extended / replaced over the tracked range
pointobject–A spot to follow at `at` (fractions of the picture); a square region of `size` around it is matched
regionobject–The area to follow at `at`: centre x, y and size w, h, fractions of the clip's picture
rotationboolean–Also follow the region's rotation
scaleboolean–Also follow the region's size (zooms, objects moving closer)
sizenumber–With point: the region's width, fraction of the picture's width (default 0.08)
timeoutnumber–Seconds to wait (default 300)
tonumber–Timeline seconds to stop at (default: the clip's end / start)
wherestring–auto (default): an open editor tab, else headless · tab · headless

No output schema declared.

No examples provided.

Install

How do I install the FableCut MCP server?

FableCut runs locally as an npm package, launched with npx -y fablecut. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · fablecut

# add to Claude Code
claude mcp add ronak-create-fablecut -- npx -y fablecut
Common questions

What is the FableCut MCP server?

FableCut is an MCP server listed in the public MCP registry as io.github.ronak-create/fablecut. Zero-dependency browser video editor AI agents drive via a JSON timeline over MCP; ffmpeg export. This page covers its npm package (fablecut).

Is the FableCut MCP server safe to use?

FableCut scores 79 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 17 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the FableCut MCP server expose?

FableCut exposes 14 tools: fablecut_status, fablecut_docs, fablecut_get_project, fablecut_patch_project, fablecut_set_project, and 9 more. Their descriptions and schemas cost roughly 6,201 tokens of context every time the server is loaded.

Is the FableCut MCP server still maintained?

FableCut is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the FableCut MCP server under?

FableCut declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.