AI-native video editor with MCP server exposing 11 agent tools for timeline editing, asset management, rendering, and creative generation
Open Edit MCP exposes 6 tools with generally clear naming and detailed descriptions. Tool names follow verb_noun convention (query_project, edit_project, trigger_render). Descriptions are comprehensive (194 - 500+ chars), exceeding the 10 - 1024 baseline. However, critical gaps exist: (1) input schemas lack explicit type definitions for nested 'params' and 'generate_params' objects, they are declared as generic 'object' with no property schemas, violating the requirement that parameters have types; (2) output schemas are entirely undocumented, no tool declares what it returns, forcing LLMs to infer structure; (3) error handling is absent from descriptions, no guidance on retryability, user-fixable vs fatal errors, or recovery paths; (4) parameter constraints are sparse (e.g., 'timeout_sec' has no min/max bounds, 'ranges' array has no item schema). The pillar-tool dispatch pattern (query_project → 8 sub-queries, edit_project → 15 operations) is elegant but obscures individual tool definitions, sub-operations are routed via TOOL_TABLE but not explicitly registered as MCP tools, making them invisible to the protocol. This is a composition issue: the 6 pillar tools are wrappers around 26 underlying operations, but only the 6 wrappers are exposed to the LLM.
Cancel a queued or running render job by job_id.
Apply edits to the project or generate creative suggestions. Use ``operation`` for immediate mutations: add_marker, set_pinned_value, capture_style_hint, import_asset, ingest_local, add_clip, add_hyperframes_overlay, trim_clip, replace_clip_source, change_clip_speed, remove_clip, set_audio_gain, apply_silence_gaps, auto_color_grade, apply_generated_ops. Prefer these timeline ops over run_script. Use ``generate`` for creative suggestions (SFX, music, visuals, remotion, silence_cuts) — review then commit via ``operation="apply_generated_ops"`` (or apply_silence_gaps for cuts). ``operation=ingest_local`` ingests any readable absolute local media path and copies it into the project CAS. ``operation=add_hyperframes_overlay`` adds native HTML/CSS/JS graphics. New motion graphics should use HyperFrames, not Remotion. ``generate=remotion`` appends a legacy AddRemotionCompositionOp (materializes on proxy/final render; graphics burned via ffmpeg). ``generate=init_remotion`` scaffolds ``.open_edit/remotion/``. ``generate=write_remotion`` writes a TSX composition file.
Poll a durable render job by job_id. Use after trigger_render when you need status without blocking, or to inspect a prior job.
Read-only queries about the project. Use this for ALL read-only operations — listing assets, pending notes, style profile, narrative analysis, asset search, and packed transcript. get_silence_gaps returns structured silence + filler spans for cutting; get_timeline_view renders an on-demand filmstrip+waveform+word-label PNG (the transcript-first visual layer). list_assets is compact by default (hash/filename/duration); pass params.detail=true for full metadata, params.include_derivatives=true to include Remotion rematerialized CAS.
Output schemas completely undocumented. No tool declares what it returns, LLMs cannot plan downstream calls or extract required fields. Violates pattern:tool and pattern:response-shaper.
Input parameter schemas use generic 'object' type with no property definitions. 'params' and 'generate_params' lack nested schemas, type info, or constraints. Violates pattern:constrained-input and pattern:tool-description.
No error handling guidance in tool descriptions. No indication of retryability, user-fixable vs fatal errors, or recovery paths. Violates pattern:recovery-guide and pattern:error-classification.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Run Python in the bwrap+seccomp sandbox for complex edits. The sandbox header is injected automatically — do NOT add it manually. Use this when no single edit_project operation fits — e.g. multi-step edits that need to fetch state, compose ops, and append them programmatically.
Trigger a render of the current edit graph. Use this when the user says 'render it', 'give me a preview', or 'export the final cut'. Modes: 'proxy' (fast, low-res review artifact), 'final' (full quality export), 'overlay' (legacy HyperFrames composite mode), or 'preview-chunks' (range-limited, manifest-backed video/audio artifacts). Motion graphics should use the native HyperFrames composition path; legacy Remotion operations remain migration inputs only. encoder: 'gpu' (default) or 'cpu' for video encoding backend. wait: defaults to false so agents return immediately with job_id (poll with get_render_job). Pass wait=true only when a synchronous result path is required. For preview-chunks, ranges are project seconds, media is video/audio/both, and priority is interactive or background. Returns job_id when wait=false, or the manifest-oriented result when wait=true.
Pillar-tool dispatch pattern hides 26 underlying operations (8 queries, 15 edits, 7 generates) behind 6 wrapper tools. Sub-operations are routed via TOOL_TABLE but not explicitly registered as MCP tools, making them invisible to the protocol and forcing LLMs to reason about string enums rather than discrete tools.
Numeric and array parameters lack bounds and constraints. 'timeout_sec' has no min/max; 'ranges' array has no item schema; 'crf' (constant rate factor) has no valid range. Violates pattern:constrained-input.