kdenlive
Provides scripted video editing with Kdenlive, allowing creation of Kdenlive project files, assembly of stringout timelines from footage, verification of rendered frames against sources, audio checks, and safe rendering of projects.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kdenlivebuild a stringout from the footage in raw-videos and verify it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kdenlive-editing-mcp
Scripted video editing with Kdenlive 26.08.1 / MLT 7.41.0, driven from
Python, with an MCP server on top. Built because a .kdenlive file is an
undocumented internal serialisation and the toolchain around it fails silently —
wrong frame rate, missing audio, clips in the wrong place — rather than with an
error.
Pointed at a folder of footage, it writes a project you can open and start cutting, then proves the result is right by rendering frames back out of the finished timeline and comparing them against the source.
Verified against Kdenlive 26.08.1, MLT 7.41.0, document version 1.1. The project format is not a public API and changes between releases; treat that as a version pin.
Layout
path | what |
| runs melt on a project with the silent traps guarded, and real exit codes |
| starts the MCP server on stdio |
| probe media, transcode to CFR, build the project XML |
| render frames back out of a timeline and compare them to their sources |
| the MCP tools |
| worked example: N seconds of every clip in a folder, on one timeline |
| the verified format notes and the traps, with measurements |
Related MCP server: mcp-kdenlive
Usage
scripts/stringout.py raw-videos/ -s 1.5 -o assembly.kdenlive
scripts/stringout.py raw-videos/ --transcode proxies/ --verifyA stringout is every take in order, trimmed to a glance — a starting point to cut against rather than a finished edit. Clips land on V1 with their audio on A1, grouped so they move together; the bin keeps every clip at full length, so any slice can be pulled longer by hand afterwards.
From Python:
from kdenlivelib import Profile, Project
from verify import verify_project
p = Project(Profile.hd1080p60())
for clip in clips:
p.append(clip, seconds=1.5)
p.save("assembly.kdenlive")
for r in verify_project("assembly.kdenlive"):
print(r.name, r.verdict) # match / MISMATCHMCP server
bin/kdenlive-mcp speaks stdio. Point a client at it:
{"mcpServers": {"kdenlive": {"command": "/path/to/kdenlive-editing-mcp/bin/kdenlive-mcp"}}}tool | what |
| duration, geometry, frame rate, rotation, audio, VFR |
| inventory a folder, flagging VFR clips and byte-identical duplicates |
| constant-frame-rate proxy, rotation preserved |
| assemble a timeline from files or folders |
| render each clip's midpoint back out and compare to source |
| measure the timeline's audio level over a window |
| render to a video file, frame rate handled safely |
The tools are coarse on purpose. The useful unit of work is a whole project
file; an agent placing clips one call at a time would get the frame arithmetic
wrong in exactly the ways CLAUDE.md describes, and nothing would report it.
Why the wrapper
Passing
width=/height=to an MLT consumer silently resets the output frame rate to 25. The render succeeds with the right number of frames, stamped at the wrong rate, so the file reports the wrong duration and plays at the wrong speed.Kdenlive is a Flatpak, and a Flatpak has its own private
/tmp. Give melt an output path there and it writes nothing and exits 0.A failing render still needs to look like a failure to the shell.
CLAUDE.md has the rest — memory that scales with clip count rather than
timeline length, why a near-lossless proxy is slower to edit with than the phone
original, and why the obvious VFR test misses real VFR footage. Each item was
measured, not assumed.
Requirements
Kdenlive 26.08.1 as a Flatpak (org.kde.kdenlive, which supplies melt) or a
host MLT, plus ffmpeg/ffprobe and Python 3.10+. The MCP server needs mcp
(pip install -e .). Use absolute paths: the sandbox's working directory is not
yours.
Note on metadata
Phone video carries creation timestamps and frequently GPS coordinates, and
to_cfr() does not strip them — an edit proxy is meant to match its source.
Projects also embed absolute paths into your home directory. .gitignore keeps
media and .kdenlive files out of the repo for that reason; strip metadata
before publishing renders.
This server cannot be deployed
Maintenance
Related MCP Connectors
A real timeline video editor for AI agents: journaled edits, FFmpeg/MLT rendering, exports
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI models to perform complex video editing tasks on Kdenlive projects through 36 tools for project management, timeline editing, effects, transitions, and export.733MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to control a running Kdenlive video editor instance via D-Bus for tasks like importing media, building timelines, adding transitions, markers, effects, and rendering.29-
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to perform professional video editing in Kdenlive through natural-language instructions, using a typed timeline model and real Kdenlive XML adapter.-
- AlicenseNot gradedqualityAmaintenanceEnables agents to create, inspect and edit Kdenlive project files, import and relink media, query installed MLT effects/transitions, author subtitles, and run asynchronous MLT renders, plus drive the live Kdenlive editor UI. Edits always write new files, and rendering is job-based with verification of the output.1MIT