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.

cuttingfloor

REMOTE · API.CUTTINGFLOOR.AI

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

+3 this week 81 Trust /100

Last scanned (10 hours ago)

Scores higher than 84% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security92
Transport & Reachability100
Schema Quality & AI Usability70
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 21134 tokens (~245/item across 86 items; 72 tools + 14 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 Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 73% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 74 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
What we tested

Checks we ran (14)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol
  • Capabilities

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

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.

  • 5 Nov 26 0
    • Server version: 0.32.0 → 0.34.0 functional
  • 4 Nov 26 0
    • New resource “library” functional
    • Server version: 0.31.0 → 0.32.0 functional
    • Server version: 0.30.0 → 0.31.0 functional
  • 3 Nov 26 +1
    • New resource “editor” functional
    • Server version: 0.29.3 → 0.30.0 functional
  • 2 Nov 26 0
    • Tool “job.get” rewrote its description, which is the text the model reads security
    • Tool “clip.set_mask” rewrote its description, which is the text the model reads security
    • Server version: 0.29.2 → 0.29.3 functional
    • Server version: 0.29.1 → 0.29.2 functional
    • Server version: 0.28.0 → 0.29.1 functional
    • “job.get” reworded the description of “wait_seconds” cosmetic
    • “clip.set_speed” reworded the description of “interpolate” cosmetic
    • “audio.set_gain” reworded the description of “gain_db” cosmetic
    • “qa.check” reworded the description of “speech” cosmetic
  • 1 Nov 26 +1
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “audio.set_gain” rewrote its description, which is the text the model reads security
    • Tool “audio.set_master” rewrote its description, which is the text the model reads security
    • Tool “caption.add” rewrote its description, which is the text the model reads security
    • Tool “clip.replace” rewrote its description, which is the text the model reads security
    • Tool “clip.set_animation” rewrote its description, which is the text the model reads security
    • Tool “clip.set_mask” rewrote its description, which is the text the model reads security
    • Tool “clip.set_transform” rewrote its description, which is the text the model reads security
    • Tool “create.cutout” rewrote its description, which is the text the model reads security
    • Tool “export.timeline” rewrote its description, which is the text the model reads security
    • Tool “export.video” rewrote its description, which is the text the model reads security
    • Tool “filter.add” rewrote its description, which is the text the model reads security
    • Tool “job.cancel” rewrote its description, which is the text the model reads security
    • Tool “job.get” rewrote its description, which is the text the model reads security
    • Tool “job.list” rewrote its description, which is the text the model reads security
    • Tool “judge.ask” rewrote its description, which is the text the model reads security
    • Tool “media.analyze” rewrote its description, which is the text the model reads security
    • Tool “media.get” rewrote its description, which is the text the model reads security
    • Tool “media.import” rewrote its description, which is the text the model reads security
    • Tool “media.listen” rewrote its description, which is the text the model reads security
    • Tool “media.seek” rewrote its description, which is the text the model reads security
    • Tool “qa.check” rewrote its description, which is the text the model reads security
    • Tool “range.extract” rewrote its description, which is the text the model reads security
    • Tool “range.lift” rewrote its description, which is the text the model reads security
    • Tool “text.set” rewrote its description, which is the text the model reads security
    • Tool “timeline.set_sequence” rewrote its description, which is the text the model reads security
    • Tool “title.add” rewrote its description, which is the text the model reads security
    • Tool “create.motion” rewrote its description, which is the text the model reads security
    • Tool “create.still” rewrote its description, which is the text the model reads security
    • Tool “job.cancel” is now declared destructive security
    • Schema quality: 221 → 248 ▼ functional
    • Server version: 0.27.6 → 0.28.0 functional
    • Server version: 0.27.5 → 0.27.6 functional
    • Server version: 0.27.4 → 0.27.5 functional
    • New tool “create.upscaled” functional
    • “clip.replace” added an optional parameter “linked” cosmetic
    • “clip.set_speed” added an optional parameter “interpolate” cosmetic
    • “create.cutout” added an optional parameter “region” cosmetic
    • “job.get” added an optional parameter “result” cosmetic
    • “job.get” added an optional parameter “wait_seconds” cosmetic
    • “job.list” added an optional parameter “media_id” cosmetic
    • “job.list” added an optional parameter “result” cosmetic
    • “job.list” added an optional parameter “tool” cosmetic
    • “media.analyze” added an optional parameter “cluster_threshold” cosmetic
    • “media.analyze” added an optional parameter “percentiles” cosmetic
    • “media.analyze” added an optional parameter “regions” cosmetic
    • “media.analyze” added an optional parameter “speakers” cosmetic
    • “text.set” added an optional parameter “spans” cosmetic
    • “title.add” added an optional parameter “spans” cosmetic
    • “clip.set_animation” reworded the description of “loop” cosmetic
    • “filter.add” reworded the description of “name” cosmetic
    • “filter.add” reworded the description of “params” cosmetic
    • “judge.ask” reworded the description of “state” cosmetic
    • “media.analyze” reworded the description of “at_seconds” cosmetic
    • “media.analyze” reworded the description of “every_seconds” cosmetic
    • “media.analyze” reworded the description of “from_seconds” cosmetic
    • “media.analyze” reworded the description of “kind” cosmetic
    • “media.analyze” reworded the description of “model” cosmetic
    • “media.analyze” reworded the description of “region” cosmetic
    • “media.analyze” reworded the description of “threshold” cosmetic
    • “media.analyze” reworded the description of “timeline_id” cosmetic
    • “media.analyze” reworded the description of “until_seconds” cosmetic
    • “media.get” reworded the description of “from_seconds” cosmetic
    • “media.get” reworded the description of “include” cosmetic
  • 30 Oct 26 +1
    • Server version: 0.27.3 → 0.27.4 functional
    • Server version: 0.27.1 → 0.27.3 functional
  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 27 Oct 26 0
    • Stability: unverified → 0.03 ▲ functional
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 5 Nov 2026 · Probed https://api.cuttingfloor.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.cuttingfloor.ai CN=YE2,O=Let's Encrypt,C=US 19 Oct 2026 17 Jan 2027 ECDSA 256 ECDSA-SHA384 50c8d677f68f62714b9d9babf7a5005b14a
SANs: api.cuttingfloor.ai
CN=YE2,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 4df3b15dd6c0784c507cd37b58e6f115
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.cuttingfloor.ai. — Not signed

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
ai. DS published 1814, 3799 8, 8 Verified
cuttingfloor.ai. No DS Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="Missing Authorization header", resource_metadata="https://api.cuttingfloor.ai/.well-known/oauth-protected-resource/mcp"

Bearer error="invalid_token", error_description="Missing Authorization header", resource_metadata="https://api.cuttingfloor.ai/.well-known/oauth-protected-resource/mcp"

Protected resource metadata

Document https://api.cuttingfloor.ai/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://api.cuttingfloor.ai/mcp
Authorisation server https://auth.cuttingfloor.ai

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.cuttingfloor.ai/mcp Verified 200
http (plaintext) http://api.cuttingfloor.ai/mcp HTTPS enforced 308 https://api.cuttingfloor.ai/mcp
MCP tools · 72 exposed · ~19,313 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
adjustment.add ~139

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).

