kdenlive-mcp
# kdenlive-mcp
<!-- mcp-name: io.github.mhbxyz/kdenlive-mcp -->
Local-first, client-agnostic [MCP](https://modelcontextprotocol.io) server for
[Kdenlive](https://kdenlive.org) on Linux.
> **Status: early development.** Available tools: environment diagnostics, read-only
> project/timeline/media inspection and local rendering ([docs/tools.md](docs/tools.md)).
> Editing is tracked in the [roadmap](https://github.com/mhbxyz/kdenlive-mcp/issues/1).
The server talks MCP over **stdio** only. It never opens a network listener. Protocol
messages go to stdout and diagnostics go to stderr.
## Requirements
- Linux
- Python 3.11 or newer
- Kdenlive, MLT (`melt`) and FFmpeg (`ffprobe`), installed separately from your distribution.
The Python package does not install them.
## Install
The PyPI distribution is **`mcp-kdenlive`** (not yet published). The PyPI name `kdenlive-mcp` belongs
to an unrelated project, so `pipx install kdenlive-mcp` installs something else. Once released:
```sh
pipx install mcp-kdenlive
```
See [docs/packaging.md](docs/packaging.md) for virtual environments, upgrades and artifact checks.
### From source
```sh
git clone https://github.com/mhbxyz/kdenlive-mcp.git
cd kdenlive-mcp
uv sync # or: python -m venv .venv && .venv/bin/pip install -e .
uv run kdenlive-mcp --version
```
## Check your environment
```sh
uv run kdenlive-mcp diagnose # human-readable, exit status 1 if something required is missing
uv run kdenlive-mcp diagnose --json # machine-readable
```
The same report is available to MCP clients through the `diagnose_environment` tool.
Programs are looked up on `PATH`. Override their location with these environment variables:
| Variable | Program |
|---|---|
| `KDENLIVE_MCP_KDENLIVE` | `kdenlive` (for example an AppImage path) |
| `KDENLIVE_MCP_MELT` | `melt` |
| `KDENLIVE_MCP_FFPROBE` | `ffprobe` |
| `KDENLIVE_MCP_FFMPEG` | `ffmpeg` (optional) |
| `KDENLIVE_MCP_PROBE_TIMEOUT` | Seconds allowed for each version probe (default 10) |
Flatpak and Snap builds of Kdenlive do not expose `kdenlive`, `melt` or `ffprobe` on `PATH`.
Point the variables above to executables or wrapper scripts.
## Start the server
```sh
uv run --directory /path/to/kdenlive-mcp kdenlive-mcp # same as: kdenlive-mcp serve
```
Tested clients (Claude Code, Codex CLI, OpenCode, Grok Build CLI) and copyable
configurations are listed in [docs/clients.md](docs/clients.md). A typical configuration:
```json
{
"mcpServers": {
"kdenlive": {
"command": "uv",
"args": ["run", "--directory", "/path/to/kdenlive-mcp", "kdenlive-mcp"],
"env": { "KDENLIVE_MCP_KDENLIVE": "/usr/bin/kdenlive" }
}
}
}
```
MCP clients often start servers with a reduced environment. If tools are reported missing
from a client but not from your shell, pass `PATH` or the `KDENLIVE_MCP_*` variables
explicitly.
To try the server with the official MCP Inspector:
```sh
npx @modelcontextprotocol/inspector --cli uv run --directory "$PWD" kdenlive-mcp --method tools/list
```
## Development
```sh
uv sync
uv run pytest # unit + protocol tests; integration tests skip when tools are missing
```
Architecture: domain modules (`environment.py`, `process.py`) do not depend on MCP.
`server.py` is the only MCP transport layer.
Research notes: [docs/research/integration-surfaces.md](docs/research/integration-surfaces.md).
TDQS
Scored across 7 tools
Most tools have clearly distinct roles: environment diagnosis, project summary, timeline detail, media listing, single-file probing, preset listing, and rendering. There is some potential overlap between inspect_project and get_timeline, and between list_project_media and probe_media, but the descriptions clarify the boundaries well.
All tool names use a consistent snake_case verb_noun pattern: diagnose_environment, inspect_project, get_timeline, list_project_media, probe_media, list_render_presets, render_project. The convention is predictable throughout.
Seven tools is well-scoped for a Kdenlive inspection and rendering server. Each tool covers a distinct part of the workflow without obvious redundancy.
The set covers environment diagnosis, project inspection, timeline details, media validation, render presets, and rendering with output validation. It is complete for a read-only inspection/rendering workflow, though it does not support editing or modifying projects.