Skip to main content
Glama

ffmpeg-mcp

ffmpeg-mcp 🎬⚡

Edit video and audio by just talking to your AI assistant.

ffmpeg-mcp is a Model Context Protocol server that puts the full power of FFmpeg behind a clean set of tools your LLM can call — clip, crop, scale, overlay, concatenate with transitions, extract frames/audio, make GIFs, and more. No command-line flags to memorize.

Python FastMCP FFmpeg PRs Welcome Stars


✨ Why ffmpeg-mcp?

FFmpeg is incredibly powerful and incredibly hard to remember. ffmpeg-mcp hands that power to your AI assistant so you can say what you want in plain English:

"Grab the first 10 seconds of demo.mov, scale it to 1080p, slap my logo in the top-right corner, and turn it into a GIF."

…and the model orchestrates the right tools for you. Each tool is a small, validated Python function — easy to read, reuse, and extend.

  • 🗣️ Natural-language video editing — works in any MCP client (Claude Desktop, Cursor, Cline, …)

  • 🧱 12 focused tools — composable building blocks instead of one giant black box

  • Input validation built in — paths are checked for existence, emptiness, and validity before FFmpeg runs

  • 🧩 Hackable — add a new tool by writing one function and registering it


Related MCP server: ffmpeg-mcp

🛠️ Available Tools

Tool

What it does

Key parameters

get_video_metadata

Probe a file for streams, codecs, duration, etc.

input_video_path

extract_frames

Save frames as images (evenly, by interval, or 1/sec)

input_video_path, number_of_frames?, timestamp_offset?

extract_audio

Pull audio out to a .wav file

input_video_path

scale_video

Upscale to 1080p / 2k / 4k, aspect-preserving

input_video_path, resolution="1080p"

crop_video

Crop to a region

input_video_path, width, height, x_offset, y_offset, safe_crop

clip_video

Cut a sub-clip by start + duration

input_video_path, start_timestamp, duration

make_gif

Turn a segment into an optimized GIF

input_video_path, start_timestamp, duration

overlay_image

Composite an image (logo/watermark) with timing & opacity

input_video_path, overlay_image_path, positioning, opacity, start_time, duration

overlays_video

Overlay a (looping) video onto another

input_video_path, overlay_video_path, positioning, scale

trim_and_concat_operation

Trim multiple clips and stitch them together

inputs: [{path, start_time?, end_time?}], width, height

get_normalized_clips

Normalize clips to a common res/fps/codec (in parallel)

input_video_clips, resolution, frame_rate, crf

concat_clips_with_transition

Concatenate clips with an xfade transition

input_video_clips, transition_type="fade", transition_duration

? marks optional parameters. concat_clips_with_transition supports many transitions — fade, wipeleft, slideup, circlecrop, dissolve, pixelize, radial, and dozens more.


📦 Requirements

  • Python 3.12+

  • FFmpeg installed and on your PATH (provides ffmpeg + ffprobe)

  • uv package manager

Verify FFmpeg is available:

ffmpeg -version

🚀 Quick Start

1. Clone & install

git clone https://github.com/yubraaj11/ffmpeg-mcp.git
cd ffmpeg-mcp
uv sync --frozen

2. Connect it to your MCP client

Point your client at the server using the snippets below. Replace /path/to/ffmpeg-mcp with the absolute path to your clone.

{
  "mcpServers": {
    "ffmpeg-mcp": {
      "command": "uv",
      "args": ["--directory", "/path/to/ffmpeg-mcp/ffmpeg_mcp", "run", "main.py"],
      "env": { "PYTHONPATH": "/path/to/ffmpeg-mcp" }
    }
  }
}
{
  "mcpServers": {
    "ffmpeg-mcp": {
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "command": "uv",
      "args": ["--directory", "/path/to/ffmpeg-mcp/ffmpeg_mcp", "run", "main.py"],
      "env": { "PYTHONPATH": "/path/to/ffmpeg-mcp" },
      "transportType": "stdio"
    }
  }
}

3. Restart your client and start editing

"Extract 5 evenly-spaced frames from intro.mp4."

"Make a 3-second GIF from clip.mov starting at 12s."