NameTypeReqDescription
at_frameinteger–Default: after the last clip on the track
duration_framesintegeryes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstringyesA video track; the effects reach every track below it
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

audio.fade ~98

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).

NameTypeReqDescription
clip_idstringyes–
in_frames–––
out_frames–––
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

audio.set_gain ~228

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 instructions).

NameTypeReqDescription
clip_idstringyesAn audio clip, or a video clip whose linked audio to change
gain_db–yesdB, -60 to 24; 0 leaves it as it is. Keyframes make a ride: the first key holds backward to the clip start, so a ride that begins part-way down must also key its starting level at frame 0 or the fram…
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

audio.set_master ~153

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 link preview does not. Returns the edit result (see the server instructions).

NameTypeReqDescription
gain_db–––
limit_db––Limiter ceiling on sample peaks, dBFS
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

audio.set_pan ~100

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

NameTypeReqDescription
clip_idstringyes–
pan–yes-1 left, 0 centre, 1 right; null resets
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

caption.add ~384

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 leave out takes the published default (video://catalog/text: bold white Inter at 6% of the frame height, near the bottom, with a black outline); timeline.get shows the full style. Lines wrap on their own at style max_width (a fraction of the frame width), balanced in length; \n forces a break. style max_lines caps the lines on screen at once: a longer caption shows a screenful at a time, each from its first word's time. A segment's spans style part of its text (words first_word to last_word, from 0: the timed words, or the text split at spaces), e.g. the key word in yellow. Burned in when exported. Returns the edit result (see the server instructions).

NameTypeReqDescription
in_clipobject–Segments timed in seconds of a clip's media (e.g. transcript word times), placed where those moments play in the clip, through speed changes; what doesn't play is left out
offset_framesinteger–Shifts srt/vtt times
previewstring–inline: image in the result; link: URI that renders on read; none
segmentsarray––
srtstring–SubRip text instead of segments
style–––
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstringyesA video track for the captions, usually the top one
vttstring–WebVTT text instead of segments
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.add ~453

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 pixel size. Returns the edit result (see the server instructions).

NameTypeReqDescription
after_clip_idstring–Start where this clip ends (instead of at_frame)
at_frameinteger–Where the clip starts. Default: after the last clip
avstring–linked: video and audio as a link group; video or audio: only that part
duration_framesinteger–Length for stills (default 5 s); ignored when source is given
link_track_idstring–Track for the other half of a linked clip. Default: the first track of that kind
media_idstring–Media handle from media.import or a create.* tool
modestring–overwrite replaces what is underneath; insert pushes later clips right
nested_timeline_idstring–Instead of media: nest another timeline as one clip (a compound clip)
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
previewstring–inline: image in the result; link: URI that renders on read; none
source––Source range in sequence frames, out exclusive. Default: the whole media
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstringyesTrack for the clip; a linked A/V clip puts its other half on link_track_id
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.freeze ~244

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).

