Blender integration through the Model Context Protocol
FableCut is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Zero-dependency browser video editor AI agents drive via a JSON timeline over MCP; ffmpeg export.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user fablecut-mcp '--' npx -y fablecut
# 2 — ask your agent for something these tools do
# fablecut_status, fablecut_docs, fablecut_get_project and 11 more
FableCut costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts FableCut as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user fablecut-mcp '--' npx -y fablecutReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
14 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
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.
No parameter schema on file.
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section | string | no | Return only '## ' sections whose heading contains this text (case-insensitive). Omit for the full document. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| compact | boolean | no | Return a compact human-readable summary instead of the full JSON |
| Parameter | Type | Required | Notes |
|---|---|---|---|
| ops | array | yes | Edit operations, applied in order (see tool description for shapes). Any op may carry force:true to override a lock the user set. |
| baseRevision | integer | no | 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. |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project | object | yes | The complete project document (see fablecut_docs for schema) |
| force | boolean | no | Overwrite even if the project changed since it was last read (discards those external/user changes). Only when the user explicitly asks. |
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/…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | The reference video: an absolute file path (copied into media/ automatically) or an existing '/media/…' src |
| threshold | number | no | 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. |
| registerMusic | boolean | no | Extract the reference's music and register it as project media (default true) |
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.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | Absolute path to a local file, or an https:// URL to download |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| detail | boolean | no | Include the full ffmpeg args array per profile (default: a truncated summary) |
| profile | string | no | Return one profile by id instead of the full list |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clipIds | array | yes | Clips to normalize (audio, or video with audio) |
| mode | string | no | Measure integrated loudness (default) or sample peak |
| target | number | no | Target level: LUFS for mode lufs (default -14), dBFS for mode peak (default -1) |
| force | boolean | no | Also change clips the user locked (only when they asked) |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clipIds | array | yes | The music / bed clips to duck |
| under | array | no | Audio tracks holding the voice, e.g. ["A1"] (default: every other audio track) |
| amount | number | no | Dip depth in dB, -40…0 (default -12; 0 removes the ducking) |
| threshold | number | no | Voice detection level in dBFS (default -40; raise it if room noise triggers ducks) |
| attack | number | no | Seconds to ramp down before speech (default 0.3) |
| release | number | no | Seconds to ramp back up after speech (default 0.6) |
| force | boolean | no | Also change clips the user locked (only when they asked) |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clipIds | array | yes | Audio clips, or video clips with linked audio stems |
| amount | string | no | How hard to pull the noise down (default medium); off restores the original audio |
| force | boolean | no | Also change clips the user locked (only when they asked) |
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…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| range | string | no | Whole timeline, or the project's inPoint→outPoint (default: in-out when either is set) |
| profile | string | no | Encoding profile id (fablecut_encode_profiles); default: project.encodeProfile, else the server default |
| where | string | no | auto (default): an open editor tab, else headless · tab: only an open tab · headless: always a background browser, leaving the user's tab alone |
| wait | boolean | no | Block until the file is written (default true) |
| timeout | number | no | Seconds to wait before returning the job's status instead (default 900); the export keeps running |
| job | string | no | Report on an export started earlier instead of starting one |
| cancel | string | no | Cancel this export job |
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 +…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| time | number | no | Timeline seconds to measure (default: the editor's playhead) |
| matte | object | no | 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 pixe |
| mask | object | no | 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 |
| where | string | no | auto (default): an open editor tab, else headless · tab · headless |
| timeout | number | no | Seconds to wait (default 60) |
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,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clip | string | yes | The video clip to track in |
| region | object | no | The area to follow at at: centre x, y and size w, h, fractions of the clip's picture |
| point | object | no | A spot to follow at at (fractions of the picture); a square region of size around it is matched |
| size | number | no | With point: the region's width, fraction of the picture's width (default 0.08) |
| at | number | no | Timeline seconds where the region is as given (default: the clip's start) |
| direction | string | no | Track from at to the clip's end (default), to its start, or both |
| to | number | no | Timeline seconds to stop at (default: the clip's end / start) |
| scale | boolean | no | Also follow the region's size (zooms, objects moving closer) |
| rotation | boolean | no | Also follow the region's rotation |
| name | string | no | The track's name (default: the mask's name, or Track n). An existing name is extended / replaced over the tracked range |
| apply | object | no | 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) |
| force | boolean | no | Allow changing locked clips — only when the user asked |
| where | string | no | auto (default): an open editor tab, else headless · tab · headless |
| timeout | number | no | Seconds to wait (default 300) |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install FableCut or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (14 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| fablecut_status | no tags | |
| fablecut_docs | untrusted-input | untrusted-input: keyword "fetch" |
| fablecut_get_project | untrusted-input | untrusted-input: keyword "fetch" |
| fablecut_patch_project | no tags | |
| fablecut_set_project | no tags | |
| fablecut_analyze_reference | no tags | |
| fablecut_import_media | no tags | |
| fablecut_encode_profiles | no tags | |
| fablecut_normalize_audio | no tags | |
| fablecut_auto_duck | no tags | |
| fablecut_denoise | no tags | |
| fablecut_export | no tags | |
| fablecut_scopes | no tags | |
| fablecut_track | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.14.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish FableCut can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.