cocut
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cocutadd a lower third at 0:10 for Ada Lovelace, role Analyst"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Cocut
An open-source video editor where you and an AI agent edit the same timeline.
Cut, trim, layer, caption and mix in the browser while Claude Code, Codex or any MCP client edits the same project. Every change, yours or the agent's, appears live, is labelled with who made it, and can be undone. Motion graphics are generated by a built-in engine and can be split into separately editable layers.

Why
Agents are good at precise, repetitive, describable edits: "make every caption 52px", "shift everything after the chart by half a second", "add a lower third at 0:10". People are good at taste: what looks right, what feels late. Cocut puts both on one timeline:
One source of truth. The edit is a plain
project.json. The editor, thecocutCLI and the MCP server all read and write it, atomically and versioned.Live. When the agent changes something, the timeline updates in your browser within a quarter-second. Agent clips are marked orange.
Undoable. Every change from anyone is a snapshot.
⌘Zundoes the agent's last step as easily as your own.
Related MCP server: Valmera MCP Server
Features
Editing
Video, image, generated, audio and text tracks; any number of each. The first track is drawn on top.
Drag media from the bin, or drop files anywhere to import. Move clips, including across tracks, and trim their edges. Split at the playhead, delete, ripple delete, copy and paste. Snapping to clip edges, the playhead and markers.
Marquee select: drag across empty space.
⌘A, shift- or cmd-click, ⌥-click selects a clip and everything after it on its track.Batch edit: with many clips selected, the inspector edits them all, showing mixed where values differ. "Make all look like the first", group and ungroup (
⌘G), nudge, and find & replace across text.Per-clip fades, opacity, position, scale and speed. Audio gain, fades, ducking under a voice track, and an optional musical ending, where the track lands on a downbeat and ends on a hit.
Text clips with size, width, alignment, colour and word-by-word highlight. Drag text directly on the picture.
Thumbnails and waveforms on the timeline, markers, zoom, and full keyboard control (
?lists the shortcuts).English and 中文 interface.
Generated motion graphics
Built-in templates:
title,numbers(count-up with a grid of squares),lowerthirdandbars. Each is a small JavaScript file incocut/engine/templates/, so adding one is easy.Split into editable elements. A generated clip can be re-rendered as separate layers: background, graphics, counters and text, each with transparency (VP9 + alpha) on its own track. Its text can come back as native text clips you can retype, restyle and retime.
Agents
In the editor: the AI tab sends a request to Claude Code (headless
claude -p) or Codex (codex exec). Its commands and replies stream into the chat as it works.From a terminal: any agent can use the
cocutCLI; see AGENTS.md.Over MCP:
cocut mcpexposes the editor as tools to Claude Code, Codex and other MCP clients.
Export
H.264 + AAC MP4 at −14 LUFS, rendered by ffmpeg with exactly the same layout rules as the preview.
Install
Requires Python 3.9+, ffmpeg on your PATH (with libvpx-vp9 for transparent layers) and Chromium for Playwright (motion graphics).
git clone https://github.com/csy2443470971-ui/cocut && cd cocut
pip install -e . # or: pip install numpy scipy soundfile pillow playwright
python3 -m playwright install chromium
pip install librosa # optional: musical endings for music clipsQuick start
cocut new my-video --size 1920x1080 # or: python3 -m cocut.demo (builds a demo project)
cocut serve # → http://localhost:8770Projects live in ./cocut-projects/ by default (set COCUT_WORKSPACE to change it).
Working with agents
Claude Code, inside the editor: open the AI tab, type what you want, and press ⌘↩. Requires the claude CLI.
Claude Code over MCP:
claude mcp add cocut -- python3 -m cocut.cli mcpCodex over MCP (~/.codex/config.toml):
[mcp_servers.cocut]
command = "python3"
args = ["-m", "cocut.cli", "mcp"]Any agent with a shell:
cocut show # timeline with clip ids
cocut set size=52 y-=0.03 --kind text --by claude # batch edit every text clip
cocut gen lowerthird V2 10 --params '{"name": "Ada Lovelace", "role": "Analyst"}'
cocut layers <clip> --text-clips # split a generated clip into editable elements
cocut shift 0.5 --range 7: --by codex # move everything after 7 s
cocut undococut -h lists every command and the selector flags (--ids, --track, --kind, --range, --text, --group, --author).
How it works
browser editor ──┐ ┌── cocut CLI (people, Claude Code, Codex …)
├──► project.json ◄───┤
MCP clients ─────┘ (atomic, versioned) └── server: watches the file → pushes changes to every open editor
│
export.py → ffmpeg → MP4 engine/ → headless Chromium → generated clips / layersMore detail in docs/architecture.md.
Project format
{
"meta": { "name": "demo", "width": 1920, "height": 1080, "fps": 30, "version": 12 },
"tracks": [ { "id": "T1", "kind": "text", "name": "Text" }, { "id": "V1", "kind": "video", "name": "Video" },
{ "id": "A1", "kind": "audio", "name": "Voice", "role": "voice" } ],
"clips": [ { "id": "c1a2b3", "track": "V1", "kind": "mg", "src": "assets/generated/g1/title.mp4",
"start": 0, "in": 0, "out": 3, "opacity": 1, "fadeIn": 0, "fadeOut": 0, "x": 0, "y": 0, "scale": 1, "by": "human" },
{ "id": "c4d5e6", "track": "T1", "kind": "text", "text": "Hello", "start": 0.3, "dur": 2.4,
"x": 0.06, "y": 0.86, "w": 0.88, "size": 58, "color": "#ECE6EA", "karaoke": true, "words": [ { "w": "Hello", "t": 0.5 } ], "by": "claude" } ],
"markers": [ { "t": 3, "label": "Numbers" } ],
"log": [ { "at": 1760000000.0, "by": "claude", "what": "set size on 3 clip(s)" } ]
}Status
Version 0.1. The editing model, the CLI, MCP, layer splitting and export are tested end to end. Still to come:
transitions beyond crossfades
keyframed properties
audio fades drawn on clips
multi-user (several people at once)
previewing a music ending before you export
Contributions are welcome; see CONTRIBUTING.md.
License
MIT. Any music, footage or fonts you put into a project keep their own licences.
Available Tools
4 toolsassetsC
Media in the project that can be placed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but discloses nothing: not whether invocation is read-only, what it returns, whether it requires a project context, or what 'can be placed' implies operationally. The phrase 'can be placed' weakly hints these are usable resources, but no concrete behavior is stated.
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, front-loaded sentence with no filler, which is appropriate size-wise. However, its brevity comes from under-specification rather than from an efficient statement of a complete idea.
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 parameterless tool the description is the only source of meaning, yet the agent learns neither the return shape nor what invocation does. With no output schema and no annotations, the fragment leaves the core behavior undefined.
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?
The tool takes zero parameters, so there is no parameter semantics to document; baseline 4 applies. The empty schema is consistent with the description, which also implies no inputs.
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 fragment ('Media in the project that can be placed') with no verb, so the agent cannot tell whether the tool lists, retrieves, or selects assets. It adds a qualifier beyond the name 'assets' but does not distinguish this tool from siblings help, show, and run.
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, prerequisite, or alternative is mentioned. There is no indication of how 'assets' relates to 'show' or 'run', so the agent must guess when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
helpC
Every cocut command and the selector flags.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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: not whether output is a plain list, formatted usage text, or per-command detail. It is a low-risk read-only style tool, but with zero annotation coverage the absence of any output/behavior statement is a real 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?
A single short sentence fragment with no padding, and the key content is stated immediately. It loses a point only because the fragment lacks a verb, making it terse to the point of grammatical incompleteness rather than efficiently structured.
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?
With no annotations, no output schema, and no parameters, the description is the only source of information, and it leaves the return shape and scope of 'every cocut command' unexplained. For a discovery/help entry point that agents rely on to route to the right tool, this is under-specified.
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?
The schema declares zero parameters, so there is nothing for the description to document and the baseline of 4 applies. The mention of 'selector flags' is content of the help output, not an input, so it adds no parameter meaning either way.
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 fragment names the resource content ('every cocut command and the selector flags') but supplies no verb, so it is unclear whether the tool lists command names, prints usage text, or returns documentation. 'Selector flags' and 'cocut command' are undefined jargon that the agent cannot resolve from this definition or its siblings.
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 call this versus the siblings 'show', 'assets', or 'run'. A help tool is largely self-explanatory, but nothing here confirms that this is the discovery entry point or when an agent should prefer it over just invoking a command directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
runB
Run any cocut command (without the leading 'cocut'), e.g. "text 'Hello' T1 2 3 --y .8", "set size+=4 --track T1", "split 12.5", "gen title V2 0 --params '{"text":"Hi"}'", "layers c1a2b3 --text-clips", "undo". See help.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | the cocut command line, without 'cocut' |
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 discloses that arbitrary commands are executed, but does not mention side effects, whether commands can modify or destroy project state, permissions required, output format, or error behavior. Examples like 'undo' and 'split' imply mutation but safety context is absent.
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?
Front-loaded with the core action, followed by illustrative examples. The single sentence with examples is efficient, though the inline examples make it slightly denser than necessary.
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 generic command executor with no output schema, the description explains command formatting and points to `help`. However, it omits return-value behavior, error handling, and safety context, leaving gaps an agent would need to infer or test.
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 100% and already describes the single `command` parameter. The description adds meaningful value with concrete examples of command syntax ('text ...', 'set size+=4 ...', 'undo'), clarifying format beyond the schema's minimal 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?
States a specific verb and resource: 'Run any cocut command'. The examples clarify the scope of commands. It points to the `help` sibling for command help, but does not explicitly differentiate itself from `show` or `assets` beyond the generic execution role.
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?
Usage is implied through examples and the note to omit the leading 'cocut'. The 'See `help`' pointer routes agents to a sibling for command help, but there is no explicit guidance on when to use `run` versus `show` or `assets`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
showA
The timeline: tracks, clip ids and times. Call this first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says what data is shown and to call it first; it does not state whether the operation is read-only, whether it requires permissions, or any side effects.
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 two short fragments with no wasted words. It front-loads the resource and then adds the ordering instruction.
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 simple tool with no parameters, no output schema, and no annotations, the description gives the return contents and usage order. It remains incomplete on behavioral traits such as read-only safety and return format, which leaves gaps for an agent deciding how to call it.
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?
The tool has zero parameters, so the baseline is 4. The description does not need to compensate for missing 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 names the resource ('the timeline') and its contents ('tracks, clip ids and times'), so an agent can tell it surfaces timeline data. However, it provides no verb and does not differentiate this tool from siblings such as help, assets, or run.
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?
The phrase 'Call this first' gives explicit ordering guidance, indicating this tool should be invoked before others. It does not name alternatives or state when not to use it, but the sequencing context is clear.
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.
4 tool updates
v0.1.0- First observed
assets - First observed
help - First observed
run - First observed
show
TDQS
Scored across 4 tools
Each tool has a distinct primary role: help for command discovery, show for timeline state, assets for media inventory, and run for executing commands. The broad run tool could theoretically duplicate show/assets/help, but the descriptions frame those as dedicated convenience tools, leaving only minor boundary ambiguity.
All four names are single lowercase tokens, so casing and style are consistent and readable. They do not follow an action-object verb_noun pattern, mixing noun-like (help, assets) and verb-like (show, run) names, but this is a minor deviation for a CLI wrapper.
Four tools is well-scoped for a CLI-style wrapper: three small helpers plus one universal command executor. No tool feels redundant, and the count avoids bloating the surface with one tool per command.
Because run can execute any cocut command, the surface provides a universal escape hatch for timeline edits, generation, layering, splitting, and undo. help exposes command syntax, while show and assets cover timeline and media inspection, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
Compose, edit and render video with your AI agent. Turn footage into finished edits with content-aware reframing, word-timed captions and motion graphics. Hosted MCP with OAuth sign-in; cloud processing uses credits.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Related MCP Servers
- AlicenseAqualityBmaintenanceGive any MCP client a real video editor — 32 typed tools over ffmpeg, Whisper and MediaPipe, plus an optional local UI with a drag-and-drop timeline.38MIT
- AlicenseNot gradedqualityAmaintenanceAn agentic AI video editor for Claude. It enables editing real video through MCP: cutting, captioning, reframing, scoring, and exporting finished MP4s from actual footage.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for OpenChatCut, enabling AI agents to create, edit, and export fully editable video projects through a real multitrack timeline and agent-native tools.1AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables AI agents and MCP clients to programmatically edit video projects on a local desktop editor, with 119 tools for multitrack editing, effects, captions, audio, and batch auto-editing, producing reviewable and reversible real timeline edits.AGPL 3.0