Skip to main content
Glama

subtitle-machine-kdenlive

An app/MCP that allows for programmatic use of Kdenlive by MCP to add subtitles to videos.

Development setup

The project targets Python 3.11+ and uses uv to manage its local virtual environment and locked dependencies. Development currently pins Python 3.12.

uv sync
uv run video-mcp --version
uv run pytest

Linting and formatting use ruff:

uv run ruff check src tests scripts
uv run ruff format src tests scripts

CI runs the linter, format check, and locked test suite on both Ubuntu and both Ubuntu and Windows for pull requests and pushes to main. The local smoke test remains opt-in because hosted runners do not provide the native FFmpeg, Whisper.cpp, Kdenlive, or model installation used by the full local workflow.

Before creating a version tag, follow the release checklist to repeat the locked checks and validate the documented workflow on a clean Windows machine.

Copy video-mcp.example.yaml to the machine-local video-mcp.yaml when you want to customize executable, model, or output paths. The local file is ignored by Git. Environment variables such as VIDEO_MCP_FFMPEG, VIDEO_MCP_WHISPER_CPP, VIDEO_MCP_PARAKEET, VIDEO_MCP_ASR_MODEL, VIDEO_MCP_ASR_DEVICE, VIDEO_MCP_LLM_ENABLED, VIDEO_MCP_LLM_MODEL, and VIDEO_MCP_WORKSPACE override YAML values.

Print the effective configuration with:

uv run video-mcp --config video-mcp.example.yaml config

Run the local environment diagnostic with:

uv run video-mcp --config video-mcp.example.yaml doctor
uv run video-mcp --config video-mcp.example.yaml doctor --json

Inspect a source video and extract the normalized ASR audio with:

uv run video-mcp --config video-mcp.example.yaml inspect "C:\Videos\Test Video.mp4"
uv run video-mcp --config video-mcp.example.yaml extract-audio "C:\Videos\Test Video.mp4"

The inspection output is normalized application data from FFprobe. Audio extraction creates a mono, 16 kHz, 16-bit PCM WAV in the configured workspace; existing output is preserved unless --overwrite is supplied.

Transcribe a normalized audio file with the configured ASR backend:

uv run video-mcp --config video-mcp.example.yaml transcribe "work\Test Video.wav" --device cpu

This writes a versioned *.transcript.raw.json file containing segment and token timestamps. The source audio is never modified. Whisper.cpp remains the default backend; Parakeet is an optional experimental backend selected with asr.backend: parakeet and a configured Q8 model path.

Select Whisper execution with --device cpu, --device cuda, or --device auto. CPU adds Whisper.cpp's --no-gpu flag; CUDA selects GPU device 0; and auto tries the default GPU path before retrying on CPU when the native command fails. video-mcp doctor reports NVIDIA hardware and the Whisper CUDA backend separately, because a GPU driver alone does not mean the installed Whisper binary includes CUDA support.

On Windows, install the official CUDA-enabled Whisper bundle with the repository script. It downloads the v1.8.5 x64 cuBLAS 12.4 archive, verifies its SHA-256, and installs it side-by-side with any CPU build:

powershell -ExecutionPolicy Bypass -File scripts\install_whisper_cuda.ps1

The example configuration points to C:/Tools/whisper-cuda/12.4/Release/whisper-cli.exe after installation.

Export normalized transcript data as SRT:

uv run video-mcp --config video-mcp.example.yaml export-srt "work\Test Video.transcript.raw.json"

SRT cue numbers are generated deterministically, timestamps are validated for ordering and overlap, and existing output is preserved unless --overwrite is supplied.

Export the same transcript as styled ASS for FFmpeg rendering or Kdenlive:

uv run video-mcp --config video-mcp.example.yaml export-ass "work\Test Video.transcript.raw.json"

The initial clean preset uses a readable white Arial style with outline and shadow settings, and the ASS play resolution can be adjusted with --width and --height.

Create a fast burned-in preview from the source video and ASS file:

uv run video-mcp --config video-mcp.example.yaml create-preview `
  "C:\Videos\Test Video.mp4" `
  "work\Test Video.ass"

Preview rendering uses FFmpeg, preserves the source video, and defaults to a 1280-pixel-wide H.264/AAC output. Use --width and --overwrite as needed.

Run the complete local caption pipeline with one command:

uv run video-mcp --config video-mcp.example.yaml caption `
  "C:\Videos\Test Video.mp4" `
  --device cpu

This creates a job directory containing source.json, normalized audio, transcript.raw.json, transcript.cleaned.json, subtitles.srt, subtitles.ass, and captioned-preview.mp4. Re-running reuses existing artifacts; use --overwrite to regenerate them.

Every caption invocation returns a unique job_id and writes structured JSON stage logs to stderr (including the input, ASR backend/device, artifact paths, and segment count). This keeps --json results on stdout machine-readable while making it easy to trace a local job or diagnose a failed stage.