NameTypeReqDescription
at_frameintegeryesTimeline frame to hold
clip_idstringyes–
duration_framesintegeryes–
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.link ~75

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

NameTypeReqDescription
clip_idsarrayyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.move ~239

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

NameTypeReqDescription
clip_idstringyes–
modestring–overwrite replaces what is underneath; insert pushes later clips right
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
previewstring–inline: image in the result; link: URI that renders on read; none
rippleboolean–Close the gap left behind
timeline_idstringyesTimeline handle; every edit returns a new one
to_frameintegeryes–
to_track_idstring––
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.remove ~205

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

NameTypeReqDescription
clip_idstringyes–
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
previewstring–inline: image in the result; link: URI that renders on read; none
rippleboolean–Close the gap by pulling later clips left
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.replace ~191

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).

NameTypeReqDescription
clip_idstringyes–
linkedboolean–Also swap its linked clips (its sound, or its picture) onto the new media, keeping their offset, where the new media has that kind; false swaps this clip only
media_idstringyesMedia handle from media.import or a create.* tool
previewstring–inline: image in the result; link: URI that renders on read; none
source_ininteger–Source frame the clip starts at. Default 0
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.roll ~109

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).

NameTypeReqDescription
clip_idstringyesThe clip before the cut
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
to_frameintegeryesNew position of the cut
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_animation ~198

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} for a jolt). null removes one. Returns the edit result (see the server instructions).

NameTypeReqDescription
clip_idstringyes–
in––Entrance, from the clip start
loop––Repeats over the clip, or over from_frame to to_frame of it
out––Exit, ending at the clip end
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
placementsarray–Where each clip the edit moved, cropped, masked or animated shows, sequence pixels
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_blend ~102

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).

NameTypeReqDescription
clip_idstringyes–
modestringyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_enabled ~87

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

