ffmpeg-mcp-server
This MCP server gives AI tools local FFmpeg/FFprobe capabilities to inspect, convert, edit, optimize, and preview audio/video files.
Probe media metadata, streams, codecs, resolution, bitrate, and duration.
Convert video/audio formats with web MP4, WebM, GIF presets, CRF, FPS, resolution, and hardware acceleration.
Trim clips by start/end/duration, with optional accurate re-encoding.
Extract audio, including 16 kHz mono WAV for Whisper, plus MP3/AAC/FLAC/copy.
Capture thumbnails and generate waveform PNGs with optional base64 image previews.
Compress videos to target sizes or quality presets for upload limits.
Concatenate multiple media files losslessly or with re-encoding.
Embed SRT/VTT subtitle tracks without re-encoding video.
Change playback speed with pitch correction or mute audio.
Reformat aspect ratios to 9:16, 1:1, 16:9, or 4:5 using blur, padding, or center crop.
Remove silence from start/end or all pauses.
Create split-screen Reels/TikTok-style videos with audio mixing and optional subtitles.
README also describes hardware encoding, MCP progress updates, cancellation, and capabilities/presets resources plus workflow prompts.
Provides tools for inspecting, converting, trimming, extracting audio and thumbnails, compressing, concatenating, generating waveforms, embedding subtitles, and changing playback speed of video and audio files using local FFmpeg and ffprobe.
ffmpeg-mcp-server
A Model Context Protocol (MCP) server that gives AI tools access to FFmpeg and FFprobe to process video and audio locally.
Supports cross-platform GPU hardware encoding (Apple Silicon, NVIDIA NVENC, Intel QuickSync, AMD AMF), live progress updates via MCP progress tokens, instant cancellation via AbortSignal, and inlines image previews directly for multimodal vision models.
Why This Exists
When AI agents process media, they often hallucinate invalid flags, syntax errors, or incompatible pixel formats.
This server provides 17 typed tools using Zod schemas. The AI passes parameters (such as { inputPath: "video.mov", preset: "web_mp4" }), and the server runs the valid FFmpeg command locally with proper error handling, hardware acceleration, and progress notifications.
Related MCP server: ffmpeg-mcp
Key Features
Universal Hardware Acceleration: Automatically detects and leverages hardware encoders across macOS (VideoToolbox), Linux/Windows GPUs (NVIDIA NVENC, Intel QuickSync, AMD AMF, and VA-API) for 5x–20x faster exports with low CPU usage.
Real-time Progress Reporting: Emits live percentage updates via standard MCP progress tokens (
notifications/progress), enabling progress bars in modern AI clients.Instant Cancellation: Listens to client
AbortSignalevents to immediately terminate child FFmpeg processes when a generation is stopped.Multimodal Vision Previews: Inlines base64 image data for thumbnails, audio waveforms, and multi-frame contact sheets so vision models (Claude 3.7, GPT-4o, Gemini) can "see" media content.
Social Formats & Automation: Reformats landscape video to 9:16 vertical video with blurred backgrounds, burns customizable hardcoded subtitles, and stacks top/bottom split-screen reels for TikTok and Instagram Reels.
Audio Engineering: Normalizes loudness to broadcast/streaming standards (EBU R128 / -16 LUFS), cleans vocal audio with 80Hz rumble removal, and trims dead air while preserving lip-sync.
Included Tools (17 Total)
Tool | Description | Key Parameters |
| Inspects media files with ffprobe. Returns metadata, streams, codecs, resolution, and duration as JSON. |
|
| Converts video and audio formats. Includes presets for web MP4, WebM, and animated GIF with GPU acceleration. |
|
| Cuts a segment from a video or audio file using stream copy or re-encoding. |
|
| Rips audio tracks from video. Includes a 16kHz mono WAV preset for Whisper speech recognition. |
|
| Captures a still image at a timestamp or midpoint. Returns base64 image data for vision models. |
|
| Compresses video to fit target sizes (such as GitHub PRs under 10MB or Discord under 25MB). |
|
| Changes video ratio to 9:16 vertical, 1:1 square, or 4:5 portrait with blurred borders or center crop. |
|
| Stacks two videos top-and-bottom (9:16 Reels/TikTok) or side-by-side with audio mixing and subtitles. |
|
| Detects and removes silent pauses from recordings while preserving video & audio lip-sync. |
|
| Joins multiple video or audio files in order using stream copy or re-encoding. |
|
| Generates a PNG waveform image. Returns base64 image data for vision models. |
|
| Embeds SRT or VTT subtitle tracks into MP4/MKV video files without re-encoding video. |
|
| Hardcodes subtitles directly onto video frames with customizable font size, colors, and margins. |
|
| Extracts multiple representative frames across the video and generates a contact sheet grid for vision AI. |
|
| Normalizes audio loudness using EBU R128 (default -16 LUFS) with optional speech clarity high-pass filter. |
|
| Places a watermark image or logo PNG over video with customizable corner position, scale, and opacity. |
|
| Adjusts playback speed (such as 2x fast forward or 0.5x slow motion) with pitch correction. |
|
MCP Resources & Prompts
Resources
media://capabilities: Inspects local FFmpeg installation, active version, detected hardware accelerators (VideoToolbox, NVENC, QSV, AMF, VAAPI), and supported video encoders.media://presets: Standard reference table of social aspect ratios, platform upload file size limits, and broadcast audio loudness targets.
Prompts
social_clip_generator: Interactive workflow that turns raw landscape video into vertical shorts with blurred background padding, trimmed silence, and hardcoded captions.whisper_audio_prep: Standard pipeline for extracting 16kHz mono WAV audio and normalizing loudness for speech-to-text models.
Requirements
Node.js >= 18.0.0
FFmpeg & FFprobe installed locally:
macOS:
brew install ffmpegLinux (Ubuntu/Debian):
sudo apt update && sudo apt install ffmpeg libass-devWindows:
winget install Gyan.FFmpegorchoco install ffmpeg
Installation
Quick Start (Claude Desktop, Cursor, Antigravity)
Run directly with npx (no manual cloning or building required):
{
"mcpServers": {
"ffmpeg": {
"command": "npx",
"args": ["-y", "@ash_j1997/ffmpeg-mcp-server"]
}
}
}Configuration File Locations:
Claude Desktop (macOS):
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop (Windows):
%APPDATA%\Claude\claude_desktop_config.jsonAntigravity IDE:
~/.gemini/config/mcp_config.jsonCursor / Windsurf: Add as a stdio server with command
npxand args["-y", "@ash_j1997/ffmpeg-mcp-server"]
Local Development & Testing
Install dependencies:
npm installRun build and automated test suite:
npm test
License
MIT © Ashutos1997
Available Tools
17 toolsadd_overlayB
Place a watermark image, logo PNG, or branding graphic over a video with customizable position, padding, scaling, and opacity.
| Name | Required | Description | Default |
|---|---|---|---|
| opacity | No | Overlay opacity from 0.05 (subtle watermark) to 1.0 (fully opaque). Default: 1.0. | |
| padding | No | Margin padding in pixels from the edge. Default: 20. | |
| position | No | Corner or screen placement for the overlay. Default: 'bottom_right'. | bottom_right |
| videoPath | Yes | Path to the base video file. | |
| outputPath | Yes | Destination path for the output video (.mp4 or .mov). | |
| scaleWidth | No | Optional width in pixels to scale the overlay, keeping its original aspect ratio (e.g. 150). | |
| overlayPath | Yes | Path to the watermark, logo, or overlay image (.png, .jpg, or .webp). | |
| hardwareAcceleration | No | Use hardware-accelerated video encoding when available. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the tool places an image over a video, but does not clarify whether the source is modified or a new file is created, overwrite behavior, permission requirements, encoding implications, or return behavior.
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 front-loaded sentence with no wasted clauses. It efficiently states the capability and the main customizable dimensions.
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 rich and fully documented, and outputPath conveys destination behavior. However, with no annotations and no output schema, the description should say more about the result of the operation, such as whether it returns the output path, how existing files are handled, or what hardwareAcceleration changes.
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 100%, so all eight parameters are already documented with meaning, defaults, ranges, and format expectations. The description repeats position, padding, scaling, and opacity at a high level without adding syntax or constraints beyond the schema.
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 specific action (place an overlay) and specific resource types (watermark, logo PNG, branding graphic) over a video. It is clear enough to distinguish this from subtitle or audio tools, but it does not explicitly contrast itself with siblings such as burn_subtitles or create_split_screen.
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 a branding/watermarking use case, but gives no explicit when-to-use guidance, prerequisites, or alternatives. It does not say when to choose add_overlay instead of related tools such as burn_subtitles or create_split_screen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_subtitlesA
Embed an SRT or VTT subtitle track into a video container (mov_text for MP4, srt for MKV) without re-encoding the video stream.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Subtitle track label displayed in video players | English |
| language | No | ISO 639-2 three-letter language code (e.g. 'eng', 'spa', 'fra', 'deu') | eng |
| videoPath | Yes | Path to the source video file | |
| outputPath | Yes | Target output video path (.mp4, .mkv, or .mov) | |
| subtitlesPath | Yes | Path to subtitle file (.srt or .vtt) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the behavioral load; it usefully discloses no re-encoding and container-to-codec mapping. It omits write/overwrite semantics, error conditions, and .mov handling (which appears only in the schema), leaving meaningful gaps for a mutation 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?
A single, front-loaded sentence packs the essential verb, resource, formats, and key constraint with no wasted words.
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 a rich parameter schema and no output schema, the description is adequate for invocation, but for a mutation tool with no annotations it should ideally flag output overwrite behavior and explicitly distinguish itself from burn_subtitles.
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 100%, so the baseline is 3. The description reinforces accepted subtitle formats and adds container-codec behavior, but adds little parameter-specific meaning beyond what the schema already documents.
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?
States a specific verb ('Embed') and resource ('subtitle track into a video container'), and the 'without re-encoding' phrase implicitly separates it from hard-burn tools. However, it does not name the sibling burn_subtitles, so an agent must infer the distinction rather than being explicitly routed.
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?
Provides implied usage (soft-subtitle embedding, accepted formats) but never states when to choose this over burn_subtitles or other subtitle/media tools, nor any exclusions. No explicit when/when-not guidance is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
burn_subtitlesA
Hardcode/burn subtitles directly into video frames with customizable font size, colors, and positioning. Unlike soft subtitles, burned subtitles render on all platforms including TikTok, Instagram Reels, and YouTube Shorts.
| Name | Required | Description | Default |
|---|---|---|---|
| marginV | No | Vertical margin distance in pixels from the bottom edge. Default: 35. | |
| fontSize | No | Subtitle font size in points. Default: 24. | |
| fontColor | No | Primary subtitle text color: 'white', 'yellow', 'cyan', or ASS hex e.g. '&H00FFFFFF'. Default: 'white'. | white |
| videoPath | Yes | Path to the source video file. | |
| outputPath | Yes | Target output video path (.mp4, .mov, or .mkv). | |
| outlineColor | No | Subtitle border/outline color: 'black', 'white', or ASS hex. Default: 'black'. | black |
| outlineWidth | No | Outline thickness in pixels. Default: 2. | |
| subtitlesPath | Yes | Path to the subtitle file (.srt, .vtt, or .ass) to burn into the video. | |
| hardwareAcceleration | No | Use hardware-accelerated video encoding when available. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that subtitles are physically burned into frames and render across platforms, but it omits important behavior such as whether the source video is preserved, overwrite behavior, processing time, permissions, and error handling.
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 focused sentences with zero waste. The core action is front-loaded, and the platform compatibility note provides useful supporting context without being verbose.
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 9-parameter media-processing tool with no annotations and no output schema, the description covers purpose and platform benefit, and the schema fully documents parameters. However, it does not describe return values, source/output file behavior, or processing side effects, leaving some contextual 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 schema has 100% description coverage, so all nine parameters are already documented. The description mentions font size, colors, and positioning generally, but adds no parameter-level detail beyond what the schema provides, making the baseline score appropriate.
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 and target: 'Hardcode/burn subtitles directly into video frames.' It also distinguishes burned subtitles from soft subtitles conceptually, though it does not explicitly name the sibling tool add_subtitles.
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?
It gives clear usage context by explaining that burned subtitles render on all platforms, including TikTok, Instagram Reels, and YouTube Shorts. However, it does not explicitly direct users to add_subtitles for soft subtitles or state exclusions and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_speedB
Change video and audio playback speed (such as 2x for fast forward or 0.5x for slow motion) with pitch correction.
| Name | Required | Description | Default |
|---|---|---|---|
| speed | Yes | Playback speed multiplier (e.g., 2.0 for 2x fast-forward/timelapse, 0.5 for slow-motion) | |
| inputPath | Yes | Path to the source video or audio file | |
| muteAudio | No | Whether to strip audio track completely | |
| outputPath | Yes | Target output file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It usefully states that pitch correction is applied, which is a meaningful behavioral trait beyond a simple speed change. However, it omits important mutation details such as whether an existing output file is overwritten, what formats are supported, and how the muteAudio option interacts with pitch correction.
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 front-loaded sentence with zero waste. It names the action, media types, example values, and a key behavioral note (pitch correction) without unnecessary elaboration.
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 file-transforming tool with no annotations and no output schema, the description is minimally adequate but leaves out important context: overwrite behavior, supported input/output formats, and how muteAudio affects the result. The rich schema covers parameters, but the behavioral completeness is still thin.
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 coverage is 100%, so all four parameters are already documented in the schema, including speed examples and the muteAudio flag. The description repeats the speed examples and adds 'pitch correction,' but does not add meaningful semantics for inputPath, outputPath, or muteAudio beyond what the schema provides.
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: changing video and audio playback speed, with examples like 2x fast forward and 0.5x slow motion. It is clearly distinct from sibling media tools, but it does not explicitly contrast itself with alternatives such as trim_media or media_convert.
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 this tool versus alternatives. Sibling tools like media_convert, trim_media, and compress_video are not mentioned, so the agent must infer the use case from the tool name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compress_videoA
Compress video files to fit upload limits (such as GitHub PRs under 10MB or Discord under 25MB) using target file sizes or CRF quality levels. Does not modify the original file.
| Name | Required | Description | Default |
|---|---|---|---|
| crf | No | Quality value between 18 (higher quality) and 45 (smaller file). Overrides preset. | |
| preset | No | Preset when targetSizeMB is not set: 'github_pr', 'discord', 'email', 'balanced', or 'high_quality'. Default: 'balanced'. | balanced |
| maxWidth | No | Maximum video width in pixels, such as 1280 for 720p. Keeps aspect ratio. | |
| inputPath | Yes | Path to the source video file (e.g. './recordings/demo.mov') | |
| outputPath | Yes | Destination path for the compressed MP4 file (e.g. './recordings/demo_compressed.mp4') | |
| targetSizeMB | No | Target output size in megabytes, such as 9.5 for GitHub or 24 for Discord. Computes bitrates from duration. | |
| hardwareAcceleration | No | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the key safety trait: 'Does not modify the original file,' implying a new output file is written. It omits other relevant behavior such as processing cost/time, requirements on the source file, and how the preset/CRF/targetSizeMB inputs interact or which wins.
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?
Two tightly written sentences with the purpose and the non-destructive guarantee front-loaded; no filler and every clause carries information.
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 7-parameter tool with complete schema descriptions and no output schema, the description covers the what, the why, and the safety guarantee. The only real gap is the precedence/interaction between preset, crf, and targetSizeMB, which the schema only partially signals via 'Overrides preset.'
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 coverage is 100%, so 3 is the baseline. The description goes slightly beyond by tying the compression goals to real size budgets (GitHub <10MB, Discord <25MB), which gives the agent intuition for choosing targetSizeMB or a preset over a raw CRF value.
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?
States a specific verb and resource ('Compress video files') plus a concrete goal (fit upload limits) and the two mechanisms available (target file sizes, CRF quality levels). It does not, however, position itself against close siblings like media_convert or reformat_aspect_ratio, which an agent must choose between.
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?
Gives clear situational context — compressing for GitHub PRs under 10MB or Discord under 25MB — which implies when to reach for it. It stops short of naming alternatives or stating exclusions (e.g., 'for plain format conversion use media_convert instead').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
concat_mediaA
Join multiple video or audio files in order into a single file. Uses stream copy for matching files or re-encodes when formats differ.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Concatenation mode. 'lossless' uses stream copy without quality loss (inputs must share codecs). 'reencode' normalizes differing resolutions/codecs. | lossless |
| inputPaths | Yes | List of media files to concatenate in sequential order | |
| outputPath | Yes | Target output file path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the key behavioral trait: stream copy versus re-encoding and the quality/codec consequences. However, it omits what happens to an existing output file, whether re-encode is slower, and how codec mismatches in lossless mode are reported.
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?
Two tight sentences, action first, mechanism second, with zero redundant phrasing. Nothing could be removed without losing information.
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 three-parameter tool with a fully documented schema and no output schema, the description covers the essential behavior and the mode trade-off. Remaining gaps (overwrite semantics, return value) are modest given the rich 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 100% and the enum for mode is fully documented in the schema, so the baseline is 3. The description's 'in order' and 're-encodes when formats differ' echo but do not extend the schema's 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?
States a specific verb (join) and resource (multiple video/audio files) plus the result (single file), which distinguishes it from siblings like media_convert or trim_media that transform rather than combine. It stops short of naming an alternative explicitly, but the operation is unambiguous.
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 second sentence implies when each internal strategy applies (matching files vs differing formats), which is useful, but it never says when to choose concat_media over media_convert, create_split_screen, or repeated trim operations. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_split_screenB
Combine two video files into a split-screen video. Stacks clips vertically (1080x1920 for Reels and TikTok) or places them side-by-side. Supports audio mixing and subtitle embedding.
| Name | Required | Description | Default |
|---|---|---|---|
| layout | No | Split layout: 'vertical_9_16' (1080x1920 stacked top/bottom for Reels and TikTok), 'horizontal_16_9' (1920x1080 side-by-side), or 'square_1_1' (1080x1080 stacked). Default: 'vertical_9_16'. | vertical_9_16 |
| outputPath | Yes | Destination path for the split-screen output file (e.g. './reel.mp4'). | |
| audioSource | No | Audio track selection: 'mix' (blends audio from both videos), 'first' (uses only top/left audio), 'second' (uses only bottom/right audio), or 'mute'. Default: 'mix'. | mix |
| subtitlesPath | No | Optional path to an .srt or .vtt subtitle file to embed into the output video. | |
| firstVideoPath | Yes | Path to the top video (vertical layout) or left video (horizontal layout). | |
| secondVideoPath | Yes | Path to the bottom video (vertical layout) or right video (horizontal layout). | |
| hardwareAcceleration | No | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
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, yet it omits the operationally important traits: whether an existing file at outputPath is overwritten, how mismatched clip durations or resolutions are handled, and roughly how long/reliably a two-input encode completes. It does disclose the composition model (stacked vs side-by-side, audio mixing, subtitle embedding), which is why it is not a 1.
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?
Two sentences with zero filler: the core action and output framing come first, capability details second. Nothing is repeated and every clause carries information.
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 7-parameter, file-writing tool with no annotations and no output schema, the description is adequate on composition but silent on the return value (does it yield the output path or nothing?), overwrite behavior, and failure modes. An agent could call it correctly but not predict its side effects.
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 coverage is 100% and every parameter, including both enums and their defaults, is already documented in the schema. The description restates the layout and audio behavior in prose but adds no new constraints, formats, or edge cases, so the baseline 3 applies.
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 gives a specific verb and resource — 'Combine two video files into a split-screen video' — plus the spatial arrangement options, which clearly separates it from a plain concat_media call. It never names a sibling or states the boundary explicitly, so an agent must infer the distinction from the tool name alone.
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?
Usage is only implied via the mention of Reels/TikTok and the layout options; there is no statement of when to pick this over concat_media, add_overlay, or reformat_aspect_ratio, and no prerequisites (e.g., matching durations, codec compatibility) are called out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_audioA
Extract an audio track from a video file into a standalone audio file. Supports the 'whisper_wav' preset (16kHz mono WAV) for speech recognition models, plus MP3, AAC, FLAC, and stream copy.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Audio format: 'whisper_wav' (16kHz mono WAV for Whisper), 'mp3', 'aac', 'flac', or 'copy' (extract without re-encoding). Default: 'mp3'. | |
| bitrate | No | Target audio bitrate for MP3 or AAC (e.g. '128k', '192k', '320k'). | |
| inputPath | Yes | Path to the source video or audio file. | |
| outputPath | Yes | Destination path for the output audio file (e.g. './extracted.wav' or './audio.mp3'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It usefully discloses that stream copy extracts without re-encoding and that whisper_wav produces 16kHz mono WAV for speech recognition. It does not address overwrite behavior, failure modes when no audio track exists, or file operation semantics, leaving meaningful behavioral 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 front-loaded sentences with no wasted wording. The primary action is stated first, followed by concise format support details.
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 moderately complex file-extraction tool with fully described parameters but no annotations or output schema, the description covers purpose and format behavior well. It could be more complete by mentioning return behavior or overwrite semantics, but it provides enough to call the tool 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 100%, so the schema already documents all four parameters thoroughly. The description reinforces the format options and whisper preset, but adds little beyond what the schema already states, so baseline 3 is appropriate.
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: extract an audio track from a video file into a standalone audio file. It names supported formats including the whisper_wav preset, making the tool's function clear. It does not explicitly distinguish itself from siblings like media_convert or normalize_audio, so it falls short of a 5.
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?
Usage is implied by the extraction scenario and the note that whisper_wav is for speech recognition models. However, there is no explicit guidance on when to use this tool versus media_convert or normalize_audio, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_keyframesB
Extract multiple representative frames across a video's timeline. In 'montage' mode, merges frames into a single contact-sheet grid image and inlines base64 for vision models to inspect the whole video at once.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of representative frames to extract across the video timeline. Default: 6. | |
| layout | No | Output format: 'montage' combines all frames into a single contact-sheet grid image for vision models; 'individual' exports separate frame images. Default: 'montage'. | montage |
| inputPath | Yes | Path to the source video file. | |
| outputPath | Yes | Destination image path (e.g. './keyframes_grid.png' or './frames/frame_%02d.jpg'). | |
| includeBase64 | No | Inline base64 image data in response for vision models. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that montage mode merges frames into a contact-sheet grid and inlines base64, but it does not state that the tool writes files, how outputPath is handled, or whether existing files are overwritten.
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 compact and front-loaded, with the core extraction purpose stated first and the montage/base64 detail following efficiently. It is appropriately sized for a tool with a fully documented schema.
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 rich and covers all parameters, and there is no output schema, so the description need not explain return values. However, for a file-producing media tool with no annotations, it should say more about output behavior, individual mode, or file overwrite semantics.
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 100%, so the schema already documents all five parameters, including defaults, enum values, and paths. The description reinforces montage mode and base64 usage but does not add new parameter-level meaning beyond the schema.
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: extract representative frames across a video timeline. It also clarifies the montage behavior, distinguishing it somewhat from a single-thumbnail tool, but it does not explicitly name sibling alternatives such as extract_thumbnail.
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?
Usage is implied through the mention of vision models inspecting the whole video at once, but there is no explicit guidance on when to choose this over extract_thumbnail or when to prefer individual versus montage output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_thumbnailA
Capture a single still image from a video. Returns the saved image path and inlined base64 image data so vision models can inspect the frame.
| Name | Required | Description | Default |
|---|---|---|---|
| inputPath | Yes | Path to the source video file. | |
| timestamp | No | Timestamp to capture, such as '00:00:05', '10', or 'midpoint' for the middle frame. Default: '00:00:01'. | |
| outputPath | Yes | Destination image path ending in .png or .jpg (e.g. './thumb.png'). | |
| resolution | No | Optional scaled size formatted as 'WIDTHxHEIGHT', such as '1280x720'. Defaults to source resolution. | |
| includeBase64 | No | Return base64 image data in response for vision models. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose the response shape well – a saved file path plus inlined base64 for vision models – which is genuinely useful. However, it omits write semantics to outputPath (overwrite? create directories?), failure modes for invalid timestamps, and any size/cost implications of base64 inlining, which matters for a file-writing tool with zero annotation coverage.
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?
Two sentences, front-loaded with the action and then the return contract. Every clause earns its place and nothing is padded.
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?
Purpose and return values are covered, which offsets the missing output schema. But with no annotations and a file-writing tool, the definition leaves gaps an agent needs: overwrite/directory behavior on outputPath, behavior on invalid or out-of-range timestamps, and the distinction from extract_keyframes.
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 100%, so all five parameters including timestamp formats and resolution syntax are already documented in the schema. The description reinforces only the base64 return behavior and adds no new parameter semantics, so the baseline 3 applies.
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?
States a specific verb and resource: 'Capture a single still image from a video,' which is unambiguous. It does not differentiate itself from the sibling extract_keyframes, so an agent must infer that this tool returns one frame while that one returns many.
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?
Usage is only implied by 'single still image' – there is no explicit statement of when to choose this over extract_keyframes, nor any prerequisite or exclusion (e.g. video-only input, overwrite behavior). The word 'single' is the only signal separating it from its closest sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_waveformB
Generate a PNG waveform image from an audio or video file. Returns the file path and inlined base64 image data.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Waveform color in hex or name (such as '0x6366f1', 'white', or 'black'). Default: '0x6366f1'. | 0x6366f1 |
| scale | No | Amplitude scale: 'lin', 'log', or 'sqrt'. Default: 'lin'. | lin |
| width | No | Image width in pixels. Default: 1200. | |
| height | No | Image height in pixels. Default: 280. | |
| inputPath | Yes | Path to the audio or video file. | |
| outputPath | Yes | Destination path for the PNG image. | |
| includeBase64 | No | Return base64 image data in the response for vision models. Default: true. |
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. It does usefully disclose the return payload ('file path and inlined base64 image data'), but it omits side-effect behavior: that a file is written to outputPath, whether an existing file is overwritten, whether parent directories are created, and whether the operation is expensive for long media. That leaves real gaps for a file-writing tool with zero annotation coverage.
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?
Two sentences, zero filler, with the core action front-loaded and the return contract in the second line. Each sentence earns its place, and the return statement is especially valuable given there is no output schema.
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 7-parameter tool with full schema coverage and no output schema, the description covers purpose and return shape adequately. It is not fully complete: supported input formats, overwrite/transactional behavior, and failure modes are unaddressed.
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 100%, so every parameter including color, scale, width, height, includeBase64, and the two paths is already documented in the schema. The description adds no syntax or behavioral detail beyond echoing that base64 data may be returned, so the baseline 3 applies.
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 — 'Generate a PNG waveform image from an audio or video file' — which no sibling tool does, so an agent can distinguish it from extract_thumbnail, extract_keyframes, or extract_audio without opening the schema. It stops short of an explicit sibling comparison, keeping it at 4 rather than 5.
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?
There is no guidance on when to use this versus alternatives such as extract_thumbnail or extract_keyframes, nor any stated prerequisites (e.g., that the input must exist locally or which codecs are supported). The use case is inferable from the purpose sentence but nothing in the text actively routes the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_convertA
Convert video and audio files between formats. Includes presets for web MP4 (H.264/AAC), WebM (VP9/Opus), and animated GIF. Supports hardware acceleration on Apple Silicon, NVIDIA, Intel, and AMD.
| Name | Required | Description | Default |
|---|---|---|---|
| crf | No | Quality factor from 0 to 51. Lower numbers mean higher quality. Default: 23 for MP4, 30 for WebM. | |
| fps | No | Target frame rate in frames per second, such as 30, 60, or 15 | |
| preset | No | Encoding preset: 'web_mp4' for browser playback, 'webm' for WebM video, 'gif' for animated GIF, or 'auto'. Default: 'auto'. | |
| inputPath | Yes | Path to the source media file to convert | |
| outputPath | Yes | Destination path for the converted file (e.g. ./output.mp4, ./output.webm, ./animation.gif) | |
| resolution | No | Target size formatted as 'WIDTHxHEIGHT', such as '1920x1080' or '1280x720' | |
| hardwareAcceleration | No | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses useful capability details such as preset codecs and hardware-accelerated encoding, but it does not explain output-writing behavior, overwrite semantics, failure handling, or what happens when hardware acceleration is unavailable.
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 front-loaded with the core action, then adds preset and hardware details in a compact four-sentence structure. There is no redundant wording, and each sentence contributes useful 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?
For a seven-parameter media mutation tool with no annotations and no output schema, the description covers purpose, presets, and hardware acceleration but leaves gaps around return values, overwrite behavior, and error conditions. The schema fills in parameter details, but the description is only partially complete for the tool's complexity.
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 100%, so the schema already documents all seven parameters thoroughly. The description adds some useful meaning for the preset parameter by naming codecs such as H.264/AAC and VP9/Opus, but it does not enrich the other major parameters like crf, fps, or resolution.
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: convert video and audio files between formats. It also names concrete preset targets, so the tool is easy to identify. It does not explicitly differentiate itself from related siblings such as compress_video or reformat_aspect_ratio.
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?
Usage is implicitly clear: use this when changing media container/codec formats. However, the description gives no explicit when-to-use guidance, no exclusions, and no comparison to alternatives like compress_video or reformat_aspect_ratio.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_probeA
Inspect audio and video files with ffprobe. Returns container metadata, stream details, codecs, resolution, bitrate, and duration as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| inputPath | Yes | Path to the media file to inspect (e.g. './video.mp4') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden; it clearly frames the operation as inspection and states that results are returned as JSON with metadata, stream details, codecs, resolution, bitrate, and duration. It does not explicitly state that files are never modified or describe failure behavior, but the read-only nature is strongly implied by "Inspect" and by the return-value summary.
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, front-loads the core action, and then summarizes the return content. Every phrase contributes useful information without redundancy.
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 simple one-parameter inspection tool, the definition is complete: the schema covers the input path, and the description compensates for the absence of an output schema by listing the key returned fields. Nothing essential for selecting or invoking the tool appears to be missing.
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 input schema fully documents the single required parameter, including a description and example path. The tool description itself adds no additional parameter semantics, so the baseline score of 3 is appropriate for high schema coverage.
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 resource ("audio and video files"), and it names ffprobe as the underlying inspection mechanism. This clearly separates it from the sibling tools, which generate, convert, trim, extract, compress, or otherwise transform media rather than probe metadata.
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?
Usage is implied by the word "Inspect" and by the listed metadata outputs, but the description gives no explicit guidance on when to choose this tool over siblings such as extract_audio or generate_waveform. There are also no stated prerequisites or exclusions, so an agent must infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
normalize_audioB
Normalize audio loudness using the broadcast standard EBU R128 (loudnorm). Supports -16 LUFS (podcasts/Reels), -14 LUFS (YouTube), and optional voice clarity enhancement (80Hz high-pass to remove mic rumble). Works on audio or video files.
| Name | Required | Description | Default |
|---|---|---|---|
| inputPath | Yes | Path to the source audio or video file. | |
| outputPath | Yes | Destination path for the normalized media file. | |
| targetLufs | No | Target integrated loudness in LUFS (-16 for podcasts/Reels, -14 for YouTube, -23 for broadcast). Default: -16. | |
| targetPeakDb | No | Maximum allowed true peak level in dBTP. Default: -1.5. | |
| voiceClarity | No | Apply speech enhancement filters (80Hz high-pass to remove mic rumble and gentle compressor for presence). Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the internal filter chain (loudnorm, 80Hz high-pass, compressor), but says nothing about re-encoding, quality impact, whether outputPath is overwritten, or runtime/format constraints. Helpful but incomplete for a file-mutating media operation.
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?
Three front-loaded sentences with the core function first and the differentiating options after. There is minor redundancy in restating the -16/-14 LUFS targets already in the schema, keeping it below 5.
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 5-parameter mutation tool with no annotations and no output schema, the description covers the core behavior but omits return values, overwrite semantics, and any failure conditions. An agent can call it, but not predict consequences fully.
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 coverage is 100%, so every parameter is already documented, and the description mostly repeats the schema's own LUFS examples rather than adding new meaning. No extra syntax, units, or interaction guidance (e.g., how targetPeakDb relates to targetLufs) is provided.
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?
States a specific verb and resource ("Normalize audio loudness") plus the underlying method (EBU R128 loudnorm), which clearly separates it from siblings like media_convert or compress_video. It does not explicitly name a sibling it displaces, so 4 rather than 5.
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 parenthetical target examples ("-16 LUFS (podcasts/Reels)", "-14 LUFS (YouTube)") imply the intended use cases, but the description never states when to pick this tool over compress_video or media_convert, nor any prerequisites. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reformat_aspect_ratioB
Change video aspect ratio to 9:16 vertical, 1:1 square, or 4:5 portrait. Adds blurred video borders, solid padding, or center crops.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Format mode: 'blur_background' adds blurred video borders, 'fit_pad' adds solid color padding, and 'crop_center' zooms and crops the center. Default: 'blur_background'. | blur_background |
| padColor | No | Background color for fit_pad mode, such as 'black', 'white', or hex '0x1e1e2e'. Default: 'black'. | black |
| inputPath | Yes | Path to the source video file. | |
| blurAmount | No | Blur strength (5 to 50) for blur_background mode. Default: 20. | |
| outputPath | Yes | Destination path for the reformatted video. | |
| targetRatio | No | Target aspect ratio: '9:16' for vertical reels, '1:1' for square, '16:9' for horizontal, or '4:5' for portrait. Default: '9:16'. | 9:16 |
| hardwareAcceleration | No | Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explains the visual outcome of each mode, which is genuinely useful, but says nothing about whether the output overwrites existing files, encoding cost/quality loss, or failure behavior for invalid paths.
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?
Two tight sentences, front-loaded with the core action and immediately qualifying it with the supported ratios and modes. No filler.
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 7-parameter mutation tool with no annotations and no output schema, the description covers purpose and mode effects but omits usage selection, overwrite semantics, and any error/return expectations.
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 100%, so every parameter including enums, defaults, and ranges is already documented in the schema. The description's mention of ratios and border types mirrors what the schema provides rather than adding new 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?
States a specific verb and resource ('Change video aspect ratio') and enumerates the supported ratios and border strategies, which clearly separates it from media_convert or create_split_screen. It stops short of naming a sibling as the alternative.
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 on when to pick this over media_convert or concat_media, and no prerequisites such as required input format or that inputPath/outputPath must be supplied. The reader must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trim_mediaA
Cut a segment from a video or audio file. Uses stream copy without re-encoding by default, or re-encodes when accurate cuts are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | No | Optional end timestamp formatted as 'HH:MM:SS' or seconds. Do not combine with duration. | |
| duration | No | Optional duration in seconds from startTime (e.g. '30'). If neither endTime nor duration is set, trims to end of file. | |
| inputPath | Yes | Path to the source media file to cut. | |
| startTime | Yes | Start timestamp formatted as 'HH:MM:SS' (e.g. '00:01:30') or seconds (e.g. '90'). | |
| outputPath | Yes | Destination path for the trimmed output file (e.g. './clip.mp4'). | |
| accurateReencode | No | Re-encode video for cuts between keyframes. Default: false (uses fast stream copy). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a genuinely useful behavioral trait — default stream copy (fast, keyframe-boundary cuts) versus re-encoding for accuracy — which an agent could not infer from the schema alone. But it omits important behaviors for a file-writing tool: whether outputPath is overwritten if it already exists, what happens on invalid timestamps, and whether the original file is left untouched.
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?
Two sentences with zero filler, and the core purpose is front-loaded before the behavioral caveat. Every clause 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?
There is no output schema and no annotations, so the description has to cover more ground than it does. It is adequate for understanding what the tool does, but a mutation tool that writes a new file should say whether the result overwrites, what it returns, and how failures surface.
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 100%, so the schema already explains startTime, endTime, duration, inputPath, outputPath and accurateReencode in detail, including the endTime/duration mutual exclusion. The description adds only a light rationale for accurateReencode, so the baseline of 3 is appropriate.
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?
States a specific verb and resource: 'Cut a segment from a video or audio file.' An agent immediately knows the operation. However, it never distinguishes this from near-neighbors like trim_silence or extract_audio, so the reader must infer scope from the name alone.
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?
Usage is implied by the operation itself, and the stream-copy vs. re-encode note hints at the speed/accuracy tradeoff that drives the accurateReencode choice. But there is no explicit when-to-use guidance, no mention of alternatives such as trim_silence for silence removal, and no prerequisites or limits stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trim_silenceA
Detect and remove silent pauses from audio or video files. Preserves video & audio lip-sync in 'start_end' mode. Returns original duration and seconds saved.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Trim mode: 'start_end' removes silence at the start and end (preserving perfect A/V sync on videos); 'all_pauses' removes silent pauses across audio files. Default: 'start_end'. | start_end |
| inputPath | Yes | Path to the source audio or video file. | |
| outputPath | Yes | Destination path for the trimmed file (e.g. './recordings/cleaned.mp4'). | |
| thresholdDb | No | Volume threshold in decibels, between -60dB and -10dB. Audio quieter than this is treated as silence. Default: -35. | |
| minDurationSeconds | No | Minimum silence duration in seconds to trigger a cut. Default: 0.5. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It helpfully discloses that 'start_end' mode preserves A/V lip-sync and that the tool returns original duration and seconds saved, but it does not state whether the source is left untouched, whether outputPath is overwritten, or what errors may occur.
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 three tight sentences, front-loads the core operation, and adds only relevant behavioral facts about lip-sync and return values. There is no padding or redundant restatement.
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 five-parameter media mutation tool with no output schema, the description covers the purpose, mode-specific lip-sync behavior, and return metrics well. The main remaining gap is overwrite and source-file handling, which keeps it short of fully complete for an unannotated file-writing tool.
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 100%, so all five parameters are already documented in the schema, including enum values, defaults, ranges, and path meanings. The description reinforces 'start_end' mode but adds little parameter-level detail beyond what the schema already provides.
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: detect and remove silent pauses from audio or video files. This clearly distinguishes the tool from generic siblings such as trim_media, and an agent can identify its intended operation without opening the schema.
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 the tool is for cleaning silence and notes lip-sync preservation in 'start_end' mode, but it does not explicitly say when to use this versus generic trimming tools or when not to use it. Usage is inferable but not explicitly routed against alternatives.
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.
11 tool updates
v0.5.0- Added
add_overlay - Added
burn_subtitles - Changed
compress_video1 field changed- changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Use Apple Silicon VideoToolbox encoding when available. Default: true."New value: +"Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true."
- Changed
create_split_screen1 field changed- changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Use Apple Silicon VideoToolbox encoding when available. Default: true."New value: +"Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true."
- Changed
extract_audio1 field changed- changed
Input schema / properties / format / descriptionPrevious value: -"Audio format: 'whisper_wav' (16kHz mono WAV for Whisper), 'mp3', 'aac', 'flac', or 'copy' (extract without re-encoding)."New value: +"Audio format: 'whisper_wav' (16kHz mono WAV for Whisper), 'mp3', 'aac', 'flac', or 'copy' (extract without re-encoding). Default: 'mp3'."
- Added
extract_keyframes - Changed
generate_waveform1 field changed- added
Input schema / properties / includeBase64 / defaultAdded value: +true
- Changed
media_convert1 field changed- changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Use Apple Silicon VideoToolbox encoding when available. Default: true."New value: +"Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true."
- Added
normalize_audio - Changed
reformat_aspect_ratio1 field changed- changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Use Apple Silicon VideoToolbox encoding when available. Default: true."New value: +"Use hardware-accelerated video encoding (VideoToolbox, NVENC, QSV, etc.) when available. Default: true."
- Changed
trim_silence1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Trim mode: 'start_end' removes silence at the start and end; 'all_pauses' removes silent pauses across the file. Default: 'start_end'."New value: +"Trim mode: 'start_end' removes silence at the start and end (preserving perfect A/V sync on videos); 'all_pauses' removes silent pauses across audio files. Default: 'start_end'."
10 tool updates
v0.4.2- Changed
compress_video7 fields changed- changed
Input schema / properties / crf / descriptionPrevious value: -"Custom Constant Rate Factor (18=near lossless, 23=default, 28=small, 35=very small)"New value: +"Quality value between 18 (higher quality) and 45 (smaller file). Overrides preset." - changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Whether to use Apple Silicon VideoToolbox acceleration if available (default: true)"New value: +"Use Apple Silicon VideoToolbox encoding when available. Default: true." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the source video file"New value: +"Path to the source video file (e.g. './recordings/demo.mov')" - changed
Input schema / properties / maxWidth / descriptionPrevious value: -"Optional maximum width to downscale (e.g. 1280 for 720p)"New value: +"Maximum video width in pixels, such as 1280 for 720p. Keeps aspect ratio." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Target path for compressed output file"New value: +"Destination path for the compressed MP4 file (e.g. './recordings/demo_compressed.mp4')" - changed
Input schema / properties / preset / descriptionPrevious value: -"Compression preset if targetSizeMB is not specified"New value: +"Preset when targetSizeMB is not set: 'github_pr', 'discord', 'email', 'balanced', or 'high_quality'. Default: 'balanced'." - changed
Input schema / properties / targetSizeMB / descriptionPrevious value: -"Optional target file size in Megabytes (e.g., 10 for GitHub PRs, 25 for Discord)"New value: +"Target output size in megabytes, such as 9.5 for GitHub or 24 for Discord. Computes bitrates from duration."
- Added
create_split_screen - Changed
extract_audio4 fields changed- changed
Input schema / properties / bitrate / descriptionPrevious value: -"Audio bitrate, e.g. '192k', '320k' (for mp3/aac)"New value: +"Target audio bitrate for MP3 or AAC (e.g. '128k', '192k', '320k')." - changed
Input schema / properties / format / descriptionPrevious value: -"Audio format preset. 'whisper_wav' generates 16kHz mono PCM. 'copy' extracts audio without re-encoding."New value: +"Audio format: 'whisper_wav' (16kHz mono WAV for Whisper), 'mp3', 'aac', 'flac', or 'copy' (extract without re-encoding)." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the input video file"New value: +"Path to the source video or audio file." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination audio file path (e.g. ./audio.mp3, ./audio.wav)"New value: +"Destination path for the output audio file (e.g. './extracted.wav' or './audio.mp3')."
- Changed
extract_thumbnail5 fields changed- changed
Input schema / properties / includeBase64 / descriptionPrevious value: -"Whether to include base64 image data in response for AI vision (default: true)"New value: +"Return base64 image data in response for vision models. Default: true." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the input video file"New value: +"Path to the source video file." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination image file path (e.g. ./thumb.png or ./thumb.jpg)"New value: +"Destination image path ending in .png or .jpg (e.g. './thumb.png')." - changed
Input schema / properties / resolution / descriptionPrevious value: -"Optional scaled resolution, e.g. '1280x720' or '640x360'"New value: +"Optional scaled size formatted as 'WIDTHxHEIGHT', such as '1280x720'. Defaults to source resolution." - changed
Input schema / properties / timestamp / descriptionPrevious value: -"Timestamp to capture, e.g. '00:00:05', '10' (seconds), or 'midpoint' (calculates exact middle of video). Default: '00:00:01'."New value: +"Timestamp to capture, such as '00:00:05', '10', or 'midpoint' for the middle frame. Default: '00:00:01'."
- Changed
generate_waveform7 fields changed- changed
Input schema / properties / color / descriptionPrevious value: -"Waveform color in hex format (e.g. 0x6366f1, 0x10b981, white, red)"New value: +"Waveform color in hex or name (such as '0x6366f1', 'white', or 'black'). Default: '0x6366f1'." - changed
Input schema / properties / height / descriptionPrevious value: -"Waveform image height in pixels"New value: +"Image height in pixels. Default: 280." - changed
Input schema / properties / includeBase64 / descriptionPrevious value: -"Whether to include base64 image data in response for AI vision (default: true)"New value: +"Return base64 image data in the response for vision models. Default: true." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to audio or video file"New value: +"Path to the audio or video file." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Target output image path (typically .png)"New value: +"Destination path for the PNG image." - changed
Input schema / properties / scale / descriptionPrevious value: -"Waveform amplitude scale"New value: +"Amplitude scale: 'lin', 'log', or 'sqrt'. Default: 'lin'." - changed
Input schema / properties / width / descriptionPrevious value: -"Waveform image width in pixels"New value: +"Image width in pixels. Default: 1200."
- Changed
media_convert7 fields changed- changed
Input schema / properties / crf / descriptionPrevious value: -"Constant Rate Factor quality (0-51). Lower is higher quality. Default: 23 for H.264, 30 for VP9."New value: +"Quality factor from 0 to 51. Lower numbers mean higher quality. Default: 23 for MP4, 30 for WebM." - changed
Input schema / properties / fps / descriptionPrevious value: -"Target frame rate, e.g. 30, 60, or 15 (great for GIFs)"New value: +"Target frame rate in frames per second, such as 30, 60, or 15" - changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Use Apple Silicon VideoToolbox hardware acceleration if available (default: true)"New value: +"Use Apple Silicon VideoToolbox encoding when available. Default: true." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the input media file"New value: +"Path to the source media file to convert" - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination file path (e.g. ./output.mp4)"New value: +"Destination path for the converted file (e.g. ./output.mp4, ./output.webm, ./animation.gif)" - changed
Input schema / properties / preset / descriptionPrevious value: -"Encoding preset. 'web_mp4' ensures universal browser playback (H.264/yuv420p/faststart). 'gif' uses 2-pass palette generation."New value: +"Encoding preset: 'web_mp4' for browser playback, 'webm' for WebM video, 'gif' for animated GIF, or 'auto'. Default: 'auto'." - changed
Input schema / properties / resolution / descriptionPrevious value: -"Target resolution, e.g. '1920x1080', '1280x720', '640x360'"New value: +"Target size formatted as 'WIDTHxHEIGHT', such as '1920x1080' or '1280x720'"
- Changed
media_probe1 field changed- changed
Input schema / properties / inputPath / descriptionPrevious value: -"Absolute or relative path to the media file to inspect"New value: +"Path to the media file to inspect (e.g. './video.mp4')"
- Changed
reformat_aspect_ratio7 fields changed- changed
Input schema / properties / blurAmount / descriptionPrevious value: -"Blur intensity (5-50) for 'blur_background' mode. Default: 20"New value: +"Blur strength (5 to 50) for blur_background mode. Default: 20." - changed
Input schema / properties / hardwareAcceleration / descriptionPrevious value: -"Whether to use Apple Silicon VideoToolbox hardware acceleration if available (default: true)"New value: +"Use Apple Silicon VideoToolbox encoding when available. Default: true." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the source video file"New value: +"Path to the source video file." - changed
Input schema / properties / mode / descriptionPrevious value: -"Reformatting mode. 'blur_background' adds an aesthetic blurred background of the video itself. 'fit_pad' adds solid colored padding. 'crop_center' zooms and crops the center."New value: +"Format mode: 'blur_background' adds blurred video borders, 'fit_pad' adds solid color padding, and 'crop_center' zooms and crops the center. Default: 'blur_background'." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination path for the reformatted video"New value: +"Destination path for the reformatted video." - changed
Input schema / properties / padColor / descriptionPrevious value: -"Background color when using 'fit_pad' mode (e.g. 'black', 'white', or hex '0x1e1e2e')"New value: +"Background color for fit_pad mode, such as 'black', 'white', or hex '0x1e1e2e'. Default: 'black'." - changed
Input schema / properties / targetRatio / descriptionPrevious value: -"Target aspect ratio. '9:16' (Reels/Shorts/TikTok), '1:1' (Square), '16:9' (Landscape), '4:5' (Portrait Feed)"New value: +"Target aspect ratio: '9:16' for vertical reels, '1:1' for square, '16:9' for horizontal, or '4:5' for portrait. Default: '9:16'."
- Changed
trim_media6 fields changed- changed
Input schema / properties / accurateReencode / descriptionPrevious value: -"If true, re-encodes video for frame-accurate cuts. If false (default), uses instantaneous lossless stream copy."New value: +"Re-encode video for cuts between keyframes. Default: false (uses fast stream copy)." - changed
Input schema / properties / duration / descriptionPrevious value: -"Duration to cut from startTime, e.g. '30' (seconds)"New value: +"Optional duration in seconds from startTime (e.g. '30'). If neither endTime nor duration is set, trims to end of file." - changed
Input schema / properties / endTime / descriptionPrevious value: -"End time timestamp, e.g. '00:02:15' or '135'"New value: +"Optional end timestamp formatted as 'HH:MM:SS' or seconds. Do not combine with duration." - changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the input media file"New value: +"Path to the source media file to cut." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination file path for the trimmed clip"New value: +"Destination path for the trimmed output file (e.g. './clip.mp4')." - changed
Input schema / properties / startTime / descriptionPrevious value: -"Start time timestamp, e.g. '00:01:30' or '90' (in seconds)"New value: +"Start timestamp formatted as 'HH:MM:SS' (e.g. '00:01:30') or seconds (e.g. '90')."
- Changed
trim_silence5 fields changed- changed
Input schema / properties / inputPath / descriptionPrevious value: -"Path to the source audio or video file"New value: +"Path to the source audio or video file." - changed
Input schema / properties / minDurationSeconds / descriptionPrevious value: -"Minimum silence duration to trigger trimming (in seconds). Default: 0.5s"New value: +"Minimum silence duration in seconds to trigger a cut. Default: 0.5." - changed
Input schema / properties / mode / descriptionPrevious value: -"'start_end' removes dead air at the beginning and end of recording. 'all_pauses' strips silent gaps throughout the entire recording."New value: +"Trim mode: 'start_end' removes silence at the start and end; 'all_pauses' removes silent pauses across the file. Default: 'start_end'." - changed
Input schema / properties / outputPath / descriptionPrevious value: -"Destination path for the trimmed file"New value: +"Destination path for the trimmed file (e.g. './recordings/cleaned.mp4')." - changed
Input schema / properties / thresholdDb / descriptionPrevious value: -"Silence volume threshold in dB (e.g. -35). Audio quieter than this is treated as silence."New value: +"Volume threshold in decibels, between -60dB and -10dB. Audio quieter than this is treated as silence. Default: -35."
6 tool updates
v0.3.0- Changed
compress_video1 field changed- added
Input schema / properties / hardwareAccelerationAdded value: +{ + "description": "Whether to use Apple Silicon VideoToolbox acceleration if available (default: true)", + "type": "boolean" +}
- Changed
extract_thumbnail1 field changed- added
Input schema / properties / includeBase64Added value: +{ + "description": "Whether to include base64 image data in response for AI vision (default: true)", + "type": "boolean" +}
- Changed
generate_waveform1 field changed- added
Input schema / properties / includeBase64Added value: +{ + "description": "Whether to include base64 image data in response for AI vision (default: true)", + "type": "boolean" +}
- Changed
media_convert1 field changed- added
Input schema / properties / hardwareAccelerationAdded value: +{ + "description": "Use Apple Silicon VideoToolbox hardware acceleration if available (default: true)", + "type": "boolean" +}
- Added
reformat_aspect_ratio - Added
trim_silence
10 tool updates
v0.1.0- First observed
add_subtitles - First observed
change_speed - First observed
compress_video - First observed
concat_media - First observed
extract_audio - First observed
extract_thumbnail - First observed
generate_waveform - First observed
media_convert - First observed
media_probe - First observed
trim_media
TDQS
Scored across 17 tools
Each tool maps to a distinct operation: extraction (audio, thumbnail, keyframes), transformation (convert, compress, speed, aspect ratio, split-screen), audio processing (normalize, trim_silence), and assembly (concat, overlay, subtitles). The few potentially confusable pairs—extract_thumbnail vs extract_keyframes, add_subtitles vs burn_subtitles, trim_media vs trim_silence—are explicitly differentiated in their descriptions. An agent should reliably pick the right tool.
Strong snake_case verb_noun convention throughout (extract_audio, compress_video, trim_silence, add_overlay, concat_media). The only deviations are the resource-prefixed names media_convert and media_probe, which put the noun first, but they remain readable and predictable within the pattern.
17 tools is on the high side of the ideal 3-15 band but well justified for a media-manipulation domain with many independent operations. Each tool covers a genuinely distinct capability, so nothing feels padded, though the surface is nearing the point where discoverability could suffer.
The surface covers the core media lifecycle: probe, trim, trim silence, compress, convert, audio extract/normalize, subtitles, overlays, overlays/speed/concat, and vertical-format output. Minor gaps exist for rotation/flip, arbitrary cropping or resolution scaling as a standalone tool, and multi-audio-track mixing, but these are workaroundable.
Maintenance
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
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.
Related MCP Servers
- AlicenseAqualityFmaintenanceA lightweight server that exposes FFmpeg's video processing capabilities to AI assistants through the Model Context Protocol (MCP), supporting operations like video format conversion, audio extraction, and adding watermarks.89 npm25MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes FFmpeg as structured tools for AI-agent-driven video editing, enabling operations like trimming, subtitling, and transcoding via natural language.144 npm1MIT
- AlicenseAqualityBmaintenanceEnables LLMs to perform FFmpeg operations like clipping, merging, extracting audio, adding subtitles, and transcoding videos via a set of tools exposed as an MCP server.58MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes FFmpeg as a structured tool set for AI agents, enabling timeline-based video editing, preview, rendering, and analysis with an optional LLM autopilot.MIT