
Wraps FFmpeg in an MCP interface so Claude can manipulate video and audio files directly. You get six tools: cut_video for trimming segments by timestamp, convert for format changes between mp4/mp3/wav/mov, concat_videos for stitching files together, remove_silence that auto-detects quiet sections above 2 seconds at negative 30dB, image_to_video for static frame conversion, and ffmpeg_raw for passing through arbitrary commands when you need watermarks or rotation. Ships with ffmpeg-static bundled, so no system dependencies. Install globally via npm and point Claude Desktop at it with npx. Useful when you're already working with media files in a conversation and want to skip the manual command line round trip.
A Model Context Protocol (MCP) server that provides video and audio manipulation tools powered by FFmpeg. This server enables AI assistants to perform media operations like cutting videos, converting formats, removing silence, and more.
ffmpeg-static, no system installation required| Tool | Description |
|---|---|
cut_video | Extract a segment from a video using start time and duration |
image_to_video | Convert a static image to a video with fixed duration |
concat_videos | Join multiple videos into one |
convert | Convert between media formats (auto-detects from file extension) |
remove_silence | Detect and remove silent segments from video |
ffmpeg_raw | Run a restricted local FFmpeg command |
npm install -g ffmpeg-mcp-server
git clone https://github.com/PedroMarianoAlmeida/ffmpeg-mcp
cd ffmpeg-mcp
npm install
npm run build
Every input and output must be inside FFMPEG_MCP_WORKSPACE. If it is unset, the server's current working directory is used. The server resolves symlinks before reading and rejects URL schemes, traversal outside the workspace, and symlink outputs. Create output directories before running a tool.
ffmpeg_raw is deliberately restricted. It accepts local -i inputs, one final local output path, and a small set of codec and timing options. It does not accept filters, forced formats, or arbitrary FFmpeg flags because those options can load extra files or use network protocols.
For example, set a dedicated media directory in your MCP configuration:
{
"mcpServers": {
"ffmpeg": {
"command": "npx",
"args": ["ffmpeg-mcp-server"],
"env": {
"FFMPEG_MCP_WORKSPACE": "/absolute/path/to/media-workspace"
}
}
}
}
Add to your claude_desktop_config.json:
{
"mcpServers": {
"ffmpeg": {
"command": "npx",
"args": ["ffmpeg-mcp-server"]
}
}
}
Add to your Claude Code MCP settings:
{
"mcpServers": {
"ffmpeg": {
"command": "npx",
"args": ["ffmpeg-mcp-server"]
}
}
}
"Cut the first 30 seconds from video.mp4"
→ Uses cut_video tool
"Convert video.mov to mp4"
"Extract audio from video.mp4 as mp3"
→ Uses convert tool
"Remove silent parts from my podcast recording"
→ Uses remove_silence tool (detects silence > 2s at -30dB by default)
"Convert input.mp4 to output.mp4 using libx264"
→ Uses ffmpeg_raw with local paths and supported codec options
# Install dependencies
npm install
# Build
npm run build
# Project structure
src/
index.ts # MCP server setup and tool registrations
lib.ts # FFmpeg operations
MIT