video-editor-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@video-editor-mcpTrim the first 5 seconds from intro.mp4 to highlight.mp4"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
video-editor-mcp
A local ffmpeg editing workbench over MCP. Give Claude Code tools to inspect media, make explicit edits, render a JSON timeline, and measure the result: a real editing bench, not a black box. The server needs no API key. Its only media engines are ffmpeg and ffprobe.
Quickstart: two commands
From the repository root, with Docker and Compose v2 installed:
docker compose build
docker compose run --rm mcpThe second command starts an MCP stdio server, not an interactive shell. It waits for protocol messages; press Ctrl-C to stop it before connecting your client. No port is exposed. A named media volume is initialized automatically and persists after container removal.
The image uses node:22-bookworm-slim with Debian's ffmpeg package (including ffprobe) and DejaVu fonts. This provides a conventional glibc runtime, libx264 and drawtext support without a separate media download. Docker necessarily uses container-internal absolute mount/build locations; no host-specific path is embedded in the repository or accepted from an MCP client.
Related MCP server: ffmpeg-mcp-server
Generate samples
No binary media is committed. Generate test patterns, a color gradient, tones, silence and a raster badge directly into the same Docker volume:
docker compose run --rm --no-deps -T --entrypoint sh mcp scripts/make-samples.shThe sample script overwrites its own known sample names. Editing tools never overwrite output files. The supplied voice-placeholder.wav is a tone, not speech, and music.wav is a low tone, not a musical work. They exercise the two-track mix without third-party recordings. Substitute your own authorized voice and music for a listening demonstration.
For native development with ffmpeg installed, sh scripts/make-samples.sh writes to the local workspace directory instead. That directory is not the Docker named volume.
Connect Claude Code
From this repository directory:
claude mcp add --transport stdio video-editor -- docker compose run --rm --no-deps -T mcpAlternatively merge examples/claude_code_mcp.json into your project .mcp.json. Do not do both. Run Claude Code from the repository root so Compose selects the same project and volume. -T disables the pseudo-terminal; stdout is reserved for MCP, while diagnostics go to stderr. Approve only the editing requests you intend to execute.
Nine tools
All paths below are workspace-relative names, for example shot-one.mp4, never workspace/shot-one.mp4. Output parents must already exist; outputs must end in .mp4 and must not exist.
Tool | Parameters | Behavior |
|
| Duration; all track types/codecs; video dimensions/FPS; audio sample rate/channels |
|
|
|
|
| Sequential whole clips; normalizes geometry/FPS/audio and re-encodes |
|
| Resize, rectangle crop, crop-to-fill or letterbox |
|
| Text or raster image; optional source trim start; window relative to trimmed video |
|
| Mix beneath existing audio or a replacement voice track; preserve video stream |
|
| Render JSON ordered shots and optional global music to H.264/AAC MP4 |
|
| Actual duration, black/silence intervals, LUFS, geometry and FPS checks |
| none | ffmpeg/ffprobe versions, encoder names, workspace free bytes and limits |
Nested values:
frame:ratio=16:9(1280×720),9:16(720×1280), or1:1(720×720);fit=padorcrop;fps=30(1–60). Pairedwidth/heightoverride the ratio; even values 16–1920. Optionalcrop={width,height,x,y}runs before sizing.Text overlay:
{kind:"text",text,fontSize:48,color:"white",x:40,y:40,start:0,end}. Colors: white, black, yellow, red. Image overlay:{kind:"image",source,width:160,x:40,y:40,start:0,end}. At most eight overlays per shot; windows must fit the shot.Audio track:
{source,start:0,volume:1,fadeIn:0,fadeOut:0}. Gains range from 0 to 2; fades are seconds. Short audio is padded with silence, not looped. A replacement voice'svolumesupersedesvoiceVolume.Composition:
{frame,shots:[{source,start:0,duration,overlays:[],audio?,sourceVolume:1}],music?,normalize:true,targetLufs:-16}. Overlays use shot-local time.audioreplaces source audio; absent source audio becomes silence. Music spans the final timeline.QA defaults:
durationTolerance=0.15,targetLufs=-16,lufsTolerance=2,blackMinDuration=0.1,silenceMinDuration=0.5,silenceDb=-40. Missing audio fails audio checks; unmeasurable loudness isnull, never a fabricated value. Analysis errors fail the operation.
Times are seconds. Strict schemas reject unknown properties and raw ffmpeg arguments. See architecture and composition diagrams and the example JSON.
Two-minute demonstration
After generating the samples and connecting Claude Code, ask:
“Check the video editor health and inspect
shot-one.mp4.” →health,probe.“Trim its first two seconds into
short.mp4, using stream copy if possible.” →trim.“Make
short.mp4vertical 9:16, crop-to-fill, intovertical.mp4.” →transform.“Add
Local editingat x=40, y=100 from 0 to 2 seconds invertical.mp4, keeping a 9:16 frame; outputtitled.mp4.” →overlay.“Use
voice-placeholder.wavas replacement voice and mixmusic.wavunderneath it at volume 0.3, with 0.5-second fade-in and 1-second fade-out. Usetitled.mp4, outputmixed.mp4, normalize to -16 LUFS.” →audio_mix. The placeholders are tones; actual speech requires your own recording.“Read
examples/composition.jsonfrom this project and pass its JSON object torender, outputvertical-demo.mp4.” →render. The client reads the project file; the server accepts the object, not a JSON path. This produces eight seconds of 9:16 video with titles, a timed badge, replacement audio and background audio.“Check
vertical-demo.mp4against 8 seconds, 720×1280, 30 FPS and -16 LUFS. Explain every failed check.” →qa.
Allow extra time on slow hardware. Use new output names when repeating. Inspect and listen to the result: QA is a measurement aid, not an aesthetic judgment.
An automated MCP demonstration (Node 22 on the host) uses the same sample volume:
npm install
npm run demoIt renders demo.mp4 and prints QA results. To copy that result out without a host bind mount:
docker compose run --rm --no-deps -T --entrypoint cat mcp workspace/demo.mp4 > demo.mp4Configuration
.env.example lists every application setting. Copy it to .env to change Compose limits. For native runs Node does not automatically load it: use node --env-file=.env dist/src/index.js after building.
Variable | Default | Meaning |
|
| Relative workspace; Compose intentionally fixes this to its mounted directory |
| 300 | Maximum whole-video edit/QA and composition duration |
| 536870912 | Maximum individual input/output file size |
| 180000 | Whole-call deadline shared across copies and subprocesses |
| 32 | Maximum shot/concat count |
| 2 | Decoder, filter and video encoder thread budget |
Security
One workspace; no absolute client paths, traversal, hidden names, protocols or symbolic links. Names use ASCII letters, digits, underscore, dash, dot and directory separators. Parents must exist. Hard-linked inputs are rejected.
Input snapshots in private job directories; no client names in filter graphs. Fixed, explicitly selected demuxers and file-only protocol access prevent playlist/protocol indirection. Inputs supported: MP4/MOV/M4A, MKV/WebM, WAV, MP3, FLAC, PNG and JPEG. Some container variants may be refused.
Fixed ffmpeg/ffprobe binaries invoked with
execFile, arrays, no shell, no raw flags. Text usestextfileandexpansion=none, so quotes, colons, backslashes and percent expressions remain data.Duration, file-size, deadline, shot and thread limits. One request at a time; concurrent calls receive a busy error. Timeout uses SIGKILL. Output-size polling kills excessive writers; final size/probe checks reject truncation before publication.
Atomic, no-overwrite output publication; temporary directories removed on normal completion/failure. Generic client errors; detailed diagnostics only on server stderr.
Non-root container; no network; read-only root; dropped capabilities; no new privileges; memory, CPU and PID limits.
Do not allow untrusted local processes to mutate the mounted workspace concurrently. Component checks and O_NOFOLLOW do not make pathname operations race-free against a hostile same-user filesystem writer. A dedicated volume under operator control is part of the security model. Keep media parsers and the container patched. See architecture.
Limits and operation
H.264/AAC MP4 outputs only; cuts only; no remote storage, content generation, transitions, background job service or database. concat and render encode intermediate shots then encode the concatenation: simple to inspect, but uses temporary disk and incurs generation loss. Budget workspace capacity for all inputs, snapshots, intermediates and final outputs; the per-file limit is not a volume quota. Host/container crash can leave .job-* directories; remove these only with the service stopped. Never mount credentials or unrelated documents into the media volume.
Stream-copy trim is keyframe-aligned and may be refused by duration verification. Use accurate for frame-level edits. Whole-video editing and QA reject sources longer than the duration limit; probe only inspects bounded file metadata. Inputs above 4096 pixels on either video axis are rejected for editing. No automatic text wrapping; unusual scripts may need additional fonts. Audio mix uses fixed gains, not dynamic ducking; normalization is single-pass and QA should confirm delivery loudness. Black/silence detectors can flag intentional content. Optional geometry/FPS expectations should be supplied for meaningful checks.
The image includes third-party media packages with their own licenses; the application license does not replace those obligations. Review distribution and codec-patent requirements for your use. Dependency versions are pinned directly, but transitive dependencies and base/OS packages are not yet locked: generate and commit a reviewed lockfile and pin image digests for release reproducibility.
Development and verification
npm install
npm run build
npm testnpm run dev starts native stdio. Tests use Node's test runner through tsx. Guard tests need no ffmpeg. Execution tests run synthetic rendering and process timeout checks when ffmpeg is available (otherwise skipped). Confirm drawtext/libx264/AAC availability on native installations. Build and tests must be run on the release host; source review alone is not execution evidence.
License
Copyright 2026 Christian Verbrugge. Application code: Apache License 2.0. See NOTICE and CONTRIBUTING.md.
Available Tools
9 toolsaudio_mixC
Mix music under source audio or a separate voice track, with gain, fades and optional loudness normalization.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| music | Yes | ||
| voice | No | ||
| output | Yes | ||
| normalize | No | ||
| targetLufs | No | ||
| voiceVolume | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions optional loudness normalization but does not state whether the tool creates a new output file, overwrites existing files, modifies the input, or what the return/result behavior is. These side effects are ambiguous for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the main purpose and then lists the key options. It contains no redundant words, though more structured detail would improve its usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, nested objects, no annotations, and no output schema, the description is too sparse. It does not explain how the 'music' and 'voice' objects relate to 'input', what formats are expected, or what the output is. An agent would need to inspect schemas and infer defaults to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It hints at 'gain' mapping to volume, 'fades' to fadeIn/fadeOut, and 'normalization' to normalize/targetLufs, but it does not explain key parameters like input, output, voiceVolume, start times, or source paths. The mapping is partial and leaves significant ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'mix' and the resource ('music under source audio or a separate voice track'), and mentions key options (gain, fades, loudness normalization). It is specific enough to convey the core operation, though it does not explicitly distinguish itself from siblings like 'overlay' or 'concat'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as 'overlay', 'trim', or 'concat'. The description implies a use case (adding background music or a voice track) but does not state conditions, exclusions, or when another sibling would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
concatA
Concatenate complete clips with normalized geometry, frame rate and audio; re-encodes.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | ||
| inputs | Yes | ||
| output | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden)Skip. It discloses two important traits: normalization of geometry/frame rate/audio and re-encoding. It does not mention potential side effects like output overwriting or whether source files are modified, but the core behavior is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no extraneous words. It front-loads the primary action and packs key behavioral details into the remainder, making every word earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential purpose and key behavioral traits, and the schema provides constraints and defaults for all parameters. However, it mentions 'audio' normalization without any corresponding parameter or explanation, and it omits details about output handling or encoding behavior. This leaves room for agent uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The phrase 'normalized geometry, frame rate' maps directly to the frame object's width, height, ratio, and fps fields, giving them context. It does not explain inputs or output explicitly, but those are self-evident from the tool name and schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Concatenate' and the resource 'complete clips', which clearly identifies the operation. It further distinguishes itself from siblings like 'trim' by emphasizing that it works on complete clips, and adds relevant qualifiers about normalization and re-encoding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The qualifier 'complete clips' implies this tool is for joining full-length clips rather than partial sections, which is a usage hint relative to 'trim'. However, it does not explicitly name alternatives or state when not to use this tool, leaving the agent to infer specific routing decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthA
Report ffmpeg/ffprobe versions, available encoders and workspace free space.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. The verb 'Report' strongly implies a read-only operation, and the content (versions, encoders, free space) suggests no side effects, but the description does not explicitly guarantee non-destructiveness or mention potential errors (e.g., missing ffmpeg) or latency. It is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero redundancy. Every word earns its place: 'Report' conveys the action, and the three items (versions, encoders, free space) are listed compactly. No filler or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description outlines the three pieces of information returned, which is reasonably complete. However, it does not specify the format (e.g., plain text, JSON), units for free space, or platform-specific behavior, which an agent might need to parse the result reliably. Slightly above minimal but with noticeable gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% covered and there is nothing to document. Per the rubric, a baseline of 4 is appropriate when there are no parameters, and the description does not need to add parameter-level meaning. No information is missing here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb 'Report' and lists concrete resources: ffmpeg/ffprobe versions, encoders, and workspace free space. It clearly distinguishes this health-check tool from the video-processing siblings (probe, trim, overlay, etc.), which are all operations on media. The purpose is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to call this tool versus alternatives. It is implied that it is a pre-flight check before media operations, but the description never states this, nor does it mention any prerequisites (e.g., ffmpeg installed) or what to do with the reported information. An agent must infer the appropriate context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overlayB
Burn typed text or a local raster image into a video during a time window.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | ||
| input | Yes | ||
| start | No | ||
| output | Yes | ||
| overlay | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates the output is burned into a video and limits images to local raster files, but it does not disclose whether the input is preserved, whether existing output is overwritten, or what processing limitations or side effects exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the action and object, with no filler or redundant restatement. It is appropriately sized for the core purpose it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is complex with nested objects, a two-option overlay union, and time-based parameters, yet the description is a single clause. It omits return/result behavior, coordinate/unit context, and how the time window maps to start/end, so the agent cannot fully predict call behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds some meaning by distinguishing typed text from raster image overlays and mentioning a time window, but it does not explain the required input, output, or frame parameters. With schema description coverage at 0%, this is only partial compensation for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operation ('Burn'), a specific resource ('a video'), and the overlay content types ('typed text' or 'local raster image'), plus a time constraint. This clearly differentiates it from siblings like concat, trim, audio_mix, or health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use overlay versus alternatives such as transform or render, and no explicit when-not-to-use conditions. An agent must infer applicability solely from the operation name and the single sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probeC
Inspect duration, tracks, codecs, resolution and frame rate.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool inspects media properties but doesn't disclose whether it reads from a file path, URL, or uploaded content; whether it requires ffprobe/ffmpeg; or what happens on unsupported formats. The 'input' parameter is ambiguous. For a read-only inspection tool, the description should clarify what input means and what the output looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and the key properties. No wasted words. It could be slightly more explicit about the input type, but it is concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter coverage, the description is too thin. An agent cannot tell what 'input' refers to, what the return format is, or what errors might occur. For a tool with a single parameter, the description should at least define the input format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists the properties being inspected (duration, tracks, codecs, resolution, frame rate) but doesn't explain what 'input' should be (file path? URL? media ID?). The single parameter is required but its semantics are under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inspect') and names the resource (media properties: duration, tracks, codecs, resolution, frame rate). It clearly distinguishes from sibling tools like trim, overlay, concat, transform, audio_mix, render, which are all mutation/creation operations. However, it doesn't explicitly name the tool's domain (e.g., media file) beyond the listed properties, which is a minor gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is an inspection/read-only tool, contrasting with the mutation-oriented siblings. It doesn't explicitly state when to use it vs alternatives, but the verb 'Inspect' and the property list make the use case reasonably clear. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qaC
Measure duration, black intervals, silence, integrated LUFS, resolution and FPS. Failed analysis is an error, not a pass.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| silenceDb | No | ||
| targetLufs | No | ||
| expectedFps | No | ||
| expectedWidth | No | ||
| lufsTolerance | No | ||
| expectedHeight | No | ||
| blackMinDuration | No | ||
| expectedDuration | Yes | ||
| durationTolerance | No | ||
| silenceMinDuration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without any annotations, the description carries the full burden of behavioral disclosure. The only behavior disclosed is 'Failed analysis is an error, not a pass', which is useful but does not cover return format, side effects, permissions, or failure modes beyond pass/error. The description remains highly opaque for an 11-parameter tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The primary action and measurement targets are front-loaded, and the second sentence adds a meaningful behavioral caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 11 parameters, 2 required, no output schema, and no annotations, a two-sentence description is grossly incomplete. It does not explain what the result looks like, how pass/fail is determined, what 'input' refers to, or how tolerances interplay with the expected values. An agent cannot call this tool with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate for missing parameter meanings. It maps high-level concepts (duration, black intervals, silence, LUFS, resolution, FPS) to some parameters, but leaves many parameters like 'input', 'lufsTolerance', 'durationTolerance', and 'silenceMinDuration' unexplained. It provides only a loose category mapping, not real semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Measure') with a clear list of resources: duration, black intervals, silence, integrated LUFS, resolution, and FPS. It is specific enough to understand what the tool does, but it does not explicitly differentiate from the sibling tool 'probe', which may also inspect media properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'probe' or 'render'. There is no mention of prerequisites, appropriate scenarios, or which sibling to prefer under which conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renderB
Render ordered shots, local overlays, per-shot audio and optional music to MP4.
| Name | Required | Description | Default |
|---|---|---|---|
| output | Yes | ||
| composition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states the action without mentioning side effects (e.g., file writing to output path), resource intensity, or any constraints beyond what the schema implies. There is no information about return values or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that efficiently conveys the core function without unnecessary detail. It is front-loaded with the action and lists the key inputs clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex nested schema with many properties and no annotations or output schema, this sparse description leaves agents without critical context such as expected output format, side effects, or usage scenarios. It is inadequate for a tool with two required parameters and deep nesting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It gives a high-level idea that composition includes shots, overlays, audio, and music, but does not explain the 'output' parameter or provide detailed semantics for any field. The added value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders ordered shots, local overlays, per-shot audio, and optional music to MP4. It uses a specific verb (render) and resource (MP4 output), and effectively differentiates from sibling tools like concat or overlay by focusing on final composite output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus siblings such as concat, overlay, or audio_mix. It does not mention alternatives, conditions, or exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transformB
Resize, crop or pad a video to a ratio or explicit even dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | Yes | ||
| input | Yes | ||
| output | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the operations (resize, crop, pad) but doesn't disclose side effects, whether the input file is modified in place, whether output is a new file, or any constraints like even dimensions requirement. The phrase 'explicit even dimensions' hints at a constraint but doesn't explain why or what happens if violated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the main operations. It's efficient but could be slightly more structured by separating the ratio vs explicit dimensions cases. No wasted words, but it doesn't earn a 5 because it omits important usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex nested schema (frame object with fit, fps, crop, ratio, width, height), no annotations, and no output schema, the description is insufficient. An agent needs to know how input/output paths are specified, what the frame object controls, and what the result of the operation is. The description only covers the high-level purpose, leaving critical details to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. The description mentions 'ratio or explicit even dimensions' which maps to the frame.ratio and frame.width/height parameters, but it doesn't explain the input/output string parameters or the frame.fit/fps/crop sub-parameters. The nested object structure is complex, and the description only partially clarifies it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Resize, crop or pad') and resource ('a video') with target dimensions/ratio, which clearly distinguishes it from siblings like trim, overlay, or concat. It doesn't explicitly name a sibling, but the action is specific enough to identify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for video geometry transformations (resize/crop/pad) but provides no explicit when-to-use guidance or alternatives. Sibling names like probe, trim, overlay, concat suggest related tools, but the description doesn't state when to choose transform over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trimB
Trim video. Auto attempts stream copy, then falls back to encoding; copy is keyframe-aligned.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| input | Yes | ||
| start | Yes | ||
| output | Yes | ||
| duration | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about auto mode attempting stream copy, falling back to encoding, and keyframe alignment. However, it does not explain behavior of copy vs accurate modes, overwrite behavior, or permissions, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. 'Trim video' front-loads the purpose, and the second sentence packs key technical behavior efficiently. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters, zero schema descriptions, no annotations, and no output schema, the description is far from complete. It omits units for start/duration, mode semantics, edge cases, and output handling. A tool of this complexity needs more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. While it indirectly explains the auto mode's behavior, it does not clarify the meaning of start, duration, output, or the mode enum values. This is insufficient for a 5-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Trim video.' This clearly distinguishes the tool from siblings like concat, overlay, and transform. However, it does not explicitly name any sibling or differentiate conditions, so it stops short of full clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool versus alternatives like concat or transform. It describes internal behavior but lacks any explicit conditions, prerequisites, or exclusions that would help an agent choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
audio_mix - First observed
concat - First observed
health - First observed
overlay - First observed
probe - First observed
qa - First observed
render - First observed
transform - First observed
trim
TDQS
Scored across 9 tools
Each tool targets a distinct editing operation, and most are easy to tell apart. The only real ambiguity is probe vs qa, since both report duration/resolution/FPS, but qa is clearly a quality gate while probe focuses on codecs and tracks.
Most names are readable lowercase verbs like trim, concat, transform, and render, but the set mixes bare verbs, the underscored compound audio_mix, and noun-style names qa and health. There is no consistent verb_noun or noun_verb convention across the full set.
Nine tools is well within the ideal 3-15 range for a focused server. Each tool earns its place by covering a distinct stage of a video editing pipeline without redundancy or bloat.
The surface covers the full lifecycle: inspect, trim, assemble, transform, overlay, mix audio, render, QA, and environment health. There are no obvious dead ends for a video-editing workflow; render and qa close the loop.
Maintenance
Related MCP Connectors
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
- RendobarOAuthcom.rendobar
Transform video, audio and images, and generate media from prompts. FFmpeg, captions, models.
Hosted MCP tools for FFmpeg-style video and audio processing through FFMPEG API.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides video and audio manipulation tools powered by FFmpeg, enabling AI assistants to perform media operations such as cutting, converting, and removing silence.652 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables video processing operations (speed adjustment, keyframe optimization, concatenation, and file management) using FFmpeg via Claude Desktop.52 npm3MIT
- FlicenseNot gradedqualityDmaintenanceEnables comprehensive video/audio processing, analysis, and streaming via natural language by exposing 40+ FFmpeg tools as MCP tools.22-
- FlicenseAqualityDmaintenanceEnables local media processing (video/audio) using FFmpeg and FFprobe, allowing frame extraction, audio conversion, and metadata retrieval through natural language.5-