NameTypeReqDescription
clip_idstringyes–
enabledbooleanyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_mask ~326

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 from earlier frames where that area showed, so something that never moves against its background leaves a smudge: nothing ever shows what is behind it. It is a job of its own (job.list shows its progress); a render that needs it names the job until it is done, and an export waits for it. Position, size and rotation animate like transform values. Coordinates are fractions of the clip's fitted frame: a sequence-shaped box with the picture fitted inside (bars where the shapes differ), before the clip's scale and position. A narrower picture fills k = (its aspect / the sequence's) of the box width, centred, so a picture-fraction box maps to x = 0.5 + (x - 0.5) * k, width * k (a wider picture: the same on y and height, with k = the sequence aspect / its). null removes the mask. Returns the edit result (see the server instructions).

NameTypeReqDescription
clip_idstringyes–
mask–yesnull removes the mask
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
placementsarray–Where each clip the edit moved, cropped, masked or animated shows, sequence pixels
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_speed ~445

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 (see the server instructions).

NameTypeReqDescription
clip_idstringyes–
curvearray–Speed ramp: rates at fractions of the clip as it plays after the change (first at 0, last at 1; 0.5 is halfway through the new length), linear between. timeline.get gives each point its clip frame an…
interpolatestring–Video, when it shows fewer new frames a second than the sequence (slowed, or a lower frame rate; rate 1 smooths that): none repeats frames; blend crossfades neighbours; motion makes new frames from t…
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
preserve_pitchboolean–Keep voices at their pitch (default true)
previewstring–inline: image in the result; link: URI that renders on read; none
ratenumber–Constant speed: 2 = twice as fast
reverseboolean––
rippleboolean–Move later clips as the clip gets longer or shorter
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.set_transform ~551

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 constant or {keyframes: [{frame, value, ease}]} with frames from the clip start; a keyframe's ease shapes the move from it to the next one (sine_in_out, cubic_out, back_out, hold and more). Overlays that must follow a zoom or pan: put the clip and its overlays in a timeline of the same shape, nest it with clip.add {nested_timeline_id} and transform the nested clip, so everything moves together. Omitted fields keep their value; null resets one. To pin an overlay to a moving subject, use media.analyze track boxes as keyframes: for each box, frame = timeline frame of the box time (where the tracked clip plays that media second) minus this clip's start, x = box x + w/2 and y = box y + h/2 (add your offset). That holds when the tracked clip fills the frame as is; if it is scaled, moved or cropped, map the box through its transform first. Skip boxes with found false. The result's placements say where the clip now shows, in sequence pixels: its picture box, the part visible after crop and mask inside the frame, and the source pixels that show there. Returns the edit result (see the server instructions).

NameTypeReqDescription
clip_idstringyes–
crop–––
fit–––
flip–––
opacity––Opacity (default 1); 0 to 1
previewstring–inline: image in the result; link: URI that renders on read; none
rotation––Degrees clockwise (default 0); -36000 to 36000
scale––Size relative to the fit (default 1); 0 to 20
scale_x––Extra horizontal stretch (default 1); 0 to 20
scale_y––Extra vertical stretch (default 1); 0 to 20
timeline_idstringyesTimeline handle; every edit returns a new one
x––Centre x, 0 = left edge, 1 = right edge (default 0.5); -4 to 5
y––Centre y, 0 = top, 1 = bottom (default 0.5); -4 to 5
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
placementsarray–Where each clip the edit moved, cropped, masked or animated shows, sequence pixels
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.slide ~97

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).

NameTypeReqDescription
clip_idstringyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
to_frameintegeryes–
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.slip ~93

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

NameTypeReqDescription
by_framesintegeryesPositive shows later source
clip_idstringyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.split ~89

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

NameTypeReqDescription
at_frameintegeryes–
clip_idstringyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.trim ~259

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).

NameTypeReqDescription
clip_idstringyes–
edgestringyes–
other_tracksstring–What the other tracks do when this edit moves later clips on the clip's own tracks (linked clips always move with it). stay: they don't move, and the result warns which clips there now play early or…
previewstring–inline: image in the result; link: URI that renders on read; none
rippleboolean–Shift later clips so nothing overlaps and no gap opens
sidestring–Trim only one half of a link group (J/L cuts)
timeline_idstringyesTimeline handle; every edit returns a new one
to_frameintegeryesNew timeline position of that edge
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

