lc-editor
Renders video output for the editor's timeline. The MCP server builds edits through tool calls (clips, layers, captions, effects, music, beat sync) and ffmpeg/ffprobe on PATH perform the actual encoding and inspection, producing 9:16 reels and preview stills.
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., "@lc-editorCreate a new 9:16 reel, add a clip with captions, and export it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lc-editor
A local video editor for a computer use agent, made for grokbot. You drive the cut from an MCP client; there is no timeline UI to click. lc-editor serve --web opens a localhost desk for previewing and labeling clips. You send tool calls; ffmpeg renders the file.
Built for short 9:16 reels and SDR YouTube upload masters. project_create(preset="youtube") defaults to 1920×1080 and export(preset="youtube") writes a verified H.264/AAC youtube.mp4 plus upload metadata and optional SRT captions. Captions are stroke-and-shadow text, never a box. Sound is the owner's call, not the editor's: ask before assuming music or natural audio. This version composites multiple layers, applies a small effect pack, expands templates into ordinary timeline items, and can mix owner-imported music with beat sync. Engine rules live in specs/craft.md. Karachi episode structure is an optional preset, not the default.
Needs
Python 3.11 or newer
ffmpeg and ffprobe on your PATH
Related MCP server: melt-7 MCP Server
Install
From a clone of this repo:
pipx install .pip install . works too. pipx keeps the app in its own env and puts lc-editor on your PATH.
From GitHub:
pipx install git+https://github.com/uzairayed/lc-editor.gitRun
lc-editor serve --project ./my-reel--project defaults to ./reel if omitted. --web starts the labeling desk on 127.0.0.1:8765. Label writes go through the same MCP tools; the page does not edit the timeline.
lc-editor version
lc-editor doctor
lc-editor doctor --project /absolute/path/to/projectversion prints the package version. doctor checks Python 3.11+, the resolved lc-editor binary on PATH, ffmpeg and ffprobe, the MCP tool count from TOOLS, and that project_create / import_file / import_folder / clip_add / export exist. It always prints copy-paste Grok Bot / Cursor MCP JSON (command + args + env). Optional --project is a dry smoke: it reports whether the project exists or can be created. It does not encode or export. This is the attach path for #29 / #32.
Cursor Marketplace Plugin
This repo is packaged as a Cursor Agent Plugin. Install the lc-editor plugin from the Cursor Marketplace. mcp.json pins command lc-editor and args ["serve"] so a pip install -U does not drop the connector.
Requirements: ffmpeg, ffprobe, Python 3.11+, and lc-editor on your PATH (pipx install . or pip install .). After pip install -U lc-editor, restart MCP: Cursor RestartMcpServers, or start a new agent session. Grok Bot: re-attach with the JSON from lc-editor doctor. There is no RestartMcpServers CLI.
The plugin includes:
plugin.json— Agent Plugins manifestmcp.json— MCP server configuration (stdio; PATH-pinnedlc-editor serve)skills/lc-editor/SKILL.md— guidance for agents on when/how to use the editor
Attach MCP (Grok Bot / Cursor / any stdio client)
The editor is not a CLI of edit commands. Agents call MCP tools (project_create, import_folder, clip_add, export, …). Those tools appear only after you attach lc-editor serve as an MCP server.
One-liner attach (stdio):
command:
lc-editorargs:
serve --project <absolute path>
Cursor / Grok Bot mcp.json (or Cursor MCP settings):
{
"mcpServers": {
"lc-editor": {
"command": "lc-editor",
"args": ["serve", "--project", "/absolute/path/to/project"]
}
}
}Restart the agent session after changing MCP config. Then confirm project_create is a callable tool. If it is not in the tool catalog, the session is not attached — run lc-editor doctor and paste the JSON it prints. Do not fall back to raw ffmpeg while doctor is green.
Persist across upgrades (#29 / #32)
MCP attach is client-side. pip install -U lc-editor does not re-register the server. Pin command to the installed binary (lc-editor doctor prints lc_editor_bin) and args to ["serve"]:
{
"command": "/absolute/path/to/lc-editor",
"args": ["serve"],
"env": {}
}Cursor mcp.json (same pin; marketplace plugin ships this):
{
"mcpServers": {
"lc-editor": {
"command": "lc-editor",
"args": ["serve"],
"env": {}
}
}
}Then restart MCP so a fresh session can call project_create without rediscovering AddMcpServer:
Cursor: RestartMcpServers (or a new agent session).
Grok Bot: re-attach (
AddMcpServerwith the doctor JSON). There is noRestartMcpServersCLI.
If lc-editor is missing from PATH, doctor still prints JSON with command: lc-editor and warns that tools will be invisible until PATH / AddMcpServer is fixed.
Windows paths
Use an absolute project path.
Forward slashes work in JSON:
C:/Users/you/my-reelBackslashes must be escaped:
C:\\Users\\you\\my-reelAfter
pipx install ., confirm the binary: PowerShellGet-Command lc-editor, cmdwhere lc-editorIf
lc-editoris not on PATH, setcommandto the full exe path (pipx usually puts it under%USERPROFILE%\\.local\\bin\\lc-editor.exe)
Verify tools appeared
lc-editor doctor—mcp_toolsshould be ~100,lc_editor_binshould be a path, andproject_create/import_*/clip_add/exportshould readok. Copy the MCP JSON it prints.lc-editor doctor --project C:/Users/you/my-reel— reports exists or can create. No encode.In the agent session,
project_createis callable. If MCP tools are missing, paste doctor's JSON, RestartMcpServers (Cursor) or re-attach (Grok Bot), and re-run doctor. Stay off ffmpeg until doctor is red.
You can also use uvx to run without installing first:
{
"mcpServers": {
"lc-editor": {
"command": "uvx",
"args": ["--from", "git+https://github.com/uzairayed/lc-editor.git", "lc-editor", "serve"]
}
}
}Cursor (manual MCP config)
If you prefer manual configuration instead of the marketplace plugin, use the attach snippet above (or the JSON from lc-editor doctor). The marketplace plugin ships the same PATH-pinned stdio server via mcp.json.
Tools
Every edit returns { ok, timeline_summary, warnings }. Illegal requests fail out loud. Same op_id twice does not duplicate. review_report must pass before export. Preview stills and the contact sheet are JPEG files on disk, not base64.
The primary track is still the gapless clips list (clip_add, trim, split, reorder, motion, transitions). motion_zoom_in / motion_zoom_out are a 12-frame scale hit (not Ken Burns). Two or more sources can share one slot (layout_add). Overlays, look, and music sit beside it:
Layers:
layer_add/layer_update/layer_remove/layer_reorder/layer_transform/layer_keyframefor timed video, image, or text.text_stylesets fade, pop, slide, or type-on.effect_add/effect_update/effect_removeattachblur,sharpen,glow,grain,vignette,lut, orcolor. Raw ffmpeg filter strings are rejected.Templates:
template_list,template_apply("editorial"|"karachi", bindings=...),template_save. Apply writes ordinary layers and look; the project stays editable.Music: default is off.
project_set(allow_music=true)is the owner opt-in. Thenimport_filea local.mp3/.wav/.m4aandmusic_add.beat_analyze,beat_edit, dry-runbeat_sync_preview, thenbeat_sync_apply. There is no stock catalog; licensing stays with the owner.Layouts:
layout_add("stack_v"|"stack_h"|"stack_v3"|"grid_2x2", panes=[...])composites two to four sources into one clip.layout_panerefocuses a cell.layout_clearflattens back to pane 0. A vista or reveal stays full-frame.Captions:
caption_addstill works and syncs to a bound text layer. No box, banner, or scrim. Process / product reels usestyle="card"(Clash Display viafont="clash").pop/karaokeare spoken-word only.Album cards:
media_card_propose/media_card_confirmlock day, role, and what's in frame before story lock. Shot overrides useshot_card_confirm.label_queue/label_get/label_readinessare the same contract the localhost labeling desk (lc-editor serve --web) uses.shoot_day_suggestclusters capture times. Folder names (before/,day1) tag untagged imports.review_reportwarns on inverted before/after capture order and uncarded bookend slots.
Optional: project_create(..., preset="karachi") loads series branding. Other reels do not need it.
Capability matrix
Area | In this version |
Canvas | 1080x1920, 30fps, MCP only |
Primary track | Gapless clips, trim/split/reorder, kenburns/punch/zoom_in/zoom_out |
Layouts |
|
Layers | Timed video, image, and text overlays with z-order, transform, keyframes |
Effects | Registry: blur, sharpen, glow, grain, vignette, lut, color |
Text | Stroke-and-shadow only. Motion: fade, pop, slide, type-on |
Templates |
|
Sound | Natural audio, beds, SFX (ride kinds plus reel |
Beat sync |
|
Look | One adjustment layer (LUT, grain, vignette) after the cut |
Album cards | Propose / confirm per-media day + role + subjects. Capture-order guard. Folder-name hints |
Giving this to grokbot
Once the MCP server is in grokbot's config, hand it a prompt like this:
You have an MCP server called lc-editor. It is a video editor you control
entirely through tool calls; ffmpeg does the rendering.
My raw clips are in <folder>. Cut a 9:16 reel of <subject>, 15 to 28 seconds.
Follow the craft rules in specs/craft.md: stroke-and-shadow captions with no
background box, hard cuts on motion.
Before you touch the timeline, ask me what I want for sound: music or natural
audio only. Do not assume either way. If I ask for music, call
project_set(allow_music=true), import my track, music_add it, beat_analyze,
show me beat_sync_preview, then beat_sync_apply only after I confirm.
Work in passes: analyze the footage first, pick the strongest shots, then
match what you see in the keyframes to context/INDEX.md and read only those
scene cards (process in context/HOW.md) before you set durations or roles.
Build the timeline. An occasional two-up is context/scenes/pair.md.
A reel that is mostly stacks is collage.md. Two ride POVs is
ride-pair.md. Add layers or a template if needed, then run
review_report and fix every warning before you export. Show me
preview stills at each pass.Swap the folder, subject, and any series preset (for example preset="karachi") into the prompt as needed.
Scene holds (door as a reveal, tile as a detail, highway as punctuation) live in context/. The agent looks up subjects in context/INDEX.md and reads only the matching cards. That library is editorial judgment. Engine floors in specs/craft.md still win when they conflict.
Not in this version
Multicam, speech-to-captions, a stock music catalog, Drive import, or a browser you edit in.
Submitting to the Cursor Marketplace
To publish this plugin to the Cursor Marketplace or Cursor Directory:
Cursor Marketplace: Go to https://cursor.com/marketplace/publish, sign in, and submit the plugin using this repo's URL.
Cursor Directory: Go to https://cursor.directory/plugins/new and follow the submission steps.
Once published, Grok Bot templates and other agents can reference this plugin by its marketplace ID.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Trim, watermark, extract audio, and convert video to 9:16 vertical via API or MCP server.
FFmpeg as a service for AI agents: typed video editing tools, async jobs, downloadable outputs.
- VidmoatOAuthcom.vidmoat
AI video editor: create projects, edit timelines, add captions and effects, and render videos.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceCreates short videos for TikTok, Instagram Reels, and YouTube Shorts using the Model Context Protocol (MCP) and a REST API.23 npm1,341MIT
- FlicenseNot gradedqualityDmaintenanceEnables agentic video editing and composition via MCP, allowing creation and manipulation of multi-track timelines with clips, transitions, filters, and text overlays, then rendering to MP4 using the melt-7 CLI.-
- AlicenseNot gradedqualityAmaintenanceEnables local-first Instagram reel production entirely over MCP, turning raw footage, URLs, or topics into finished reels with script generation, stock media, voiceover, and captions.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables turning any video into scored, captioned, ready-to-post vertical clips directly from your MCP client, with capabilities to download finished MP4s, schedule posts, and discover trending content.14 npmMIT