When an ASR backend provides word timestamps but coarse segments, deterministic formatting splits oversized speech into timestamped caption cues before SRT and ASS export. It favours sentence and phrase endings and uses the configured line capacity as its character limit.

Subtitle cleanup is deterministic by default. To enable optional local LLM cleanup, install llama.cpp, download a compatible GGUF model, and set its path in video-mcp.yaml. The direct llama-cli.exe adapter remains available for compatible models. For Qwen 3.5, run the local OpenAI-compatible llama-server.exe endpoint; it applies the chat template before constrained JSON decoding.

Start the server on localhost:

C:\Tools\llama\llama-server.exe -m C:\Models\llama\Qwen3.5-2B-Q4_K_M.gguf `
  --host 127.0.0.1 --port 8087 --no-webui --reasoning off

Then configure the endpoint:

tools:
  llama_cpp: "C:/Tools/llama/llama-server.exe"
llm:
  enabled: true
  model: "C:/Models/llama/Qwen3.5-2B-Q4_K_M.gguf"
  server_url: "http://127.0.0.1:8087/v1/chat/completions"
  max_segments_per_chunk: 8
  max_chars_per_chunk: 2400
  max_tokens: 512

The LLM receives bounded transcript chunks and must return a strict segment schema, so timing and segment IDs remain unchanged. If the executable, model, server, or response is unavailable or invalid, the pipeline records a warning and falls back to deterministic cleanup. The same service is available through the MCP subtitle.clean tool.

The cleanup service is also available directly from the CLI:

uv run video-mcp --config video-mcp.example.yaml clean `
  "work\Test Video.transcript.raw.json" `
  --output "work\Test Video.transcript.cleaned.json"

Run the local-tool smoke test to generate a tiny synthetic video and verify FFprobe, FFmpeg audio extraction, SRT/ASS export, and preview rendering. It does not invoke Whisper or download any model weights:

uv run python scripts/smoke_test.py --config video-mcp.example.yaml

Create an editable Kdenlive project from the generated SRT:

uv run video-mcp --config video-mcp.example.yaml kdenlive `
  "C:\Videos\Test Video.mp4" `
  --subtitles "work\Test Video\subtitles.srt"

The project defaults to work\Test Video-captioned.kdenlive and writes the required sibling Test Video-captioned.kdenlive.srt. Use --output to choose another project path and --overwrite to replace existing project assets. Editable Kdenlive export currently requires SRT; ASS remains the asset used for FFmpeg burned-in previews.

Run the thin MCP server over stdio:

uv run video-mcp-server

The MCP layer exposes the tested direct services for inspection, local transcription, captioning, preview rendering, SRT/ASS export, and Kdenlive project creation. It does not duplicate media-processing logic or require a running Kdenlive GUI.

The experimental Parakeet backend can be selected in video-mcp.yaml:

tools:
  parakeet: "C:/Tools/parakeet/build-1.9.2/bin/Release/parakeet-cli.exe"
asr:
  backend: parakeet
  model: "C:/Models/parakeet/ggml-parakeet-tdt-0.6b-v3-q8_0.bin"

On Windows, build the pinned CPU runtime and download the verified Q8 model with CMake and Visual Studio Build Tools installed:

powershell -ExecutionPolicy Bypass -File scripts\install_parakeet.ps1

This installs the v1.9.2 parakeet-cli build under C:\Tools\parakeet and the 668.8 MB model under C:\Models\parakeet. Parakeet remains experimental and Whisper.cpp remains the default backend.

Compare it with Whisper on normalized WAV fixtures using:

uv run python scripts/benchmark_asr.py --backend parakeet `
  --model "C:\Models\parakeet\ggml-parakeet-tdt-0.6b-v3-q8_0.bin" `
  --reference-dir benchmarks/references work\sample\audio.wav

Results belong in benchmarks/asr-results.md; model weights and generated audio stay outside Git. Each JSON result includes wall time, real-time factor, and best-effort peak_process_memory_mib plus peak_gpu_memory_mib for the ASR process. GPU memory is sampled with nvidia-smi; gpu_memory_scope is process when the driver identifies the ASR PID, or device_delta when a Windows WDDM driver only exposes whole-device memory usage.

Codex Implementation Brief — Windows Local Video Subtitle MCP

Related MCP server: youtube-mcp

Goal

Build a local-first Windows application/MCP server that can:

  1. Take an existing video file.

  2. Transcribe its speech locally.

  3. Generate well-formatted subtitles.

  4. Produce SRT and ASS subtitle files.

  5. Render a subtitled preview/final video using FFmpeg.

  6. Optionally create an editable Kdenlive project containing the video and subtitles.

  7. Expose these operations as deterministic MCP tools for Codex/Claude/other MCP clients.

The application must work without cloud APIs.

Primary target environment:

  • Windows 10/11 x64

  • Kdenlive installed locally

  • CPU-first execution

  • NVIDIA GTX 1660-class GPU with ~4 GB VRAM available as optional acceleration

  • Local filesystem input/output

Do not design around requiring the GPU.


Architectural Principle

Do NOT build a remote-control wrapper around the Kdenlive GUI.

Kdenlive is an optional editor/handoff target.

The core product is a deterministic local video-processing pipeline:

Video
  ↓
Media inspection
  ↓
Audio extraction
  ↓
Local ASR
  ↓
Normalized subtitle data
  ↓
Subtitle cleanup / formatting
  ↓
SRT + ASS
  ↓
 ┌───────────────┬─────────────────┐
 ↓               ↓
FFmpeg render    Kdenlive project
 ↓               ↓
MP4             Editable project

MCP sits on top of this pipeline.

Every core operation must also be callable directly from Python without MCP.


Technology Stack

Use Python 3.11+.

Use the current official MCP Python SDK v2.

Initial MCP transport:

stdio

Do not make HTTP transport necessary for v1.

Core external executables:

ffmpeg.exe
ffprobe.exe
whisper.cpp executable
Kdenlive / MLT tooling where appropriate

Prefer subprocess invocation of stable native tools over large Python ML dependency stacks.

Use pathlib for all filesystem operations.

Windows paths containing spaces must work correctly.

Never construct shell command strings. Pass subprocess arguments as arrays.


ASR Backends

Define an abstraction:

class ASRBackend:
    def transcribe(audio_path, options) -> Transcript:
        ...

Implement at least:

WhisperCppBackend

Design for later:

ParakeetBackend

Whisper.cpp

Whisper.cpp is the v1 baseline.

It must support:

CPU
CUDA if available

GPU failure must never make transcription impossible.

Desired behavior:

auto
 ↓
try CUDA backend if configured
 ↓
if unavailable/fails
 ↓
CPU

Do not auto-download large models without an explicit command/tool.

Model locations should be configurable.

Initial useful Whisper models:

base
small

Benchmark later to determine default.

Parakeet

Treat OpenASR/Parakeet 0.6B as an experimental backend.

Do not make it a dependency of milestone 1.

Investigate whether a clean native Windows deployment exists.

If it works reliably:

Parakeet Q8 CPU

may become the preferred fast transcription backend.

The backend interface must make switching ASR engines trivial.


Internal Subtitle Data Model

Do NOT make SRT the application's internal source of truth.

Define normalized structures similar to:

@dataclass
class Word:
    start_ms: int
    end_ms: int
    text: str
    confidence: float | None = None

@dataclass
class SubtitleSegment:
    id: str
    start_ms: int
    end_ms: int
    text: str
    words: list[Word]
    speaker: str | None = None

@dataclass
class Transcript:
    language: str | None
    duration_ms: int
    segments: list[SubtitleSegment]

Persist normalized transcripts as JSON.

Example:

work/
  video-name/
    source.json
    transcript.raw.json
    transcript.cleaned.json
    subtitles.srt
    subtitles.ass

This JSON representation should be stable and versioned.


Caption Formatting Engine

Build deterministic caption segmentation before involving any LLM.

Config example:

max_chars_per_line: 42
max_lines: 2
min_duration_ms: 700
max_duration_ms: 6000
min_gap_ms: 80
prefer_sentence_boundaries: true
prefer_phrase_boundaries: true

The formatter should try to avoid:

  • one-word dangling lines

  • splitting proper names

  • splitting immediately before punctuation

  • excessively rapid captions

  • overlapping subtitle timestamps

Keep word timestamps whenever ASR supplies them.

The formatter should be thoroughly unit tested.


Subtitle Styling

Support named presets.

Example:

clean
shorts-bold
interview
agency-default

Represent styles as configuration rather than generated commands.

Example conceptual structure:

name: shorts-bold
font: Arial
font_size: 64
alignment: bottom-center
margin_bottom: 120
outline: 4
shadow: 1
max_lines: 2

Generate ASS from these presets.

Do not hardcode styling into FFmpeg command construction.


Local LLM Cleanup

LLM cleanup is optional.

The pipeline must work without an LLM.

Define:

SubtitleCleaner

implementations:

DeterministicCleaner
LocalLLMCleaner

Eventually use a small GGUF model through llama.cpp.

Candidate:

Qwen3.5 2B Q4

But do not make this required for milestone 1.

LLM responsibilities should be narrowly constrained:

  • punctuation correction

  • capitalization

  • obvious ASR error correction

  • sentence boundary recovery

The LLM must NOT:

  • summarize

  • paraphrase

  • invent dialogue

  • alter meaning

Require structured JSON output and validate it before accepting changes.

Original transcription must always be preserved.


FFmpeg Adapter

Implement:

probe_video()
extract_audio()
render_subtitles()
create_preview()

Audio extraction target:

mono
16 kHz
PCM WAV

FFprobe result should capture at least:

duration
width
height
frame rate
video codec
audio codec
sample rate
rotation/orientation

Rendering must support:

soft subtitle output
burned-in subtitle output

For preview generation, allow reduced resolution / faster encoding.

Never overwrite the original video.


Kdenlive Adapter

Kdenlive support is deliberately downstream from the core pipeline.

Initial Kdenlive goal:

source video
+
generated subtitle track
+
correct project settings
=
editable .kdenlive project

Do not automate the Kdenlive GUI using mouse/keyboard controls unless absolutely unavoidable.

Prefer:

  1. supported project/MLT structures

  2. MLT tooling

  3. existing open-source Kdenlive automation code

  4. GUI automation only as a last resort

Current development should target Kdenlive 26.x on Windows.

Research existing open-source:

Kdenlive MCP servers
Kdenlive CLI wrappers
MLT project generators
CLI-Anything Kdenlive implementation

Before copying code:

  • inspect license

  • document provenance

  • identify reusable components

  • avoid importing an entire architecture unnecessarily

Create an adapter boundary:

class ProjectAdapter:
    def create_project(...): ...
    def add_video(...): ...
    def add_subtitles(...): ...
    def save(...): ...

Implementation:

KdenliveProjectAdapter

The rest of the application must not depend directly on Kdenlive XML internals.


MCP Server

Keep MCP thin.

MCP tools should call application services.

Do not put media-processing logic inside MCP handlers.

Initial tool surface:

video.inspect

video.transcribe

video.generate_subtitles

video.create_preview

video.render

subtitle.export_srt

subtitle.export_ass

project.create_kdenlive

Possible convenience tool:

video.caption

which orchestrates:

inspect
→ transcribe
→ format
→ export
→ optionally render

Every long-running tool should return useful structured status/output information.

Example response:

{
  "success": true,
  "input": "C:\\Videos\\demo.mp4",
  "transcript": "C:\\Videos\\demo.work\\transcript.cleaned.json",
  "srt": "C:\\Videos\\demo.work\\subtitles.srt",
  "ass": "C:\\Videos\\demo.work\\subtitles.ass",
  "rendered_video": null,
  "warnings": []
}

Proposed Repository Structure

video-subtitle-mcp/
│
├─ pyproject.toml
├─ README.md
├─ LICENSE
├─ .gitignore
│
├─ src/
│  └─ video_mcp/
│     │
│     ├─ config.py
│     ├─ models.py
│     │
│     ├─ media/
│     │  ├─ ffmpeg.py
│     │  └─ probe.py
│     │
│     ├─ asr/
│     │  ├─ base.py
│     │  ├─ whisper_cpp.py
│     │  └─ parakeet.py
│     │
│     ├─ subtitles/
│     │  ├─ formatter.py
│     │  ├─ srt.py
│     │  ├─ ass.py
│     │  ├─ styles.py
│     │  └─ cleaner.py
│     │
│     ├─ adapters/
│     │  ├─ ffmpeg.py
│     │  └─ kdenlive.py
│     │
│     ├─ services/
│     │  ├─ transcription.py
│     │  ├─ captioning.py
│     │  └─ rendering.py
│     │
│     └─ mcp/
│        └─ server.py
│
├─ presets/
│  ├─ clean.yaml
│  └─ shorts-bold.yaml
│
├─ tests/
│
└─ fixtures/

Configuration

Support a project-level config file such as:

video-mcp.yaml

Example:

tools:
  ffmpeg: "C:/Tools/ffmpeg/bin/ffmpeg.exe"
  ffprobe: "C:/Tools/ffmpeg/bin/ffprobe.exe"
  whisper_cpp: "C:/Tools/whisper/whisper-cli.exe"
  kdenlive: "C:/Program Files/kdenlive/bin/kdenlive.exe"

asr:
  backend: whisper_cpp
  device: auto
  model: "C:/Models/whisper/ggml-small.bin"

subtitles:
  preset: clean
  max_chars_per_line: 42
  max_lines: 2

output:
  workspace: "./work"

Also support environment-variable overrides.

Do not make users edit Python source to configure executable/model paths.


Hardware Detection

Implement a diagnostic command/service:

video-mcp doctor

It should report:

Windows version
CPU
system RAM

FFmpeg found?
FFprobe found?

whisper.cpp found?
Whisper model found?

CUDA/NVIDIA GPU detectable?
GPU name
VRAM if detectable

Kdenlive found?
Kdenlive version

MLT/melt available?

llama.cpp available?

workspace writable?

Do not fail because optional components are absent.

Report capabilities.

Example:

Core caption pipeline: READY
Whisper CPU: READY
Whisper CUDA: READY
Parakeet: NOT INSTALLED
Kdenlive export: READY
Local LLM cleanup: NOT INSTALLED

Milestones

Milestone 0 — Research and Spike

Before committing architecture around existing Kdenlive projects:

  1. Identify the strongest existing open-source Kdenlive MCP/CLI projects.

  2. Inspect their licenses.

  3. Determine how they manipulate Kdenlive/MLT projects.

  4. Test creating a minimal Kdenlive project programmatically on Windows.

  5. Document what should be reused versus rewritten.

Output:

docs/kdenlive-research.md

Do not spend excessive time making the existing MCP server work if its architecture is unsuitable.


Milestone 1 — Core Caption Pipeline

Must work completely without MCP or Kdenlive.

CLI:

video-mcp caption input.mp4

produces:

transcript.raw.json
transcript.cleaned.json
subtitles.srt
subtitles.ass
captioned-preview.mp4

Use:

FFmpeg
whisper.cpp
deterministic formatter

No local LLM yet.

Acceptance criteria:

  • Windows paths with spaces work.

  • Original video remains untouched.

  • CPU transcription works.

  • Generated captions contain valid timestamps.

  • No overlapping captions.

  • SRT opens correctly in common players.

  • ASS burns successfully through FFmpeg.

  • Interrupted jobs produce understandable errors.

  • Re-running is safe/idempotent where reasonable.


Milestone 2 — GPU Acceleration

Enable whisper.cpp CUDA.

Device selection:

cpu
cuda
auto

Acceptance criteria:

  • GTX 1660 can be detected where supported.

  • auto falls back to CPU cleanly.

  • GPU failure never corrupts job output.

  • Benchmark CPU versus CUDA.

Create:

benchmarks/asr-results.md

Measure:

wall-clock transcription time
real-time factor
peak RAM
GPU VRAM

Milestone 3 — Kdenlive Project Export

Command:

video-mcp kdenlive input.mp4 --subtitles subtitles.srt

should produce:

input-captioned.kdenlive

Opening that project manually in Kdenlive should show:

  • original media

  • correct resolution/frame rate

  • synchronized captions/subtitle track

  • editable caption content

  • no missing-media errors

No GUI automation should be needed to create it.


Milestone 4 — MCP Interface

Wrap the tested service layer with MCP.

Expose:

video.inspect
video.transcribe
video.generate_subtitles
video.create_preview
video.render
project.create_kdenlive

Test through an MCP client.

MCP failure must not leave orphaned FFmpeg/ASR processes.


Milestone 5 — Parakeet Evaluation

Test OpenASR Parakeet 0.6B Q8 on Windows.

Compare against Whisper on several representative videos.

Measure:

transcription speed
RAM
accuracy
word timestamp quality
punctuation
installation complexity
Windows reliability

Only promote Parakeet to default if the complete Windows experience is clearly better.


Milestone 6 — Local LLM Cleanup

Add llama.cpp adapter.

Evaluate a small Qwen model.

Give the model small transcript chunks rather than entire videos.

Validate every response against strict JSON schemas.

Keep deterministic cleanup as fallback.


Testing Strategy

Use pytest.

Unit-test heavily:

subtitle segmentation
timestamp conversion
line wrapping
ASS escaping
SRT generation
configuration
path handling
model serialization

Integration tests should cover:

FFprobe
FFmpeg audio extraction
Whisper invocation
FFmpeg subtitle rendering
Kdenlive project generation

Include one very small media fixture suitable for repository tests if licensing permits.

Do not require downloading gigabytes of models in CI.

Use mock ASR output for normal CI tests.


Logging

Use structured logging.

Each processing job should get a job ID.

Log:

input file
detected media metadata
backend used
model used
CPU/GPU device
processing duration
generated outputs
warnings/errors

Never silently switch transcription models.

If auto falls back from CUDA to CPU, explicitly report that.


Error Handling

Create typed application errors such as:

ExecutableNotFound
ModelNotFound
UnsupportedMedia
TranscriptionFailed
SubtitleGenerationFailed
RenderFailed
KdenliveProjectFailed

MCP handlers should convert these into useful user-facing messages.

Avoid dumping giant subprocess traces unless debug mode is enabled.


Things NOT to Build Yet

Do not initially build:

  • Kdenlive GUI automation

  • live OBS captioning

  • speaker diarization

  • word-by-word TikTok animation

  • cloud transcription

  • cloud LLM integration

  • video cutting/editing

  • automatic B-roll

  • automatic scene detection

  • web frontend

  • database

  • authentication

  • distributed jobs

Keep v1 extremely focused.


Definition of Initial Success

The first meaningful demo should be:

video-mcp caption "C:\Videos\Test Video.mp4"

and approximately one command later we have:

Test Video.work/
    transcript.raw.json
    transcript.cleaned.json
    subtitles.srt
    subtitles.ass
    preview.mp4

Then:

video-mcp kdenlive "C:\Videos\Test Video.mp4"

produces an editable Kdenlive project using those same subtitle assets.

Finally an MCP client should be able to request:

"Caption this video using the clean preset and make me an editable Kdenlive project."

The MCP server should perform the same deterministic pipeline without duplicating implementation logic.


First Task for Codex

Begin with Milestone 0 and Milestone 1.

Before implementing:

  1. Inspect the existing repository if one exists.

  2. Check for existing Kdenlive MCP/MLT code worth reusing.

  3. Verify licenses before copying code.

  4. Create the proposed module boundaries.

  5. Implement video-mcp doctor.

  6. Implement FFprobe inspection.

  7. Implement FFmpeg audio extraction.

  8. Implement the Whisper.cpp adapter.

  9. Define normalized transcript models.

  10. Implement deterministic SRT generation.

  11. Implement ASS generation with one clean preset.

  12. Render a captioned preview through FFmpeg.

  13. Add tests.

  14. Document exact Windows setup in README.

Do not implement the MCP layer until the direct Python/CLI pipeline is working and tested.

Make reasonable implementation decisions autonomously. Keep dependencies minimal. Prefer boring, inspectable code over clever abstractions.

Available Tools

9 tools
project.create_kdenliveB

Create an editable Kdenlive project from a video and SRT file.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
input_pathYes
config_pathNo
output_pathNo
subtitles_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/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 only says 'create', but does not mention overwrite behavior, output path handling, side effects on input files, or permission requirements. Key parameters like overwrite and output_path are left unexplained.

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 a single, front-loaded sentence with no wasted words. It immediately states the action and the required inputs, earning a perfect score for conciseness and structure.

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?

While an output schema exists, the description gives no workflow context, prerequisites, or behavior around the optional parameters. For a tool with five parameters and no annotations, this minimal description is insufficient for an agent to invoke it correctly, especially without understanding overwrite and output_path semantics.

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

Parameters2/5

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

Schema description coverage is 0%, and the description names none of the five parameters. Even though parameter names like input_path and subtitles_path are somewhat self-explanatory, the description adds no semantic detail about how these parameters interact or what values are expected, failing to compensate for the schema's lack of descriptions.

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 uses a specific verb ('Create') and resource ('editable Kdenlive project') with clear input sources ('video and SRT file'), which makes the tool's purpose unmistakable. It also distinguishes from sibling tools like video.transcribe or video.caption, which perform different operations.

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 the tool is for creating an editable project from an existing video and SRT, but it does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool references are provided, making it minimally adequate.

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

subtitle.cleanC

Clean a transcript with the optional local LLM and deterministic fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
config_pathNo
output_pathNo
transcript_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

The description discloses the execution modes ('optional local LLM and deterministic fallback'), which gives some insight into behavior. However, it does not mention side effects like overwriting the input file (despite the 'overwrite' parameter), output handling, or any requirements. Without annotations, this is only partial transparency.

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 a single concise sentence with no redundant or filler content. It is appropriately brief and front-loaded, conveying the essential action quickly.

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 tool has 4 parameters, no parameter descriptions, and a potentially nuanced behavior (optional LLM vs fallback), the description is too minimal to be complete. It does not explain the cleaning process, parameter interactions, or the importance of the fallback, making it insufficient for reliable agent selection and invocation.

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

Parameters1/5

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

The schema has 0% description coverage, and the description does not mention any parameters. It does not clarify the meaning or role of transcript_path, overwrite, config_path, or output_path, so it adds no value beyond the raw 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 uses a specific verb ('clean') and resource ('transcript'), and the action is distinct from sibling tools like subtitle.export_srt or video.transcribe. However, it does not define what 'clean' entails (e.g., removing filler words, formatting), so it is clear on surface but not deeply distinctive.

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 instead of alternatives, nor any context such as prerequisites or typical use cases. It is a single declarative sentence without any conditional or comparative information.

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

subtitle.export_assB

Export a normalized transcript JSON file as styled ASS.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo
widthNo
heightNo
overwriteNo
config_pathNo
output_pathNo
transcript_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral transparency. It only states the core export action and does not mention overwrite behavior, config file handling, default styles, or output path defaults. Users are left unaware of side effects or operational constraints.

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 a single, concise sentence that front-loads the key information. Every word contributes to the meaning, with no filler or redundancy. It is appropriately brief for a tool with a clear primary function.

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 tool's complexity (7 parameters, no annotations, and no schema descriptions), the one-line description is insufficient. It does not address configuration, output handling, or operational nuances. The presence of an output schema does not compensate for the lack of guidance on inputs and behavior.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not compensate by explaining any of the 7 parameters. It mentions 'normalized transcript JSON' and 'styled ASS' but gives no insight into parameters like style, width, height, overwrite, config_path, or output_path. This leaves the agent with no additional semantic understanding 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 tool's function: exporting a normalized transcript JSON file as styled ASS. The verb 'export' specifies the action, the resource is the transcript JSON, and the output format is ASS. This distinguishes it from sibling tools like subtitle.export_srt, which exports SRT, and subtitle.clean, which cleans subtitles.

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 the tool is for converting a normalized transcript to ASS subtitles, but it does not explicitly state when to use it versus alternatives like subtitle.export_srt. The word 'normalized' hints at a prerequisite (e.g., prior cleaning), but this is not made explicit. No exclusions or alternative references are provided.

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

subtitle.export_srtC

Export a normalized transcript JSON file as SRT.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
config_pathNo
output_pathNo
transcript_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

There are no annotations, so the description must disclose behavioral traits. It only states the core function and does not mention side effects, default behaviors, or requirements. For example, it does not clarify what happens if the output file already exists or how config_path affects behavior.

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 a single, focused sentence that immediately conveys the tool's purpose. It is appropriately sized and front-loaded, with no unnecessary words.

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?

Despite having an output schema, the tool has 4 parameters and no annotations. The description is too sparse to provide complete context, lacking details about default output locations, overwrite behavior, or how config_path modifies the export. This is a minimal viable description at best.

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

Parameters2/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 for explaining parameters. It only hints at transcript_path via 'transcript JSON file' but provides no meaning for overwrite, config_path, or output_path, leaving the agent with minimal guidance on required vs optional parameters.

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 exports a normalized transcript JSON file as SRT, specifying the verb, input resource, and output format. It implicitly differentiates from the sibling tool subtitle.export_ass by naming the output format, but it does not explicitly name that alternative.

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 subtitle.export_ass. It does not mention prerequisites, such as the need for a normalized transcript, nor does it explain the role of parameters like overwrite or config_path.

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

video.captionC

Run the complete local caption pipeline for a video.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNo
deviceNo
threadsNo
languageNoauto
overwriteNo
input_pathYes
config_pathNo
preview_widthNo
create_preview_outputNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

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

No annotations exist, so the description must carry the full burden. It mentions 'local' execution and 'complete' pipeline, hinting at on-device processing and multi-step behavior, but it omits important behavioral traits like file creation, overwriting, or required resources. The overwrite and create_preview_output parameters imply side effects that are not disclosed.

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

Conciseness3/5

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

The description is a single, clean sentence that is easy to read and front-loads the verb. However, it is under-specified given the tool's complexity; the brevity sacrifices essential information, so it is not effective conciseness.

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

Completeness1/5

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

For a tool with 9 parameters, no annotations, and an output schema, the one-sentence description is grossly incomplete. It does not explain the pipeline stages, expected outputs, or relationship to sibling tools, leaving the agent without enough context to invoke the tool correctly.

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

Parameters1/5

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

The input schema has 9 parameters with 0% description coverage, and the description mentions only 'a video,' providing no explanation for style, device, threads, language, overwrite, config_path, preview_width, or create_preview_output. This is far below the coverage threshold and the description does not compensate.

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

Purpose3/5

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

The description identifies the tool as running a 'complete local caption pipeline' for a video, which conveys a high-level purpose and implies a composite workflow. However, 'caption pipeline' is vague and doesn't explicitly state what steps are involved or what outputs are produced, making it hard to distinguish from sibling tools like video.transcribe or subtitle.clean on first read.

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 about when to use this tool versus alternatives such as video.transcribe or video.render. The description does not mention any prerequisites, exclusions, or context in which the complete pipeline should be chosen over individual steps.

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

video.create_previewA

Burn ASS subtitles into a fast, downscaled MP4 preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
input_pathYes
config_pathNo
output_pathNo
preview_widthNo
subtitles_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior itself. It states the output type (MP4), the operation (burning subtitles), and the quality/speed tradeoff (fast, downscaled). However, it does not explain side effects such as file creation behavior, default output paths, overwrite semantics, or how configuration files affect the process, 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.

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the action ('Burn') and contains no filler. Every word contributes to understanding the tool's core purpose.

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?

For a tool with six parameters, two required, and no annotations, the description is too sparse. It does not explain the purpose of config_path, how output paths are determined, overwrite behavior, or preview sizing specifics, leaving the agent with significant missing context despite the presence of an output schema.

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

Parameters2/5

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

The input schema has zero description coverage, so the description must compensate. It only implicitly hints at subtitles_path (ASS subtitles) and preview_width (downscaled), but leaves input_path, output_path, config_path, and overwrite unaddressed, providing minimal parameter-level guidance.

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 uses a specific verb 'Burn' and identifies the exact resource and transformation: ASS subtitles are burned into a downscaled MP4 preview. This clearly distinguishes it from sibling tools like video.render (final output) and video.caption (caption generation) by specifying the preview nature and subtitles input.

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 does not explicitly state when to use this tool versus alternatives like video.render. However, the word 'preview' and adjectives 'fast' and 'downscaled' imply it is intended for quick, low-quality preview rendering, which is an indirectly conveyed usage context.

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

video.inspectB

Inspect a video with FFprobe and return normalized media metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
input_pathYes
config_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It states 'inspect' and 'FFprobe', implying a read-only operation, but does not explicitly disclose lack of side effects, configuration behavior, dependencies, or potential errors. More behavioral context is needed.

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 a single, front-loaded sentence with no wasted words. It efficiently conveys the tool's core action and output.

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?

The tool appears simple and output schema exists, so return values are covered. However, the description omits the purpose of config_path, any usage caveats, and what 'normalized' implies, leaving the context incomplete for an agent to fully understand configuration and edge cases.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain either parameter. 'input_path' is only vaguely implied by 'video', while 'config_path' is entirely unaddressed. The description must compensate for the schema's lack of parameter details but fails to do so.

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 uses a specific verb 'inspect', identifies the resource 'a video', specifies the method 'with FFprobe', and states the output 'normalized media metadata'. This clearly distinguishes it from sibling tools like transcribe, caption, or render.

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 use for inspecting video metadata but provides no explicit guidance on when to use this tool versus alternatives. There is no mention of exclusions or preferred scenarios, leaving usage largely inferred from the purpose.

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

video.renderA

Render a burned-in ASS subtitle preview; alias for video.create_preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
overwriteNo
input_pathYes
config_pathNo
output_pathNo
preview_widthNo
subtitles_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits. 'Render' implies file generation, but the description does not mention side effects such as creating/overwriting files, required permissions, or whether the operation is reversible. The alias hint provides some context but lacks essential safety and mutation 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 a single, front-loaded sentence that immediately states the action and resource, followed by an alias clarification. No wasted words; structured effectively for fast parsing.

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?

Despite having an output schema, the description lacks context for a 6-parameter tool with no annotations. It does not mention prerequisites, configuration behavior, or output path defaults, and the alias to video.create_preview only partially mitigates this by pointing to a sibling tool. The description is too sparse to be fully actionable in a complex workflow.

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

Parameters2/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 vaguely implies input_path and subtitles_path via 'input video' and 'ASS subtitles', but it does not explain overwrite, config_path, output_path, or preview_width. The parameter names alone carry most of the meaning, but the description adds minimal semantic value.

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 uses a specific verb ('Render') with a clear resource ('burned-in ASS subtitle preview') and explicitly identifies itself as an alias for video.create_preview, which distinguishes it from sibling tools like video.caption or video.transcribe. This makes the tool's purpose unambiguous.

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 clearly indicates this is equivalent to video.create_preview, providing a direct alternative. However, it does not explicitly state when to use this over other preview-related tools or mention exclusions (e.g., 'use video.caption for caption-only output').

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

video.transcribeC

Transcribe normalized audio with the configured local ASR backend.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
threadsNo
languageNoauto
overwriteNo
audio_pathYes
config_pathNo
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 disclosing behavior. It only mentions the core transcription action and the local ASR backend, but does not describe output format, handling of existing files (overwrite), language detection, resource usage, or side effects. The 'normalized audio' hint is useful but insufficient.

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 a single, front-loaded sentence with no unnecessary words. It efficiently communicates the tool's essence. However, given the tool's complexity, a bit more detail could be warranted, but this dimension specifically rewards concise writing, so a 4 is appropriate.

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

Completeness1/5

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

This tool has 7 parameters, no annotations, and zero schema description coverage. The description provides almost no contextual detail about when to use the tool, how to configure it, or what to expect. The presence of an output schema does not compensate for the lack of guidance on parameters and behavior.

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

Parameters1/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 for parameter meaning. It fails to explain any of the 7 parameters, including the required audio_path. No mention of device, threads, language, overwrite, config_path, or output_path, leaving the agent to guess their roles.

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 verb 'Transcribe' and the resource 'normalized audio', also specifying the local ASR backend. This distinguishes it from sibling tools like video.caption or subtitle.export_srt, which are about captions and subtitle exports, not raw transcription.

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 given about when to use this tool versus alternatives. There is no mention of prerequisites (e.g., what 'normalized audio' means or how to obtain it) or exclusions. The existence of sibling tools like video.caption suggests overlapping use cases, but the description does not address them.

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

TDQS

B3/5.0
Disambiguation3/5

Most tools have distinct purposes, but video.create_preview and video.render are explicit aliases of the same operation, creating unnecessary ambiguity. The descriptions clarify the alias, which mitigates confusion, but the duplication is still a flaw.

Naming Consistency4/5

Tool names follow a consistent pattern of domain prefix (video/subtitle/project) followed by an action verb (inspect, transcribe, clean, create_preview). The naming is uniform, though the presence of 'render' as an alias for 'create_preview' introduces slight redundancy without breaking the convention.

Tool Count5/5

With 9 tools, the server is well-scoped for a video captioning workflow. Each tool (except the alias pair) serves a distinct step in the pipeline, and the count is within the ideal 3–15 range.

Completeness4/5

The tool set covers the core video-to-subtitle-to-export workflow: inspect, transcribe, caption, preview, clean, export SRT/ASS, and create an editable project. Minor gaps exist such as lack of an explicit transcript retrieval or deletion/update operations, but agents can work around these with the provided pipeline.

Maintenance

ActivityMaintained
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/petercr/subtitle-machine-kdenlive'

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