"Concatenate a.mp4, b.mp4, and c.mp4 with a 1-second wipeleft transition between them."

Processed files are written under ffmpeg_mcp/processed_elements/.


🧰 Project Layout

ffmpeg_mcp/
├── main.py              # MCP server entry point — registers all tools
├── services/            # one module per tool
├── configs/             # colored logging setup
└── exceptions/          # structured error messages
utils/                   # validation decorators & helpers

Every tool returns either the output file path or a structured JSON error (status, error_type, message, time), so failures are easy for the model to read and recover from.


🤝 Contributing

Contributions are very welcome! Adding a tool is roughly:

  1. Write a function in ffmpeg_mcp/services/your_tool.py.

  2. Export it from ffmpeg_mcp/services/__init__.py.

  3. Register it in main.py with mcp.tool(name_or_fn=your_tool).

Please run the linter before opening a PR:

uv run ruff check .

Found a bug or have an idea? Open an issue — and if this project saves you from another ffmpeg man-page dive, consider leaving a ⭐.


📚 Built With

Available Tools

12 tools
clip_videoA

Generate a video clip from the given video file using ffmpeg-python.

Args: input_video_path (str): Path to the source video file. start_timestamp (float, optional): Start time in seconds. Defaults to 0.0. duration (float, optional): Clip length in seconds. Defaults to 5.0.

Returns: str: Path to the generated clip, or an exception message string on failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
start_timestampNo
durationNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool generates a new file (implied mutation) and can return either a success path or an error message, which is useful context. However, it lacks details on permissions, side effects (e.g., overwriting), rate limits, or output format specifics, leaving behavioral 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a purpose statement followed by Args and Returns sections. Every sentence adds value, though the 'using ffmpeg-python' detail could be considered slightly extraneous if the agent doesn't need implementation specifics. It's appropriately sized and front-loaded with the core functionality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is moderately complete. It covers parameters thoroughly and hints at success/error outcomes, but lacks details on file formats, error conditions, or performance implications. Given the complexity and missing structured data, it should do more to guide safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate. It comprehensively documents all 3 parameters: their names, types, purposes, defaults, and optionality. The semantics (e.g., 'seconds' for timestamps, 'Path to the source video file') add clear meaning beyond the bare schema, fully addressing the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Generate a video clip') using a specific technology ('using ffmpeg-python'), and distinguishes it from siblings by focusing on basic clipping rather than concatenation, cropping, extraction, or other transformations. The verb+resource combination is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives like 'trim_and_concat_operation' or 'crop_video'. It doesn't mention prerequisites (e.g., file existence, format compatibility) or exclusions. Usage context is implied only through parameter descriptions, not explicit recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

concat_clips_with_transitionA

Concatenate multiple video clips with transitions.

Args: input_video_clips (List[str]): A list of file paths (strings) to the video clips that will be concatenated. transition_type (str, optional): The type of transition to apply between clips. Supported transitions include: - fade (default), fadeblack, fadewhite, distance - wipeleft, wiperight, wipeup, wipedown - slideleft, slideright, slideup, slidedown - smoothleft, smoothright, smoothup, smoothdown - circlecrop, rectcrop, circleclose, circleopen - horzclose, horzopen, vertclose, vertopen - diagbl, diagbr, diagtl, diagtr - hlslice, hrslice, vuslice, vdslice - dissolve, pixelize, radial, hblur - wipetl, wipetr, wipebl, wipebr - zoomin, fadegrays, squeezev, squeezeh - hlwind, hrwind, vuwind, vdwind - coverleft, coverright, coverup, coverdown transition_duration (float, optional): Duration of the transition effect in seconds.