clip.unlink ~75

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

NameTypeReqDescription
clip_idstringyes–
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

create.cutout ~263

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 clip.set_mask matte. Long-running: a task, or {job_id, media_id} for job.get.

NameTypeReqDescription
idempotency_keystring––
media_idstringyesMedia handle from media.import or a create.* tool
namestring––
regionobject–The item in this box (top-left x, y, size w, h; fractions) and/or at these points (keep false: not it) at at_seconds, outlined through the video (EdgeTAM, ~0.5 s a frame)
smoothnumber–Video: steadies the edge
subjectstring–people: MODNet, fast, for video of people; any: BiRefNet, any subject (products, animals, objects), about 1 s a frame and 3 GB of memory; auto: any for pictures, people for video

Structured output declared, but exposes no named fields.

No examples provided.

create.lipsync ~632

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 each second sent. To replace a line or swap a word, give range, the span of the video where it is said, and audio (with audio_range) holding just the new words. The result is that span alone, re-synced and carrying the new speech, as long as the speech with sync_mode remap; place it over the original span (clip.add on a track above, or clip.replace) and mute the old words. Send only the span: it costs less and finishes sooner. Lip sync is for when the face stays on screen while the words change. When the speaker is off screen at that moment, or a cutaway (b-roll, the screen being talked about, a reaction) can cover the splice, the cutaway hides the edit without it. Takes minutes. Long-running: a task, or {job_id, media_id} for job.get. The same recipe returns the same media. Provider limits (plan length, credits, file size) come back as limit_exceeded with the provider's error_code.

NameTypeReqDescription
audiostringyesThe speech they should say: audio media, or a video whose sound is used (e.g. create.voiceover, a re-recorded line)
audio_rangeobject–Only this span of the audio, in the audio's seconds. Default: all of it
idempotency_keystring––
modelstring–The provider's model: lipsync-2 (the cheapest, about $0.05 a second), lipsync-2-pro (finer teeth, beards and detail), sync-3 (close-ups, profiles, hands or mics in front of the mouth; about $0.13 a s…
namestring––
providerstring–sync: sync. labs (sync.so), with the user's SYNC_API_KEY
rangeobject–Only this span of the video, in the video's seconds (e.g. the sentence or word being replaced). The result is that span alone, re-synced; place it over the same span on the timeline. Default: the who…
sync_modestring–When the picture and the speech differ in length. remap: the picture is sped up or slowed to the speech (result as long as the speech); cut_off: the longer one is cut (as long as the shorter); silenc…
videostringyesThe video of the person speaking, whose mouth is redrawn

Structured output declared, but exposes no named fields.

No examples provided.

create.matte ~125

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 quick.

NameTypeReqDescription
colorstring–A solid colour
gradientobject––
heightinteger––
idempotency_keystring––
namestring––
widthinteger––

Structured output declared, but exposes no named fields.

No examples provided.

create.motion ~368

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. Runs in the sandbox: no network (inline everything, load libraries from lib/; assets are for imported files the page must show as they are, like the user's logo or a font), fixed memory and time limits. To match a reference you were shown, rebuild it in HTML/SVG; it does not need importing. The result's warnings list what went wrong in the page: uncaught errors, console errors, files blocked or not found. Long-running: returns a task, or {job_id, media_id} for job.get. The same recipe returns the same media.

NameTypeReqDescription
assetsarray––
duration_secondsnumberyes–
fpsnumber––
heightinteger––
htmlstringyesAn animated HTML page or fragment laid out at width × height. Anything that animates in a browser renders frame-exactly: CSS animations and transitions, the Web Animations API, SVG, requestAnimationF…
idempotency_keystring––
namestring––
transparentboolean–Alpha (ProRes 4444) so it composites over video; false gives H.264
widthinteger––

Structured output declared, but exposes no named fields.

No examples provided.

create.stabilized ~258

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 and timing). Long-running: a task, or {job_id, media_id} for job.get.

