kimo
kimo is a headless MCP video-editing server: every edit, render, and export is a tool call.
project: project settings, media import, save/load, undo/redo, inspection.
timeline: tracks and clips: add, move, trim, split, ripple/roll/slip/slide, speed, markers, multicam, silence removal.
animate: properties, keyframes/curves, expressions, motion paths/presets, camera, blend, corner/mesh pinning.
effects: video effects, transitions, adjustment layers, effect masks and presets.
masks: masks, roto, track mattes, matte refinement, keying.
text: text, titles, animators/paths, captions, subtitles, fonts, transcription.
graphics: shapes, bezier paths, shape modifiers, layer styles, HUD frames, counters, detection boxes.
vfx3d: 3D scenes, lights/materials, relight, particles, shard bursts, fracture glass.
tracking: point/planar/mesh/feature tracking, stabilize, camera solve, lens undistort, validation.
color_grade: primaries, curves, wheels, node graphs, LUTs, CDL, match grade, white balance, shared grades.
color_science: ACES, OCIO, HDR, float/high bit depth, color management, delivery checks.
scopes: waveform/vectorscope, exposure analysis, false color, gamut checks.
audio: levels, effects, pan, ducking, loudness normalize, beat detection, export.
output: render frame/export video, GIF, alpha, presets, EXR/TIFF, LUTs, camera solves.
Use search_tools to find tools/effects/transitions, kimo_describe for schemas, and kimo_enable_group to expand a group.
Call a group with
action+args, or call any tool by its own name.
Uses ffmpeg and ffprobe as the media backend for the editor: all decoding, encoding and media probing of imported assets and exported timelines go through them. This lets the server ingest arbitrary video/audio source files as editable clips and write out rendered frames, video exports, GIFs and EXR sequences without a bundled codec stack.
Demo
Real kimo-mcp tool calls (30 calls, 18 tools) streamed to the spectator over loopback TCP and recorded at 1920x1080. Nothing in these frames was staged in the UI.
Related MCP server: mcp-screenshot
What it is
kimo is a video editor with no editing GUI. You talk to it over the Model Context Protocol. Cut, keyframe, grade, track, key, relight, simulate, caption, mix and export are all registered commands, and the MCP server's tool list is generated from that same registry. There is no feature a human can reach that an AI cannot.
The target is the surface of CapCut, After Effects, Premiere and DaVinci Resolve in one engine: editing, motion graphics, VFX, tracking and pro color. It is an early engine with honest tiers. FEATURES.md lists what is solid, what is beta and what is not built.
Architecture
flowchart LR
agent["AI agent<br/>(Claude Code, Codex, Cursor, OpenCode, any MCP client)"]
subgraph engine["kimo-mcp: the headless engine"]
direction TB
reg["command registry<br/>tools/list is generated from it"]
core["kimo-core<br/>project model, CPU renderer,<br/>color, audio, text, tracking, 3D"]
prev["preview thread<br/>one auto frame after mutating calls"]
reg --> core --> prev
end
ff[("ffmpeg / ffprobe")]
gui["Kimo Spectator (kimo-gui)<br/>read-only, never calls render_frame"]
agent -- "JSON-RPC over stdio<br/>tools/call is the only way to edit" --> reg
core <-- "decode / encode / probe" --> ff
engine -. "telemetry JSONL on 127.0.0.1:7421<br/>call events, frame_rendered, frame_skipped" .-> guiHeadless engine.
crates/kimo-coreholds the project model, keyframes, the command registry, tool groups, the CPU renderer, effects, text, audio, tracking and color.crates/kimo-mcpis the MCP stdio server;kimo(crates/kimo-cli) is a command line client for the same tools. Decode, encode and probing go throughffmpegandffprobe. The renderer is CPU only; GPU code is off by default.Edits only through MCP tool calls. Add a tool to the registry and it appears in the MCP server, the CLI, the fuzz test and the schema. There is no side door.
The GUI is a pure telemetry spectator.
crates/kimo-gui(a Tauri app, its own Cargo workspace) registers zero IPC commands and only listens on loopback. It shows each call, the timeline and the preview frames the engine pushes. It never callsrender_frameand has no code path back to the engine. Close it and the engine carries on; open it mid-session and it catches up.
More: docs/ARCHITECTURE.md, docs/EXTENDING.md, crates/kimo-gui/README.md.
The MCP tool ecosystem
362/378 live in the default build + 16 feature-gated (8 native-ocio, 8 mesh-import/material-textures/flat-sah).
A default tools/list shows 17 grouped entries; set KIMO_TOOLS=flat to list all 378 (see Tool list profiles).
How the numbers fit: kimo_info and the golden registry (crates/kimo-core/tests/golden/golden_registry.txt) count 376 tools in 14 groups. A flat tools/list (KIMO_TOOLS=flat) lists 378: those 376 plus the two meta tools search_tools and kimo_describe. Of the 378, 362 are live in the default build and 16 are feature-gated (8 native-ocio, 8 mesh-import/material-textures/flat-sah); the gated ones stay in the list and answer with a clear refusal until their feature is built in.
376 registered tools sit in 14 groups (full list below):
| Area | Groups | Examples |
|---|---|
| Editing | project, timeline | tracks, clips, trims, ripple and roll edits, speed ramps, multicam, markers, atomic batch with undo |
| Motion | animate, effects | keyframes and Bezier easing, expressions, camera and shake, corner pin, transitions, adjustment layers |
| Compositing | masks, graphics | mask layers and roto, shapes, HUD frames, counters, boxes |
| Text | text | titles, captions, SRT import, text animators |
| VFX | vfx3d | particles, emitters, shard bursts, 3D scene, physics, lights and materials |
| Tracking | tracking | point, planar and mesh tracking, stabilize, camera solve |
| Color | color_grade, color_science, scopes | grade graphs, curves, ASC CDL, LUTs, ACES and OCIO tools, scopes and exposure analysis |
| Audio | audio | clips, effects, beats, loudness, ducking, speech intervals |
| Output | output | frame and video export, chunked export jobs, GIF, EXR, manifests, frame lint, contact sheets |
Principles
MCP first. Every tool is callable by name. The default
tools/listis grouped so a client does not read every schema up front.CPU, small memory. Tuned for a 2 GB machine. A cold release build of the whole workspace took 17 minutes on a shared 2 CPU / 2 GB machine (
CARGO_BUILD_JOBS=1).Measured, not claimed. Every "better than X" line in FEATURES.md has a stated baseline and a measured number, including the cases where we lost.
Fuzzed. The v3 notes record 6497 fuzz calls with 0 failures at 327 tools. These numbers come from the project notes. They were not re-run for this README.
Tool list profiles
KIMO_TOOLS picks what tools/list returns. Every tool can be called by its own name under every profile.
| Profile | tools/list entries | Size | Use when |
|---|---|---|
| grouped (default) | 17 | 4,432 bytes | small context windows. Call a group with action and args; find tools with search_tools. |
| core | 29 | 20,368 bytes | the most used tools with full schemas, plus search_tools, kimo_describe, kimo_enable_group. |
| flat | 378 | 286,762 bytes | clients with large context or their own tool search. Every tool listed with its schema. |
| group names, e.g. audio,color_grade | varies | varies | those groups listed flat, the rest grouped. |
Measured on a default-feature kimo-mcp built from commit af615ca (initialize, then tools/list; size is the compact JSON of the result). kimo_enable_group is listed in grouped and core but not in flat. search_tools(query, limit=8, group?) returns ranked tools, effects and transitions with the required args and a call_as hint.
Set it like this: claude mcp add --transport stdio --env KIMO_TOOLS=core kimo -- /home/you/.local/bin/kimo-mcp, or [mcp_servers.kimo.env] KIMO_TOOLS = "core" for Codex. For JSON configs add "env": { "KIMO_TOOLS": "core" } (OpenCode: "environment": { ... }).
Install (prebuilt installers)
Installers are built by the release workflow on GitHub-hosted runners and attached to a draft release with a SHA256SUMS file. Nothing is published until a maintainer reviews the draft. The builds are unsigned. This release ships Linux and Windows. macOS is coming later.
Files in the v5.0.0 release. Check every download against that release's SHA256SUMS (a .sha256 file also sits beside each engine package).
OS | File | Status |
Linux x86_64 |
| unsigned draft, built on CI runners; the same build steps were smoke-tested on Debian 12 at |
Linux x86_64 |
| unsigned draft, built on CI runners; run with |
Windows x64 |
| unsigned draft, built on CI runners; CI installs it, launches it, checks the listener (7421, and 7422 with 7421 taken) and uninstalls it on a GitHub Windows runner; not installed on a real Windows PC yet |
Engine (command line) downloads, same release:
OS | File |
Linux x86_64 (glibc 2.35+) |
|
Windows x64 |
|
Windows x64 (installer) |
|
The Windows engine packages are built and packaged by CI on a GitHub Windows runner; they have not been run on a real Windows PC yet.
Check the download against the release's SHA256SUMS:
sha256sum -c SHA256SUMS --ignore-missing # Linux
Get-FileHash .\Kimo-Spectator_5.0.0_x64_en-US.msi -Algorithm SHA256 # Windows PowerShell, compare by eyeLinux (unsigned draft)
sudo apt install ./Kimo-Spectator_5.0.0_amd64.deb # pulls in WebKitGTK 4.1; remove with: sudo apt remove kimo-spectator
# or, no install:
chmod +x Kimo-Spectator_5.0.0_amd64.AppImage
./Kimo-Spectator_5.0.0_amd64.AppImage # no FUSE? add --appimage-extract-and-runWindows (unsigned draft). Run the .msi. SmartScreen says "Windows protected your PC": click More info, then Run anyway. The app uses Microsoft Edge WebView2, which Windows 11 already has; on older systems the installer fetches it.
The spectator listens on the first free port of 127.0.0.1:7421-7430 (loopback only, never 0.0.0.0) and the engine finds it there by default, so there is nothing to set: open the app and calls show up. KIMO_SPECTATOR=off turns the stream off (see Watching it work).
Build from clone
1. Prerequisites
All platforms: the Rust toolchain from rustup, cmake and a C++ compiler (the engine builds vendored Manifold), and ffmpeg + ffprobe on PATH at runtime.
curl --proto '=https' --tlsv1.2 -sSf \
https://sh.rustup.rs | sh
sudo apt install build-essential cmake \
libssl-dev ffmpeg
# spectator app only:
sudo apt install libwebkit2gtk-4.1-dev \
libsoup-3.0-dev \
libayatana-appindicator3-dev \
librsvg2-devVisual Studio Build Tools with Desktop development with C++ (MSVC, Windows SDK, CMake).
rustup-init.exe (default
x86_64-pc-windows-msvc).WebView2 Runtime (already on Windows 11).
ffmpeg, for example
winget install Gyan.FFmpeg.
xcode-select --install
curl --proto '=https' --tlsv1.2 -sSf \
https://sh.rustup.rs | sh
brew install cmake ffmpeg
# spectator app only:
brew install nodeLinux x86_64 is the tested platform for the engine. The Windows list follows the Tauri and Rust prerequisites; the release workflow builds the engine and the spectator with it on a GitHub Windows runner, but a build from clone on a real Windows PC has not been tried yet.
Step 4 (the spectator app) also needs Node.js 18 or newer for npx; the CI jobs use Node 22.
macOS: no installer in this release, and it has not been built on a Mac here. The commands in the macOS column and in steps 2-4 are the same ones the Linux and Windows CI jobs run; crates/kimo-core/build.rs links libc++ on macOS. Reports welcome.
2. Build the engine
git clone https://github.com/naman-sharma12345/kimo.git
cd kimo
cargo build --release --workspace --bins # on a 2 GB box: CARGO_BUILD_JOBS=1 (cold build ~17 min)
target/release/kimo --version # the version in Cargo.toml and the git commitkimo-mcp is the MCP server (stdio). kimo is the command line client for the same tools.
3. Run it headless
kimo-mcp takes no required arguments: it reads JSON-RPC on stdin and writes replies on stdout. Your MCP client normally starts it for you.
target/release/kimo-mcp # headless MCP server; streams telemetry to the spectator when it is open
KIMO_SPECTATOR=off target/release/kimo-mcp # same, with telemetry off
target/release/kimo-mcp --spectator-demo # demo mode: one paced frame per call (needs the spectator open)
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | target/release/kimo-mcp # quick checkThe check prints "serverInfo":{"commit":"...","name":"kimo",...,"version":"..."}. --demo-pace-ms <50..100> sets the demo pace; KIMO_TOOLS picks the tool list profile.
4. Build the spectator app (optional)
The spectator is its own Cargo workspace in crates/kimo-gui. Build it with the Tauri CLI; npx fetches it, no global install needed:
cd crates/kimo-gui
npx --yes @tauri-apps/cli@2.12.3 build --bundles deb,appimage # Linux
npx --yes @tauri-apps/cli@2.12.3 build --bundles msi # Windows
npx --yes @tauri-apps/cli@2.12.3 build --bundles app # macOS (untested): Kimo Spectator.appThe installers land in crates/kimo-gui/target/release/bundle/. With Rust only, cargo install tauri-cli --version 2.12.3 --locked then cargo tauri build is the same CLI.
Then start the spectator first and the engine second:
./target/release/kimo-gui & # from crates/kimo-gui; listens on the first free port of 127.0.0.1:7421-7430
../../target/release/kimo-mcp # every tool call now shows up live (no KIMO_SPECTATOR needed)5. Connect a client
Client config. Use the absolute path of the binary you just built, for example /home/you/kimo/target/release/kimo-mcp.
Claude Code:
claude mcp add --transport stdio kimo -- /home/you/kimo/target/release/kimo-mcpClaude Desktop: add this to
claude_desktop_config.json(Settings, Developer, Edit Config) and restart the app. Theenvblock is optional;KIMO_TOOLS=corereturns a shorttools/list.
{
"mcpServers": {
"kimo": {
"command": "/home/you/kimo/target/release/kimo-mcp",
"args": [],
"env": { "KIMO_TOOLS": "core" }
}
}
}Cursor: put the same block in
~/.cursor/mcp.json(all projects) or.cursor/mcp.json(one project), then switch the server on in Cursor's MCP settings.Generic MCP client (stdio): command = the absolute path, no arguments, optional env as above. Any client that registers a stdio server by command and uses the
mcpServersshape takes the block as is.
The server itself (launch, initialize, tools/list) is verified on this build; the client config file locations come from each client's docs, not from a run of those apps here.
Codex and OpenCode use the formats shown under "Setup" below with the same path. KIMO_TOOLS=core (env var on the server entry) shrinks tools/list; see "Tool list profiles" below.
6. Quickstart with the CLI
State lives in a project file (--project p.kimo, created on first use). Every command below ran against this build; replace the media path with your own file.
K=target/release/kimo
$K -q call add_track --project p.kimo # prints {"track_id":"track1"}
$K -q call import_media --project p.kimo --args '{"path":"/abs/path/in.mp4"}' # returns asset_id, e.g. asset2
$K -q call add_clip --project p.kimo --args '{"track_id":"track1","source_type":"media","asset_id":"asset2","start":0,"duration":3}'
$K -q call add_title --project p.kimo --args '{"track_id":"track1","style":"lower_third","text":"Hello kimo","start":0.5,"duration":2}'
$K -q call render_frame --project p.kimo --args '{"time":1,"path":"/tmp/f.png"}' # look at one frame
$K -q call describe_frame --project p.kimo --args '{"time":1}' # numbers instead of pixels: stats, histogram, clipping, visible clips
$K -q call contact_sheet --project p.kimo --args '{"path":"/tmp/sheet.png","times":[0,1,2]}'
$K export p.kimo out.mp4 # render the timeline
$K tools search "color grade" # find tools by words
$K tools describe add_clip # argument schema of one toolIds (track1, asset2) are what the previous call returned, so read them from the output. export checks free memory first and refuses with a clear message when the frame would not fit; set KIMO_MEM_MB to override its budget. Exit codes: 0 ok, 1 tool error, 2 usage, 3 preflight failed. kimo --help lists every subcommand.
Setup: add kimo to your AI client
kimo is a local MCP server that speaks over stdin/stdout (the "stdio" transport). There is nothing to start by hand: your client launches kimo-mcp itself. You only need the path to the binary.
1. Get the binary (build from clone, see Build from clone above) and put it somewhere stable, for example:
mkdir -p ~/.local/bin && cp /path/to/kimo/target/release/kimo-mcp ~/.local/bin/
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | ~/.local/bin/kimo-mcpThe second command should print a JSON reply containing "serverInfo":{"name":"kimo". Install ffmpeg and ffprobe too (sudo apt install ffmpeg, or your package manager).
2. Add it to your client. Replace /home/you/.local/bin/kimo-mcp with your absolute path. Config formats below were checked against each client's public docs on 2026-10-11; client configs change, so if one fails, check the linked page.
Claude Code
(docs)
claude mcp add --transport stdio kimo -- /home/you/.local/bin/kimo-mcpAdd --scope user to make it available in every project, or --scope project to write it to a shared .mcp.json. Check with claude mcp list, or type /mcp inside Claude Code. The same thing as a .mcp.json file in your project:
{ "mcpServers": { "kimo": { "command": "/home/you/.local/bin/kimo-mcp", "args": [] } } }OpenAI Codex (CLI and IDE extension)
(docs)
codex mcp add kimo -- /home/you/.local/bin/kimo-mcpOr edit ~/.codex/config.toml (or .codex/config.toml in a trusted project):
[mcp_servers.kimo]
command = "/home/you/.local/bin/kimo-mcp"Cursor
(docs)
Create ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{ "mcpServers": { "kimo": { "command": "/home/you/.local/bin/kimo-mcp", "args": [] } } }Then open Cursor's MCP settings and switch the kimo server on.
OpenCode
(docs)
Put this in opencode.json in your project, or in ~/.config/opencode/opencode.json for all projects. Note that OpenCode takes command as a list and uses type: "local":
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"kimo": { "type": "local", "command": ["/home/you/.local/bin/kimo-mcp"], "enabled": true }
}
}Any other MCP client
kimo is a standard MCP stdio server (protocol 2024-11-05, initialize, tools/list, tools/call). Any client that can register a stdio server by command works: give it the absolute path to kimo-mcp and no arguments. Many clients use the mcpServers JSON shape shown for Cursor; some (for example Zed) use a different key, so check your client's MCP docs for the exact file and format. Only the four clients above were checked against their docs.
Windows: use the path to kimo-mcp.exe (the Windows engine installer kimo-5.0.0-windows-x86_64-setup.exe installs per user, no admin rights, into %LOCALAPPDATA%\Programs\kimo by default, so the binary is %LOCALAPPDATA%\Programs\kimo\bin\kimo-mcp.exe (kimo.iss); in JSON write backslashes doubled, see the Windows guide). The configs above are the same except for the path; the Claude Code, Codex, Cursor and OpenCode formats were checked on their docs, not tested on Windows here.
3. Try it. Ask your assistant: "Use kimo to import /path/to/clip.mp4, add a title, and render a frame." Or drive it yourself with the Python client in examples/mcp_client.py.
Watching it work: spectator telemetry
Kimo's spectator app (crates/kimo-gui) connects on its own. Open it and every tool call streams to it live; you don't
set anything. With KIMO_SPECTATOR unset or empty (or on), kimo-mcp looks for the app on loopback ports
127.0.0.1:7421–7430, in order. It never uses 0.0.0.0 or any other host. It only streams to a peer that answers the
versioned spectator handshake (KIMO-SPECTATOR/1; any other answer, an older version included, is a failed
handshake), so a different program holding one of those ports gets nothing. The search runs on the telemetry thread,
never on a tool call. The app takes the first free port in that range and shows "listening 127.0.0.1:".
KIMO_SPECTATOR=off (or 0/false) turns telemetry off: no telemetry thread, no events.
KIMO_SPECTATOR=tcp://127.0.0.1:<port> pins one port with no scan and no handshake; a host that is not a loopback
address (127.0.0.1, localhost) is ignored and telemetry stays off. file:/path/events.jsonl writes the same lines to
a file. A malformed value is treated as off, silently. With no app connected, events are dropped before they are
serialized, and nothing about telemetry is written to stdout or stderr. With an app connected, each tool call sends
a start event with the arguments, progress for long calls such as export, and complete with what changed in
the project (or error), all under one call_id. The stream is
out of band: tools/list, results and stdout are byte-identical with it on or off, it never waits for the app,
and with no app listening events are dropped. The app can be opened and closed at any point in a session: the
engine notices a closed window before its next event, reconnects on its own (retrying after 50 ms, doubling to
at most 1 s between attempts, never waiting on the tool calls), and events from while no app was listening are
dropped rather than replayed.
The viewer follows the project live: after any call that changes it (import, add/move/trim/split a clip,
transforms, effects, colour, text...), the engine renders the frame at the playhead in the background and sends it as
{"type":"frame_rendered","auto":true,"png_b64",...} (at most 640 px wide; KIMO_SPECTATOR_FRAME_PX changes that),
so the app never waits for the agent to call render_frame. Read-only calls (get_*, list_*, searches,
tools/list) render nothing. Bursts coalesce, latest wins: the frame renders once no call has arrived for 40 ms (or
400 ms into a long burst, between two calls), one at a time, never while a call is running, on its own thread with
its own decode cache, so tool calls never wait for it. The playhead moves to an explicit time/at (a split shows
the cut), else into the clip the call touched, and otherwise stays put. Frames are only rendered while an app is
connected (one that opens mid-session gets the current frame at once); with telemetry off or nobody listening
there is no render thread at all (with nobody listening, events are dropped before they are serialized and the
telemetry thread looks for the app again at most once a second), and KIMO_SPECTATOR_FRAMES=0 keeps the call events but turns the frames off.
The {"type":"session"} event and every {"type":"project_changed"} carry the project width and height in pixels
(the size after the call), so the app can place x/y transform moves on the viewer.
export progress events carry current_frame (frames finished, so the index of the next frame), total_frames,
fps (the instantaneous rate over the time since the previous progress report) and eta_ms (null until the first
frame is done) beside pct and elapsed_ms. To watch in a plain browser instead of the app, run
python3 crates/kimo-mcp/tools/spectator_sse_relay.py and open the UI with ?feed=sse. Event fields:
crates/kimo-mcp/src/spectator.rs.
Call events are strictly one per call: every tools/call gets exactly one start and exactly one complete or
error, in call order, with its call_id and the request's JSON-RPC id as rpc_id, and one project_changed per
call that changed the project. They travel on their own lossless lane: never coalesced, never dropped while an app is
connected, and written as whole lines only. An app that is slow to read (a busy window) is waited for, not cut off.
Memory is bounded at 64 MiB of queued events; past that, the next call waits for the app to catch up (backpressure)
rather than losing anything, and nothing ever waits while no app is listening. Canvas frames have a separate
latest-only lane (the newest two), so they can never crowd out, drop or delay call events. Only the headless canvas
frames below coalesce.
Every headless frame a call queues ends as exactly one frame_rendered (auto) or one
{"type":"frame_skipped","skip_reason",...,"call_id","rev","gen","frame_lane_drops","ts_ms"}. Refusals
(memory_budget, session_busy, pq_output, hlg_output, render_error, render_panic) also carry
"refused": true and a human reason, and the spectator shows them as a "render refused" chip. Benign skips
(coalesced, superseded_by_render_frame, frame_lane_dropped, disconnected) mean a newer frame replaces this one
and carry no reason. Details: crates/kimo-mcp/src/preview.rs ("Headless skips").
Two preview modes
Headless (default). As described above: canvas frames coalesce by call cadence, so a burst of 59 calls 50 ms apart shows about 6 frames, and the tool calls never wait for the viewer. Use this for agents and batch runs.
Spectator demo mode (opt in). For watching or recording a session: every tool call gets its own canvas frame, rendered from the project exactly as that call left it and tagged with it (
"demo":true,seq,call_id,rpc_id,tool). After each call's response the engine holds the next request until that frame has reached the app and a pace (50 to 100 ms, default 75) has passed, so each call's change stays on screen. A call that leaves the picture unchanged (a read, a failed call) re-sends the current frame with"same":true. Demo frames travel on the lossless call-event lane, never the latest-only one, so none is dropped. A frame that cannot be made is sent as{"type":"frame_skipped","demo":true,"reason":...}, so frames and calls always match one to one. Turn it on withKIMO_SPECTATOR_DEMO=on(or a pace in ms, e.g.KIMO_SPECTATOR_DEMO=60), or on the command line withkimo-mcp --spectator-demoorkimo-mcp --demo-pace-ms 60(the command line wins). It needs telemetry on (the default; not withKIMO_SPECTATOR=off), and it does nothing (no pacing, no renderer) while no app is connected. Example:claude mcp add --transport stdio --env KIMO_SPECTATOR_DEMO=75 kimo -- /home/you/.local/bin/kimo-mcp. Pacing was chosen over rendering every frame without waiting because unwaited frames would be rendered after the agent had already moved on, so the canvas would trail the timeline and inspector and show the wrong state for a call.
How an AI sees the tools
Call a group with {"action": "<tool name>", "args": {...}}, for example {"name": "vfx3d", "action": "add_scene3d", "args": {...}}. Calling a tool by its own name also works.
Tool listing (376 tools)
This is the list the v3 build registers (read from tools/list of the grouped server plus kimo_describe group=<name>, 376 tools in 14 groups; the grouped tools/list itself shows 14 group tools plus search_tools, kimo_describe, kimo_enable_group). kimo --version and kimo_info report the workspace version, which is 5.0.0 from this release. Get any tool's arguments with kimo tools describe <name> or kimo_describe, and find tools by words with search_tools.
Group | Tools |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Verification status
Registry: 376 tools (
crates/kimo-core/tests/golden/golden_registry.txt, 376 lines). A default-featurekimo-mcpataf615calists 378 entries inflatmode: those 376 plussearch_toolsandkimo_describe. Of the 378, 362/378 live in the default build + 16 feature-gated (8 native-ocio, 8 mesh-import/material-textures/flat-sah).Fuzz: 6497 calls, 0 failures, as recorded in the v3 notes at 327 tools. Not re-run for this README.
Linux spectator installers (
.deb,.AppImage): built on CI runners (dry run atca0334f, then version0.1.0; the5.0.0files come from the same steps in thev5.0.0tag build), downloaded and smoke-tested on Debian 12 x86_64 on 2026-10-17: sha256 matches, the.debinstalls (Depends: libwebkit2gtk-4.1-0, libgtk-3-0) and uninstalls cleanly, and both the.deband the AppImage (--appimage-extract-and-run) launch under Xvfb, listen on 127.0.0.1:7421 and draw theframe_renderedframes a realkimo-mcp(commitaf615ca) sends afterproject_set,add_track,add_text. Unsigned draft; other distributions not tested.Windows spectator installer (
Kimo-Spectator_5.0.0_x64_en-US.msi): unsigned draft, built on CI runners. CI installs, launches and uninstalls it on a GitHub Windows runner (thev5.0.0tag build); not installed on a real Windows PC yet.Engine release jobs: the Linux engine tarball is glibc only for this release (the static musl build was dropped). The Windows x64 engine job failed in the first dry run in
crates/kimo-core/build.rs(MSBuild rejectscmake --build ... -- -j1). This release switches tocmake --build ... --parallel 1and links the C++ runtime per target (libstdc++on Linux,libc++on macOS, nothing on MSVC); the Windows engine job then passed on CI (thev5.0.0tag build) and its zip and setup.exe are attached. Not run on a real Windows PC yet; macOS not built.Windows engine build from clone: not run here.
Third-party licences for the spectator app: THIRD_PARTY.md (five MPL-2.0 crates from the Tauri stack and the LGPL libraries bundled in the AppImage, both decision pending).
Per-feature limits and change notes: docs/DEV_NOTES.md. Feature tiers: FEATURES.md. Plans: ROADMAP.md.
Work in progress (feature branches)
Coherent fields (feature-branch WIP)
This feature branch adds original raw 2D Perlin/simplex fields, analytic gradients, MCP point sampling and an animatable noise effect. It is not part of the finalized v3 release. Compilation, numeric tests, warning delta and real 1080p visual sign-off are pending. No quality or production-readiness claim is made. See the noise plan and verification commands. The next WIP field units add explicit Euclidean Worley F1/F2, FBM, domain warp and 2D potential curl. These are independently selected raw operators, not presets. They are also uncompiled and unrendered here. See field units.
Camera math primitives (feature-branch WIP)
Explicit-pose projection and camera-space near-plane clipping are drafted as raw MCP math tools. Uncompiled, unrendered, not integrated into the legacy renderer. They do not yet fix existing Scene3D output. See camera WIP.
Raw UV math (feature-branch WIP)
Uncompiled original push/radial coordinate primitives, MCP-callable but not a rendered transition. See UV WIP. No visual sign-off.
Particle simulation primitive (feature-branch WIP)
Uncompiled raw fixed-step 3D trajectory + force/swept-plane math. No emitter or renderer adapter yet, no visual sign-off. See particle WIP.
Contributing and the README rule
The README is updated with every product change. If a change adds, removes or regroups tools, or ships a new proof, the same commit updates this file.
License
MIT licensed. See LICENSE. Third-party components of the spectator app: THIRD_PARTY.md.
Available Tools
17 toolsanimateD
Properties, keyframes and curves, expressions, motion paths and presets, camera, blend, corner/mesh... [32 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden and delivers none of it. With 32 hidden actions, it is unknown whether calls mutate the project, require a selection, or are irreversible, and no auth, rate, or side-effect information is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but brevity here reflects under-specification rather than economy of expression. The truncated ellipsis list front-loads topics instead of the operation, so a reader gets no actionable payload from the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 32-action dispatcher with 0% schema documentation, no annotations, and no output schema requires far more description than this. Nothing tells the agent how to select one of the 32 actions or what a call returns, leaving the definition unusable without trial and error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters: 'action' is a bare string with no enumerated values and 'args' is an untyped free-form object. The description only discloses the count ('[32 actions]') and the topical buckets, which hints at the action space but names no valid action value or arg shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The text is a topic list ('Properties, keyframes and curves, expressions, motion paths...') with no verb and no statement of what the tool actually does. It gestures at the animation domain, which tentatively separates it from siblings like color_grade or audio, but an agent cannot tell from this whether the tool reads, creates, edits, or applies animation data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use instruction, no prerequisite, and no named alternative among the many siblings. The only implicit signal is the subject-matter list, which suggests this is the tool for animation questions, but nothing tells the agent when to prefer it over timeline or effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audioC
Audio levels, effects, pan, ducking, loudness normalize, beat detection, audio export. [17 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. The bracketed '[17 actions]' does hint that this is a multi-action dispatcher, but the description says nothing about which actions mutate or destroy data (normalize, ducking), which are read-only (levels, beat detection), or whether audio export writes files — critical for a tool whose domain includes destructive edits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded line with no filler; the capability list is dense and scannable. It is efficient, though the list substitutes for the action enumeration an agent actually needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-action dispatcher with an unenumerated free-form 'action' string, an untyped 'args' object, no annotations, and no output schema, the description is grossly insufficient — an agent cannot reliably determine a valid action value or argument shape before invoking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the two parameters ('action' string with no enum, 'args' as a bare untyped object) are entirely undocumented. The description's topic keywords ('pan', 'ducking', 'normalize', 'beat detection', 'export') give a faint hint at the action space but provide no mapping to valid 'action' values and no shape for 'args'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource domain (audio) and enumerates capability areas — levels, pan, ducking, normalize, beat detection, export — which distinguishes it from siblings like color_grade, masks, or vfx3d. However, it never states a verb or the actual operation the tool performs, and the '[17 actions]' marker signals a dispatcher whose action names are not listed, so the agent cannot tell what a call concretely does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites, and no exclusions. The capability list only weakly implies usage contexts (e.g., 'export' implies a finishing step), but the agent gets no guidance on choosing this over the separate 'effects' or 'output' siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
color_gradeC
Grading: primaries, curves, wheels, node graphs, LUTs, CDL, match grade, white balance, shared... [22 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses nothing: not whether operations mutate the project, whether they are reversible, whether node graph or LUT changes persist, or what permissions are needed. For a mutation-oriented grading tool this is a total transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but brevity here is under-specification rather than conciseness: the '[22 actions]' ellipsis replaces information the agent needs. The front-loaded 'Grading:' label is the one structurally sound element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 22-action dispatcher with a freeform nested args object, no annotations, no output schema, and no enum is a high-complexity surface, and the description supplies only a keyword stub. It is far below what an agent needs to invoke the right action with the right arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and 'action' is a bare string with no enum, so the partial action list in the description is the only hint at valid values – but it shows roughly 9 of 22 actions and never explains the nested 'args' object. The agent is left guessing both the action vocabulary and its payload shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The colon-list identifies the domain (color grading) and enumerates sub-operations – primaries, curves, wheels, node graphs, LUTs, CDL, match grade, white balance, shared – which is enough to distinguish it from color_science and scopes siblings. However there is no explicit verb framing, and the enumeration is truncated to a generic '[22 actions]' placeholder, so the actual scope is only partially visible.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement about when to use this tool rather than color_science, scopes, or effects, and no prerequisites or exclusions. The agent must infer that grading work belongs here purely from the word 'Grading'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
color_scienceD
Color pipeline: ACES, OCIO, HDR, float and high bit depth, color management, delivery checks and... [18 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses almost nothing: no indication that action values trigger wildly different (potentially mutating) behaviors, no side effects, no permission/render requirements. The only signal is the passing mention of 'delivery checks', which is insufficient for an untyped multi-action dispatcher.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but 'and... [18 actions]' is a truncated fragment rather than a front-loaded summary, so brevity comes from omission rather than economy. There is no lead sentence establishing what the tool does before listing topics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter multiplexed tool with 0% schema coverage, no enums, no annotations, and no output schema, the description omits everything an agent needs: which actions exist, what they do, and what args to pass. It is not remotely complete for the complexity of the interface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 2 parameters (a required opaque 'action' string plus a nested 'args' object). The description provides no valid action names, value syntax, or meaning for args, so an agent cannot fill in the parameters without external knowledge. Zero compensation for a 0% coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a topic enumeration (ACES, OCIO, HDR, float/bit depth, delivery checks) with no verb or statement of what the tool actually does. It hints at the color domain but never says 'grade', 'convert', 'validate', or similar, so an agent cannot form a clear purpose from it. It is closer to restating the name's theme than stating a capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no reference to alternatives even though siblings like color_grade and scopes clearly overlap in this space. The elided '[18 actions]' gives no routing information for choosing among them. This is effectively no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
effectsC
Video effects, transitions, adjustment layers, effect masks and effect presets. [15 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing beyond the domain list. It does not say whether actions mutate the project, whether they are reversible, what permissions are needed, or how errors surface for an unknown action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short and the domain list is front-loaded, which is good, but this reads as under-specification rather than genuine concision. The bracketed action count is a useful hook that is never followed through.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-action multiplexed tool with no annotations, no output schema, an undocumented nested args object, and zero schema description coverage, the description is far too thin. An agent has no basis for choosing an action value or shaping the args payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the required 'action' string has no enum, so the agent must guess the 15 valid action names. The description's '[15 actions]' note signals the count but enumerates none of them, and the nested 'args' object is entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the resource domain (video effects, transitions, adjustment layers, effect masks, presets) and discloses that it is a 15-action dispatcher, but it never states a verb or names any of the 15 actions. It also fails to distinguish itself from overlapping siblings such as masks, vfx3d, and color_grade, so an agent cannot confidently route among them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance at all. With siblings like masks, vfx3d, and color_grade plausibly covering adjacent territory, the absence of any routing rule is a real gap rather than a minor omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
graphicsD
Shapes, bezier paths, shape modifiers, layer styles, HUD frames, counters, detection boxes. [20 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no mutation/destructive characteristics, no permission or licensing needs, no indication that this is a multi-action dispatcher requiring a specific action value. The only hint at behavior is the bracketed action count, which is unexplained metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but brevity here comes from under-specification rather than efficiency, and the dangling "[20 actions]" marker is an artifact rather than useful content. There is no front-loaded verb or scope statement to anchor the list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 20-action dispatcher with 0% schema coverage, no enums, a nested args object, and no annotations or output schema is essentially un-callable from this description. An agent would have to guess valid action values and the shape of args entirely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only guidance is the cryptic "[20 actions]" tag; the required action string is never enumerated, so the agent cannot know which of the 20 values are valid. The nested args object is entirely undocumented in both schema and description, leaving no way to construct a correct call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a bare list of nouns ("Shapes, bezier paths, shape modifiers, layer styles, HUD frames, counters, detection boxes") with no verb and no statement of what the tool actually does. It gives a topical hint that this is the graphics-primitives area, distinct from siblings like text/audio/masks, but an agent cannot tell what operation it performs. The "[20 actions]" tag implies a dispatcher without saying so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing help relative to the many siblings (masks, text, effects, vfx3d). An agent gets zero signal on when to pick graphics over an adjacent tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kimo_describeC
Full description and argument schema of one action (action) or the action list of a group (group).
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | ||
| action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses almost nothing: no indication of read-only safety, return format, authentication needs, or limits. It only implies two lookup modes (action vs group) without stating what each returns in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is tight, though the parenthetical restatement of the parameter names is mildly redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description says little about the returned structure, the meaning of 'group', or valid identifiers. For a discovery/meta tool that an agent depends on to proceed, this leaves substantial gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does clarify that 'action' selects a single action's description+schema while 'group' yields a group's action list, which adds meaning beyond the bare string types. It still does not say whether the two are mutually exclusive, what valid values look like, or what happens if both/neither are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns a full description/argument schema for an action or the action list for a group, which is a reasonably specific verb+resource. However, it does not differentiate itself from the many sibling tools (e.g. search_tools, kimo_enable_group) that also relate to tool discovery, and the roundabout phrasing 'full description and argument schema of one action' takes effort to parse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus search_tools or kimo_enable_group, nor when to use the action path versus the group path. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kimo_enable_groupC
List every tool of a group individually from now on (the server sends notifications/tools/list_changed).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real traits: the change persists ('from now on') and the server emits notifications/tools/list_changed. However, it says nothing about reversibility (is there a disable counterpart?), idempotency, or error behavior for an invalid group name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the effect front-loaded and the mechanism in a parenthetical; no filler. Slightly terse given the concepts ('group') it assumes the reader already knows.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A stateful, side-effecting tool with no annotations, no output schema, and an undocumented required parameter. The description should at minimum define what a 'group' is and how its name is obtained, and note whether the setting can be undone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required 'name' parameter has no description. The description only alludes to 'a group', leaving the agent to guess whether name is a group identifier, a display name, or a path.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys the effect of enabling a group — its tools are listed individually going forward — but the phrasing 'List every tool of a group individually from now on' reads like an instruction to the agent rather than a description of a stateful toggle, so the verb does not match the name 'enable_group'. It is distinguishable from siblings like search_tools, but only indirectly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus alternatives such as kimo_describe or search_tools, nor any prerequisite or context for calling it. The agent must infer the trigger condition entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
masksD
Masks, roto, track mattes, matte refinement and keying. [16 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing about whether operations mutate the project, what permissions or clip selection is required, reversibility, or rate limits. '[16 actions]' signals breadth but hides which 16 actions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and the '[16 actions]' count is front-loaded and informative, but its brevity reflects under-specification rather than efficient conciseness. It omits everything needed to select and invoke a 16-action dispatcher.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with a nested, undocumented args object, no action enum, no output schema, and no annotations, the description is far too thin. Nothing explains how the 16 actions are named or dispatched, so the definition cannot be used reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters: 'action' is an unconstrained string with no enum, and 'args' is an undescribed nested object. The description adds no information about valid action values or argument shape, so an agent cannot construct a call correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The text is a noun list of adjacent subtopics (masks, roto, track mattes, matte refinement, keying) with no verb describing what invoking the tool actually does. It partially expands the bare name 'masks' and hints at scope versus siblings like tracking or vfx3d, but gives no indication of the 16 operations it dispatches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, no conditions, and no named alternatives among siblings such as vfx3d, tracking, or effects. The topic list only loosely implies a domain, leaving the agent to guess whether a matte or keying task belongs here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outputC
Render a frame or export video, GIF, alpha, presets, EXR/TIFF, LUTs, camera solves. [40 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. Exporting video/GIF/EXR/TIFF writes files and camera solves are expensive compute-bound operations, but the description says nothing about side effects, output locations, overwrite behavior, processing time, or required project state. Format names add only surface-level context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single compact fragment with no filler, which is efficient, but the comma-separated feature dump is not front-loaded around the action/args contract and reads as an unordered keyword list rather than structured guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 40-action dispatcher with a free-form string action, an unbounded nested args object, no annotations, and no output schema, the description is far too thin. It should at minimum enumerate the action identifiers and the required shape of args; without that, correct invocation is guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and 'action' is an unconstrained string with no enum, while 'args' is an opaque nested object. The description lists some output formats but never enumerates the 40 valid action values or explains how args map to a given action, so an agent cannot construct a correct call from either source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives verbs and resources ('Render a frame', 'export video') and signals breadth with '[40 actions]', so the agent knows this is a rendering/export dispatcher. However, it never says what a single 'output' call actually does or how the 40 actions divide the space, and the tool name 'output' on its own would be meaningless without it. It is clear enough to categorize but not to distinguish precisely from siblings like 'color_science' or 'vfx3d'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus siblings (color_grade, vfx3d, project) and no exclusion criteria. '[40 actions]' implies the caller must pick an action, but neither the description nor the schema offers the action list, so no routing guidance is actually provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projectC
Project settings, media import, save/load, undo/redo, inspect the project. [35 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the entire behavioral burden. It hints that mutations are included (save/load, undo/redo) but never states reversibility, permission requirements, side effects, or which actions are read-only versus destructive. For a 35-action dispatcher with zero annotation coverage, this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded with the resource name, so it is not bloated. But the enumerated coverage list consumes its length without conveying actionable detail (valid actions, usage), so it reads as under-specification rather than tight concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dispatcher exposing 35 actions with no enum, no annotations, no output schema, and 0% parameter documentation, the description leaves an agent unable to determine which action strings exist or what any of them do. Almost nothing needed to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, the required 'action' string is a freeform value, and 'args' is an untyped nested object. The description never enumerates or exemplify valid action values, which is the single most important parameter detail for calling this tool. '[35 actions]' acknowledges the gap instead of filling it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource domain ('project') and enumerates broad areas it covers (settings, media import, save/load, undo/redo, inspect), so an agent knows this is the project-level namespace. However, it never states what the tool actually does at the action level, and the '[35 actions]' note flags breadth without resolving it. Differentiation from siblings is only by domain name, not by function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the many siblings (timeline, effects, audio, etc.), nor on how to select among the 35 actions. The category list implies scope but gives no conditions, prerequisites, or routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scopesC
Scopes and measurement: waveform/vectorscope, exposure analysis, false color, gamut checks... [12 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It hints at analysis (suggesting read-only) by naming measurement capabilities, but never states side effects, whether any of the 12 actions mutate state, permission requirements, or output behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the domain, which is good. But the trailing ellipsis and bracketed '[12 actions]' placeholder are cryptic filler that do not earn their place by conveying actionable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool (12 actions), with a required enum-like 'action' string, a nested 'args' object, 0% schema coverage, no annotations, and no output schema, this description is grossly inadequate. It omits the action list, argument shapes, and return behavior an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no parameter information at all. The '[12 actions]' placeholder hints that the required 'action' string has twelve possible values, yet none are listed, and the nested 'args' object is entirely unexplained, so an agent cannot construct a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource domain (scopes/measurement) and lists example capabilities (waveform/vectorscope, exposure, false color, gamut), which distinguishes it somewhat from siblings like color_grade. However, it is a noun-phrase label with no explicit verb and never states what the tool actually does (return measurements? apply corrections?), so the purpose is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no mention of alternatives such as color_grade or color_science, which plausibly overlap. The agent must infer usage from the domain name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toolsB
Find a tool, effect or transition by keywords. Returns ranked matches with required args and how to call each. Call any listed name directly.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | ||
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose return behavior ('ranked matches with required args and how to call each'), which is useful and non-obvious. It omits whether results are capped, how ranking works, and what a zero-match response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler, and the core purpose is front-loaded. Slightly more could be said without bloat, but nothing present is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description is right to summarize the return shape, and it does. It remains incomplete on result limits, the group scoping parameter, and the relationship to the sibling tools it is presumably searching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only implicitly maps 'keywords' to the required query param. The group and limit parameters are undocumented in both the schema and the description, so neither source tells the agent how to scope a search or control result count.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and multi-resource scope: 'Find a tool, effect or transition by keywords.' An agent can tell this is a discovery/meta tool distinct from the functional siblings (effects, masks, audio), though it never explicitly says it searches the sibling catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call any listed name directly' implies a search-then-invoke workflow, which is genuine guidance. But there is no statement of when to use this versus paging through effects/timeline/kimo_describe directly, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
textD
Text, titles, text animators and paths, captions, subtitles, fonts, transcription. [23 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided and the description gives no behavioral disclosure: no read/write profile, no side effects, no auth or rate-limit notes, and no indication of what the 23 actions do. For a dispatcher tool with zero annotation coverage, the description carries the full burden and provides none of it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The line is short and wastes no words, but its brevity is under-specification rather than efficiency. It lists topics without giving the verb, action set, or parameter meaning, and reads as a flat fragment rather than front-loaded actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-action nested dispatcher with no annotations, no output schema, and 0% schema coverage, the description is far from sufficient. It omits action names, parameter semantics, and return behavior, leaving the agent unable to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both action and args, and the description only hints that 23 actions exist without naming a single one. It does not document valid action values, the shape of the nested args object, or per-action parameters. An agent cannot construct a correct call from this description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates resource domains (text, titles, captions, fonts, transcription) but supplies no verb or statement of what the tool does to them. It implies a multi-action dispatcher via '[23 actions]' yet an agent cannot tell whether it creates, edits, or queries text. It is distinguishable from siblings only by topic, not by function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no alternatives, and no mention of the action parameter or when to choose this over graphics, animate, or effects. The agent is left to infer usage entirely from the domain list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timelineC
Tracks and clips: add, move, trim, split, ripple/roll/slip/slide, speed, markers, multicam, silence... [37 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing. It does not say that actions like add/move/trim/split are destructive edits, whether they are undoable, whether any action is read-only, or what state the tool requires. The '[37 actions]' note is a structural hint, not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short line, which is efficient, but it is a fragment rather than a front-loaded purpose statement, and the trailing ellipsis plus '[37 actions]' placeholder consumes space without conveying actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 37-action dispatcher with no output schema, no annotations, 0% parameter coverage, and a free-form nested args object, the description is far too thin. An agent cannot determine which action strings are legal or what arguments each expects, making correct invocation essentially guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the nested 'args' object is entirely undocumented. The description implies an action vocabulary (add, move, trim, split...) but never states that these are the valid values for the required 'action' parameter or explains the shape of 'args', so it only marginally compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (timeline tracks and clips) and enumerates operation types (add, move, trim, split, markers, multicam), which does distinguish it from siblings like effects, audio, or project. However it never states a clean verb+resource purpose sentence and leaves 37 actions opaque, so the agent knows the domain but not the scope of a given call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g. an open project/sequence), and no routing to sibling tools for related work like audio or effects. The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trackingC
Point/planar/mesh/feature tracking, stabilize, camera solve, lens undistort, track validation and... [25 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
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 says nothing about side effects, permissions, reversibility, or output format, only naming a few operations. This is a critical gap for a tool that likely modifies project state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but poorly structured: it ends with an unhelpful meta-truncation '[25 actions]' and lacks a clear front-loaded statement of the tool's overall function. The fragment does not earn its place as a useful definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dispatcher with 25 actions, a nested 'args' object, no output schema, no annotations, and 0% schema coverage, the description is far too sparse. It provides no action enumeration, invocation guidance, or behavioral context, leaving the agent unable to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, and the description only names a handful of possible actions without explaining the required 'action' string or the nested 'args' object structure. It adds minimal value beyond the bare schema and does not compensate for the complete lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description lists several tracking-related operations (point/planar/mesh/feature tracking, stabilize, camera solve, lens undistort, track validation), which conveys the domain and distinguishes it from unrelated siblings like audio or color_grade. However, it never states what the tool does as a whole (e.g., 'perform tracking operations') and the truncated '[25 actions]' leaves the scope unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus siblings such as vfx3d or effects, nor any prerequisites, alternatives, or exclusions. The description is purely a capability list with zero routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vfx3dD
3D scenes, lights and materials, relight, particles, shard bursts and fracture glass. [15 actions]
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden and discloses nothing: not whether operations are read-only or mutate the project, not whether they are reversible, not what permissions or render dependencies exist. The keyword list conveys zero 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and scannable, with the domain keywords front-loaded. But it is a bare noun list with no verb or dispatch structure, and the bracketed '[15 actions]' is metadata noise rather than useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-action dispatcher over a nested args object, with no annotations and no output schema, the description is nowhere near complete. An agent cannot determine the valid action values, the arg shape, or the effect of any operation from this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, and the nested 'args' object is entirely undocumented. The description neither explains that 'action' selects one of 15 operations nor hints at what 'args' must contain, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a topical domain — 3D scenes, lights/materials, relight, particles, shard bursts, fracture glass — so an agent can tell it apart from siblings like color_grade, audio or tracking. However, there is no verb and no statement of what the tool actually does (create, apply, render?), and it never says it is a 15-action dispatcher. It reads as a keyword bag, not a purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is given. Borderline cases with the effects, graphics and masks siblings are unaddressed, and the '[15 actions]' hint signals a dispatcher without ever naming the actions that would let an agent choose this tool over another.
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.
17 tool updates
v0.1.0- First observed
animate - First observed
audio - First observed
color_grade - First observed
color_science - First observed
effects - First observed
graphics - First observed
kimo_describe - First observed
kimo_enable_group - First observed
masks - First observed
output - First observed
project - First observed
scopes - First observed
search_tools - First observed
text - First observed
timeline - First observed
tracking - First observed
vfx3d
TDQS
Scored across 17 tools
Each tool maps to a broad domain, so an agent can generally choose correctly. Some boundaries blur between color_grade, color_science, and scopes, and between effects, masks, and tracking, but the descriptions provide enough signal.
Most tools use lower_snake domain names with no verbs, which is predictable. Minor deviations are vfx3d lacking a separator and helper tools using a kimo_ prefix while core group tools do not.
17 group tools is slightly above the typical 3-15 range, but each groups a large feature area with dozens of actions, so the surface is not redundant. It is reasonable for a full editing/compositing suite, though a few groups could possibly be merged.
Coverage spans project management, timeline editing, animation, effects, masks, audio, text, graphics, 3D/VFX, tracking, grading, color science, scopes, and output, plus search/describe/enable helpers. No obvious lifecycle gap exists for a video editing suite.
Maintenance
Related MCP Connectors
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
Hosted MCP tools for FFmpeg-style video and audio processing through FFMPEG API.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA basic MCP server implementation for testing purposes. Communicates via stdio and is designed to work with MCP-compliant clients.-
- FlicenseAqualityDmaintenanceMCP server for taking Linux / Wayland screenshots via grim and slurp.227 PyPI-
- AlicenseAqualityBmaintenanceEnables LLMs to perform FFmpeg operations like clipping, merging, extracting audio, adding subtitles, and transcoding videos via a set of tools exposed as an MCP server.58MIT
- FlicenseAqualityDmaintenanceMCP server that wraps MiniMax platform APIs (speech, video, image, music, and file management) as tools over stdio, enabling natural language interaction with MiniMax's AI services.161-