Returns: str: The absolute path to the final concatenated video with transitions applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_clipsYes
transition_typeNofade
transition_durationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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 implies a write operation ('Concatenate') and specifies the output (a file path), but lacks details on error handling, performance limits, or side effects like file overwriting. It adds some value but leaves gaps in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns) and front-loaded purpose. It efficiently lists transition types without unnecessary elaboration. However, the extensive enum list for 'transition_type' could be slightly verbose, though it serves a practical purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no annotations, output schema provided), the description is mostly complete. It covers parameter details and return value, but lacks usage guidelines and some behavioral aspects like error handling. The output schema reduces the need to explain returns, but gaps in guidelines and transparency prevent a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 fully. It provides detailed semantics for all parameters: 'input_video_clips' is explained as a list of file paths, 'transition_type' includes a comprehensive list of supported values with a default, and 'transition_duration' specifies units (seconds) and default. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Concatenate multiple video clips with transitions'), identifies the resource (video clips), and distinguishes it from sibling tools like 'trim_and_concat_operation' by emphasizing the transition feature. It goes beyond a tautology by specifying the core functionality with precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives like 'trim_and_concat_operation' or other video processing siblings. It lacks context about prerequisites, such as file format compatibility or performance considerations, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crop_videoB

Crop a video using ffmpeg-python.

Params: input_video_path: Path to input video (required) safe_crop: If True, allows exact cropping (ignores mod-2 restrictions). Default: False height: Output height (default: 480) width: Output width (default: 640) x_offset: Top-left X coordinate of crop (default: 0) y_offset: Top-left Y coordinate of crop (default: 0)

Returns: str: Path to the cropped video.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
safe_cropNo
heightNo
widthNo
x_offsetNo
y_offsetNo

TDQS

B3.3/5.0
Behavior3/5

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 mentions the tool 'crops a video' (implying mutation) and returns a path, but lacks details on permissions, side effects (e.g., file overwriting), error handling, or performance considerations like processing time or resource usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for 'Params' and 'Returns', making it easy to parse. It's appropriately sized, with each sentence adding value, though the 'Returns' section could be slightly more detailed given the lack of output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no annotations, and no output schema, the description does a decent job covering parameter semantics but lacks behavioral context (e.g., how cropping interacts with video properties). It's adequate for basic use but leaves gaps in error handling and integration with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 provides clear semantics for all 6 parameters, explaining their purposes, defaults, and requirements (e.g., 'input_video_path' as required, 'safe_crop' as a boolean with a helpful note). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('crop') and resource ('video'), and mentions the implementation technology ('using ffmpeg-python'). However, it doesn't explicitly differentiate from sibling tools like 'clip_video' or 'scale_video', which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like 'clip_video' or 'scale_video'. The description lacks context about typical use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_audioB

Function to extract audio from the given input video.

Params: input_video_path (str): Path to the input video.

Returns: audio_file_path (str): Path to the audio file.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes

TDQS

B3.1/5.0
Behavior2/5

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 states the function but lacks details on traits like whether it overwrites existing audio files, requires specific permissions, handles errors, or has performance constraints (e.g., large video processing). This is inadequate for a mutation 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, with the core purpose stated first, followed by param and return details in a structured format. Every sentence adds value, though the 'Params:' and 'Returns:' labels could be integrated more seamlessly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (audio extraction from video), no annotations, and no output schema, the description is minimally adequate. It covers the basic operation and parameters but lacks details on output behavior (e.g., audio format, location) and error handling, which are important for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics beyond the input schema, which has 0% description coverage. It explains that 'input_video_path' is a 'Path to the input video,' clarifying the parameter's purpose. With only one parameter, this compensates well for the schema gap, though it could specify format expectations (e.g., file extensions).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'extract audio from the given input video,' which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'extract_frames' or 'get_video_metadata' that also process videos but for different outputs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives. It doesn't mention prerequisites (e.g., video format compatibility), exclusions, or comparisons to siblings like 'extract_frames' for visual extraction, 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.

extract_framesA

Extract frames from a video file and save each frame with a unique UUID filename.

Behavior: - If number_of_frames is provided, extracts that many frames evenly across the video. If requested frames exceed total frames available, caps at total frames. - If timestamp_offset is provided (and number_of_frames is None), extracts frames at every given second interval. - If neither is provided, defaults to extracting one frame per second. - number_of_frames takes priority if both are provided.

Params: input_video_path (str): Path to the input video file. number_of_frames (Optional[int]): Total number of frames to extract evenly across the video. timestamp_offset (Optional[int]): Time interval in seconds between frames.