NameTypeReqDescription
edgesstring–What fills the edges steadying moves into view. zoom: one zoom for the whole video, enough to hide them; adaptive_zoom: as little zoom as each moment needs; black: no zoom, black edges; keep: no zoom…
idempotency_keystring––
media_idstringyesVideo to steady
namestring––
shakinessinteger–How shaky the footage is: 1 a little, 10 a lot
smoothinginteger–Frames each side the camera path is smoothed over: more is steadier but follows intended moves (pans) more slowly
tripodboolean–Hold the picture still against its first frame, as if on a tripod

Structured output declared, but exposes no named fields.

No examples provided.

create.stems ~367

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, the four stems make the original sound again. Use it to keep only the voice (lose the music under an interview: vocals), keep only the music (take the voice out of a clip: no_vocals), turn the music down under speech (vocals and no_vocals on their own tracks, with their own gain), or take a beat or a bass line on its own. Demucs v4 (htdemucs), local, on the CPU: about a fifth of the media's length on 8 cores (a minute of sound in about 15 s). Built for music; on speech with background noise, vocals keeps the voice and other takes most of the noise. Media up to 3 hours. Each stem is a 32-bit float WAV, 44.1 kHz stereo, as long as the original; the same media and stems give the same media again while they last. Long-running: a task, or a job_id for job.get.

NameTypeReqDescription
idempotency_keystring––
media_idstringyesVideo or audio with sound
namestring––
stemsarray–vocals: voices, spoken or sung; drums, bass, other: the rest, by kind (other holds everything else: guitars, keys, effects, room noise); no_vocals: all but the voice in one file. Each becomes its own…

Structured output declared, but exposes no named fields.

No examples provided.

create.still ~239

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 libraries from lib/; assets are for imported files the page must show as they are, like the user's logo or a font), fixed memory and time limits. To match a reference you were shown, rebuild it in HTML/SVG; it does not need importing. The result's warnings list what went wrong in the page: uncaught errors, console errors, files blocked or not found. Long-running: returns a task, or {job_id, media_id} for job.get.

NameTypeReqDescription
assetsarray––
heightinteger––
htmlstringyesAn HTML page or fragment, laid out at width × height
idempotency_keystring––
namestring––
transparentboolean–Unpainted areas stay transparent
widthinteger––

Structured output declared, but exposes no named fields.

No examples provided.

create.upscaled ~238

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 1280x720, results up to 3840 px on the long edge. New media (ProRes with the sound, or a PNG) to put in place of the original (clip.replace keeps its place and timing). Long-running: a task, or {job_id, media_id} for job.get.

NameTypeReqDescription
denoisestring–How much noise and compression blocking is cleaned while detail is drawn in: light keeps grain and fine texture, strong gives the smoothest picture
idempotency_keystring––
media_idstringyesVideo or image to enlarge
namestring––
scalenumber–How many times wider and taller the result is

Structured output declared, but exposes no named fields.

No examples provided.

create.voiceover ~135

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.

NameTypeReqDescription
idempotency_keystring––
namestring––
speednumber––
textstringyesWhat to say, in English
voicestring–a/b: American/British; f/m: female/male
wordsboolean–Time each word

Structured output declared, but exposes no named fields.

No examples provided.

edit.batch ~161

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.

NameTypeReqDescription
opsarrayyesEdits applied in order as one change. An arg may be {"$ref":"ops[2].clip_id"} to use an id made by an earlier op
previewstring–inline: image in the result; link: URI that renders on read; none
timeline_idstringyesTimeline handle; every edit returns a new one
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
placementsarray–Where each clip the edit moved, cropped, masked or animated shows, sequence pixels
preview–yes–
resultsarrayyes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

export.timeline ~302

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, animated transforms, ramps, text styling). timeline.get is the lossless copy. media reference (default) points at the media where this server keeps it, which another machine cannot open and which goes 7 days after last use (the result warns); media collect makes a .zip with the media files next to the timeline file, to hand the edit on. Long-running: a task, or {job_id} for job.get; the result has a signed download URL.