Returns: List[str]: List of file paths for the extracted frames with UUID-based filenames.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
number_of_framesNo
timestamp_offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so effectively by detailing behavioral traits: it explains how parameters interact (priority of number_of_frames, caps on exceeding total frames), default behavior, and the output format (list of file paths with UUID filenames). This covers key aspects like mutation (extraction and saving) and response structure, though it lacks details on error handling or performance limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Behavior, Params, Returns), making it easy to scan. Every sentence adds value, such as explaining parameter priorities and defaults, though it could be slightly more concise by integrating some details into fewer sentences without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (3 parameters, no annotations, but with an output schema), the description is largely complete. It explains input behaviors, interactions, and output format thoroughly. The output schema covers return values, so the description appropriately focuses on usage and semantics. Minor gaps include lack of error handling or prerequisites, but it suffices for effective tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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, and it does so comprehensively. It adds meaning beyond the schema by explaining the purpose of each parameter (e.g., 'number_of_frames' extracts evenly across video, 'timestamp_offset' sets interval in seconds), their interactions, and default behaviors, which are not captured in the schema's basic types and titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb ('extract frames') and resource ('from a video file'), distinguishing it from siblings like 'extract_audio' or 'clip_video'. It explicitly mentions saving frames with UUID filenames, which differentiates it from tools that might modify or analyze video content without extraction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through behavioral rules (e.g., defaults to one frame per second if no parameters provided), but it does not explicitly state when to use this tool versus alternatives like 'get_video_metadata' for information or 'clip_video' for segmenting. No exclusions or specific contexts are provided, leaving usage somewhat open-ended.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_normalized_clipsA

Normalize multiple video clips in parallel by adjusting resolution, frame rate, codec, and compression parameters.

Parameters: input_video_clips (list[str]): should give input video clips in the form of string resolution (tuple, optional): Target resolution as (width, height). Defaults to (1280, 720). frame_rate (int, optional): Target frame rate. Defaults to 30. crf (int, optional): Constant Rate Factor for quality control (lower = better quality). Defaults to 23. audio_bitrate (str, optional): Target audio bitrate. Defaults to '128k'. preset (str, optional): Encoding speed vs. compression efficiency preset. Defaults to 'fast'. max_workers (int, optional): Number of parallel worker threads. If None, uses os.cpu_count().

Returns: list: Sorted list of file paths to the successfully normalized video clips.

Notes: - Runs normalization tasks in parallel using ThreadPoolExecutor. - Includes a progress bar (tqdm) to track processing status. - Automatically determines the number of workers based on CPU cores if not specified. - Skips clips that encounter errors but continues processing the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_clipsYes
resolutionNo
frame_rateNo
crfNo
audio_bitrateNo128k
presetNofast

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well by disclosing key behavioral traits: it runs tasks in parallel using ThreadPoolExecutor, includes a progress bar, automatically determines workers based on CPU cores, and skips clips with errors while continuing processing. This covers execution method, user feedback, resource management, and error handling without contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose, followed by structured sections for parameters, returns, and notes. Every sentence adds value, such as explaining defaults and behavioral notes, but it could be slightly more concise by integrating some parameter details into the initial summary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a 6-parameter tool with no annotations or output schema, the description is largely complete: it explains the tool's purpose, all parameters, return values (sorted list of file paths), and key behaviors like parallel processing and error handling. However, it lacks details on output formats or error messages, which could enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate, and it does by explaining all parameters beyond the schema. It adds meaning for each optional parameter (e.g., resolution as tuple, crf for quality control, preset for encoding speed vs. efficiency, max_workers for parallel threads), though it could provide more detail on valid ranges or formats for some parameters like 'preset'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('normalize multiple video clips in parallel') and resources ('video clips'), distinguishing it from siblings like 'scale_video' or 'crop_video' by focusing on comprehensive normalization across resolution, frame rate, codec, and compression parameters rather than single transformations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for batch normalization of video clips but does not explicitly state when to use this tool versus alternatives like 'scale_video' for resolution changes only or 'clip_video' for trimming. It mentions parallel processing and error handling, which provides some context, but lacks direct comparison or exclusion criteria for sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_video_metadataC

Function to extract metadata of the given input video.

Params: input_video_path (str): Path to the input video.

Returns: JSON of the video metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes

TDQS

C2.9/5.0
Behavior2/5

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 tool 'extracts metadata' and returns JSON, but lacks details on what metadata is included (e.g., duration, resolution, codec), whether it's read-only (implied but not stated), error handling for invalid paths, or performance considerations. For a tool with no annotations, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose. The structure with 'Params:' and 'Returns:' sections is clear, though slightly verbose. Every sentence earns its place by defining purpose, parameter, and return value, with no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (a metadata extraction tool with no annotations, 0% schema coverage, and no output schema), the description is incomplete. It doesn't explain what metadata is extracted, error conditions, or output format details beyond 'JSON.' For a tool with such sparse structured data, more context is needed to be fully helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds minimal meaning beyond the input schema. It specifies that input_video_path is a 'Path to the input video,' which slightly clarifies the schema's 'Input Video Path' title. However, with 0% schema description coverage, the description doesn't compensate by explaining path format (e.g., local file, URL), supported video types, or constraints. The baseline is 3 due to schema coverage being low but the description adding some value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as 'extract metadata of the given input video' with a specific verb ('extract') and resource ('video metadata'). It distinguishes from siblings like clip_video or extract_frames by focusing on metadata extraction rather than video manipulation or content extraction. However, it doesn't explicitly contrast with all siblings (e.g., get_normalized_clips might also involve metadata).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives. It doesn't mention when this tool is appropriate (e.g., for analyzing video properties) or when to choose other tools (e.g., use extract_frames for frame data, extract_audio for audio extraction). The context is implied but not stated explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

make_gifB

Make gif using video path provided by user.

Args: input_video_path (str): Path to the source video file. start_timestamp (float, optional): Start time in seconds. Defaults to 0.0. duration (float, optional): Clip length in seconds. Defaults to 4.0.

Returns: str: Path to the generated clip, or an exception message string on failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
start_timestampNo
durationNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions that the tool returns 'Path to the generated clip, or an exception message string on failure,' which adds some behavioral context about error handling. However, it doesn't disclose important traits like whether the operation is destructive to source files, what formats are supported, performance characteristics, or authentication needs. The description provides basic output information but misses critical behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It begins with a clear purpose statement, then provides organized parameter documentation in an Args section, followed by return value information. Every sentence earns its place, with no redundant or unnecessary content. The formatting with clear sections enhances readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no annotations, no output schema), the description provides basic but incomplete context. It covers purpose, parameters, and return values adequately, but misses important contextual information like file format requirements, performance expectations, error conditions beyond exceptions, and differentiation from sibling tools. For a tool that creates files from video input, more completeness would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the lack of parameter documentation in the schema. The Args section provides clear semantic meaning for all three parameters: 'input_video_path (str): Path to the source video file,' 'start_timestamp (float, optional): Start time in seconds. Defaults to 0.0,' and 'duration (float, optional): Clip length in seconds. Defaults to 4.0.' This adds substantial value beyond the bare schema, though it doesn't explain parameter constraints or valid formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Make gif using video path provided by user.' It specifies the verb ('Make gif') and resource ('video path'), but doesn't explicitly differentiate from sibling tools like 'extract_frames' or 'clip_video' which might have overlapping functionality. The purpose is clear but sibling differentiation is minimal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives. With siblings like 'clip_video', 'extract_frames', and 'get_normalized_clips' available, there's no indication of when GIF creation is preferred over other video processing operations. Usage context is implied at best.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

overlay_imageA

Overlay an image on top of a video with timing control.

Args: input_video_path (str): Path to background video. overlay_image_path (str): Path to image file. output_filename (str): Output video filename (saved inside VIDEO_OVERLAY_PATH). positioning (Literal): Where to place overlay. scale (tuple | None): (width, height) to resize image before placing. keep_audio (bool): Whether to keep background audio. opacity (float | None): Transparency level (0–1). None = no alpha applied. start_time (float): When to start showing overlay (seconds). duration (float | None): How long to show overlay (seconds). None = until end of video.