NameTypeReqDescription
filenamestring–Output file name without extension. Default: timeline name and id
formatstringyesfcpxml: Final Cut Pro, Resolve; otio: Premiere, Resolve, any OTIO app; edl: CMX 3600; srt/vtt: captions
idempotency_keystring––
mediastring–reference: point at the media where it is; collect: a .zip with the media in it
overwriteboolean––
timeline_idstringyesTimeline handle; every edit returns a new one

Structured output declared, but exposes no named fields.

No examples provided.

export.video ~414

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, to watch a cut), audio_wav_48k, audio_mp3. overrides changes size, fps, bitrate or crf (video://catalog/presets). Long-running: returns a task, or {job_id} for job.get. The result links the file (a resource_link to video://jobs/{job_id}/output, which reads as the file, or its signed URL when large), has a signed download URL and a page_url that plays it in any browser (the link to give a person to watch or share), both working for 24 h (job.get gives fresh ones) . The server keeps the file 7 days: to keep it longer, save it from the url, and media.import it to use it again. qa.check measures a render (gaps, frames, loudness) before you export. sha256 and fingerprint tell two renders apart without downloading them (fingerprint matches media.get of the file once imported).

NameTypeReqDescription
filenamestring–Output file name without extension. Default: timeline name and id
idempotency_keystring––
overridesobject–Change the preset: a size box (aspect kept), frame rate, bitrate or quality
overwriteboolean––
presetstringyesvideo://catalog/presets lists each with what it takes
rangeobject–Frames, end exclusive
timeline_idstringyesTimeline handle; every edit returns a new one

Structured output declared, but exposes no named fields.

No examples provided.

filter.add ~296

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 run in the order added (a track's before a clip's own). Picture numbers take keyframes, except glitch, denoise and chroma_key tolerance; sound params are constants. A wrong name or param is refused with the full list, ranges, units and defaults (also at video://catalog/effects); timeline.get shows every param applied. Returns its id as clip_id. Returns the edit result (see the server instructions).

NameTypeReqDescription
clip_idstring–Apply to one clip (or an adjustment clip)
namestringyes–
paramsobject–The effect's own params; any left out take their defaults. A wrong one is refused with the effect's params, ranges, units and defaults
previewstring–inline: image in the result; link: URI that renders on read; none
timelineboolean–Or true for the whole picture or mix
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring–Or to every clip on a track
NameTypeReqDescription
changedarrayyes–
clip_idstring––
clip_idsarray––
parentstringyesTimeline handle; every edit returns a new one
preview–yes–
timeline_idstringyesTimeline handle; every edit returns a new one
track_idstring––
warningsarrayyes–

No examples provided.

Install

How do I install the cuttingfloor MCP server?

cuttingfloor is a hosted endpoint at https://api.cuttingfloor.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.cuttingfloor.ai

# add to Claude Code
claude mcp add --transport http mvp2o-ai-cuttingfloor 'https://api.cuttingfloor.ai/mcp'
Common questions

What is the cuttingfloor MCP server?

cuttingfloor is an MCP server listed in the public MCP registry as io.github.Mvp2o-ai/cuttingfloor. Hosted video editing for AI agents: cut, caption, mix and export real video. Sign in with OAuth. This page covers its hosted endpoint (https://api.cuttingfloor.ai/mcp).

Is the cuttingfloor MCP server safe to use?

cuttingfloor scores 81 out of 100 on VerifyMCP. 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 cuttingfloor MCP server expose?

cuttingfloor exposes 72 tools: timeline.create, timeline.get, timeline.load, timeline.history, timeline.diff, and 67 more. Their descriptions and schemas cost roughly 19,313 tokens of context every time the server is loaded.

Does the cuttingfloor MCP server require authentication?

Yes. cuttingfloor asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the cuttingfloor MCP server still maintained?

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

What did VerifyMCP test on the cuttingfloor MCP server?

VerifyMCP ran 14 checks on cuttingfloor, covering TLS certificate, Authorization, HTTPS, HSTS header and 10 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.