Returns: str: Path to generated video.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
overlay_image_pathYes
output_filenameNooutput.mp4
positioningNotop_right
scaleNo
keep_audioNo
opacityNo
start_timeNo
durationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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 mentions that output is saved inside VIDEO_OVERLAY_PATH, which is useful context. However, it doesn't disclose critical behavioral traits like file format requirements, error handling, performance characteristics, or whether the operation is destructive to the original video. The description is minimal beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose statement followed by an Args section and Returns. It's appropriately sized for a complex tool with many parameters. Some sentences could be more front-loaded, but overall, it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, no annotations, but with output schema), the description is fairly complete. It explains all parameters in detail and mentions the return value. However, it lacks behavioral context (e.g., side effects, error cases) and usage guidelines, which are gaps for a mutation tool with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 fully. It provides detailed semantic explanations for all 9 parameters, including defaults, value ranges (e.g., opacity 0–1), and special cases (e.g., None values). This adds significant meaning beyond the bare schema, making parameters clear and actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('overlay an image on top of a video') and distinguishes it from siblings like 'overlays_video' (which likely overlays videos) and 'crop_video', 'scale_video', etc. It specifies the resource (video) and the action (overlay image) with timing control.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 alternatives like 'overlays_video' or other video manipulation tools. It lacks context about prerequisites (e.g., file formats supported) or exclusions (e.g., when not to use it). The usage is implied only by the tool name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

overlays_videoA

Overlay a video on top of another with simple positioning. Loops the overlay video until the background video ends, trimming any extra frames.

Args: input_video_path (str): Path to background video. overlay_video_path (str): Path to overlay video. output_filename (str): Name of the output video file (saved inside VIDEO_OVERLAY_PATH). positioning (Literal): Where to place overlay. scale (tuple): (width, height) to resize overlay video before placing. keep_audio (bool): Whether to keep background audio.

Returns: str: Path to the generated video.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
overlay_video_pathYes
output_filenameNooutput.mp4
positioningNobottom_right
scaleNo
keep_audioNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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 describes key behaviors like looping the overlay video until the background ends and trimming extra frames, which are valuable beyond basic function. However, it lacks details on permissions, error handling, or performance aspects (e.g., processing time, file size limits).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded with the core functionality, followed by organized parameter and return sections. Every sentence earns its place by explaining behavior, parameters, or outputs without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, video processing) and no annotations, the description is mostly complete: it explains the operation, all parameters, and the return value. With an output schema present, it need not detail return values further. A slight gap exists in not covering edge cases or prerequisites (e.g., supported video formats).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 provides a clear Args section explaining all 6 parameters with meaningful semantics (e.g., 'Path to background video', 'Where to place overlay'), adding value beyond the schema's minimal titles. However, it could enhance details like scale units or positioning specifics beyond the enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('overlay a video on top of another') and resources ('video'), distinguishing it from siblings like 'overlay_image' (which handles images) and 'clip_video' (which trims videos). It explicitly mentions the looping behavior and trimming of extra frames, providing unique functional details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for video overlays with positioning and scaling, but does not explicitly state when to use this tool versus alternatives like 'overlay_image' (for images) or 'concat_clips_with_transition' (for concatenation). It provides clear context for video compositing tasks but lacks explicit exclusions or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scale_videoA

Upscales a video to 1080p, 2K, or 4K using FFmpeg while preserving aspect ratio and color accuracy.

Args: input_video_path (str): Path to the input video file. resolution (str, optional): Target resolution for upscaling. Acceptable values are '1080p', '2k', or '4k'. Defaults to '1080p'.

Returns: str: Path to the upscaled video if successful.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_video_pathYes
resolutionNo1080p

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: the tool uses FFmpeg, preserves aspect ratio and color accuracy, and returns a file path. However, it misses details like error handling, performance implications (e.g., processing time), or system requirements, which are important for a video processing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence clearly states the purpose, followed by structured sections for Args and Returns. Every sentence adds value without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (video processing), no annotations, and an output schema present (which covers return values), the description is mostly complete. It explains the action, parameters, and return, but could improve by addressing potential errors or prerequisites (e.g., FFmpeg installation).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds significant meaning beyond the schema: it explains that 'input_video_path' is for the input file, 'resolution' is the target with acceptable values ('1080p', '2k', '4k') and a default. This covers both parameters well, though it could note path format or file type constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb ('Upscales') and resource ('a video'), including the target resolutions and technical details (using FFmpeg, preserving aspect ratio and color accuracy). It distinguishes itself from siblings like 'crop_video' or 'trim_and_concat_operation' by focusing on resolution enhancement rather than editing or extraction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for upscaling videos to higher resolutions, but does not explicitly state when to use this tool versus alternatives like 'get_video_metadata' for checking current resolution or other editing tools. It provides context on what the tool does but lacks explicit guidance on scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trim_and_concat_operationA

Trim and concatenate multiple videos (portrait orientation, normalize format).

Args: inputs (list[dict]): Each dict must have: - 'path' (str): path to the video file - 'start_time' (str, optional): start time in seconds - 'end_time' (str, optional): end time in seconds width (int): Width to scale each video (portrait). height (int): Height to scale each video (portrait). x (int): X position for overlay (default 0). y (int): Y position for overlay (default 0).

Returns: str: Path to the output video if successful. None: If an error occurs.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputsYes
widthNo
heightNo
xNo
yNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it outputs a video file path on success or None on error, and mentions normalization and portrait orientation constraints. However, it lacks details on permissions, rate limits, file format specifics, or what constitutes an error. The description adds value but doesn't fully compensate for the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and well-structured with clear sections for Args and Returns. Every sentence adds value: the first states the purpose, the Args section details parameters, and Returns explains outcomes. It could be slightly more concise by integrating the portrait orientation note into the purpose statement, but overall it's efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters with 0% schema coverage and no annotations, the description does a good job explaining inputs, outputs, and constraints. The output schema is present (Returns section), so return values are covered. It addresses the core functionality but could improve by mentioning error conditions or format normalization details to reach full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 provides detailed semantics for all 5 parameters: 'inputs' structure with path and optional time ranges, 'width' and 'height' for scaling, and 'x' and 'y' for overlay positioning. Default values are mentioned for x and y. This adds substantial meaning beyond the bare schema, though it doesn't cover all possible edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Trim and concatenate multiple videos' with additional constraints 'portrait orientation, normalize format'. This distinguishes it from siblings like 'concat_clips_with_transition' (which adds transitions) and 'clip_video' (which only trims single videos). The verb+resource+scope combination is precise and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for portrait-oriented video concatenation with trimming, but provides no explicit guidance on when to choose this tool over alternatives like 'concat_clips_with_transition' or 'get_normalized_clips'. It mentions 'portrait orientation' as a constraint, which helps narrow the context, but lacks clear exclusions or comparison to sibling tools.

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. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedclip_video
    • First observedconcat_clips_with_transition
    • First observedcrop_video
    • First observedextract_audio
    • First observedextract_frames
    • First observedget_normalized_clips
    • First observedget_video_metadata
    • First observedmake_gif
    • First observedoverlay_image
    • First observedoverlays_video
    • First observedscale_video
    • First observedtrim_and_concat_operation

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have distinct purposes like clipping, cropping, extracting, and overlaying, but some overlap exists: 'clip_video' and 'trim_and_concat_operation' both involve trimming video segments, which could cause confusion. However, their descriptions clarify that 'clip_video' is for single clips while 'trim_and_concat_operation' handles multiple videos with concatenation, mitigating ambiguity.

Naming Consistency3/5

The naming is mixed with no clear pattern: some tools use verb_noun (e.g., 'clip_video', 'crop_video'), others use noun_verb (e.g., 'get_video_metadata'), and there are inconsistencies like 'overlay_image' vs. 'overlays_video'. While readable, the lack of a consistent convention across all tools reduces predictability.

Tool Count5/5

With 12 tools, the count is well-scoped for a video processing server, covering essential operations like editing, conversion, and metadata extraction. Each tool serves a specific function without redundancy, making the set comprehensive yet manageable for typical video manipulation tasks.

Completeness4/5

The toolset covers core video processing needs including clipping, cropping, scaling, overlaying, and format conversion, with good lifecycle coverage. Minor gaps exist, such as no direct tool for adding subtitles or advanced audio editing beyond extraction, but agents can likely work around these with the provided tools.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yubraaj11/ffmpeg-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server