Files
gart/code/docs/CAPABILITY-AUDIT-2026-06.md

15 KiB
Executable File
Raw Permalink Blame History

Capability Audit & Dual-Mode Roadmap — June 2026

Produced 2026-06-11 from a 36-agent research sweep (8 researchers + 28 adversarial verifications: 22 confirmed, 6 partially-true, 0 refuted). Every load-bearing claim below was independently verified against primary sources — including the FCP 12.2 binary installed on this machine (sdef dump, bundled DTD diff, Info.plist).


1. Where the ecosystem moved (Feb → Jun 2026)

While this repo idled after v0.7.0 (last push 2026-05-02), the FCP automation space restructured:

Event Date Why it matters
Final Cut Pro 12.0 shipped (FCPXML 1.14, Transcript Search, Visual Search, Beat Detection) 2026-01-28 We emit/target 1.11. FCP 12.2 (Apr 9) is current. Apple is absorbing low-end AI features natively.
SpliceKit launched (elliotttate + Chris Hocking/FCP Cafe) 2026-03-30 Live in-process FCP control via dylib injection. 221 MCP tools. Took the "most powerful" crown.
CommandPost PR #3514 (MCP server over its WebSocket) opened, then abandoned 2026-03-19 Author pivoted to SpliceKit. Maintainer still "intends" native MCP. Unmerged.
dreliq9/fcp-mcp created — names THIS repo in its README as the baseline it beats 2026-04-23 "Where the competition stops at one layer." FCPXML engine + AppleScript live layer + ffprobe. 0 stars, but the positioning is public.
SpliceKit went dormant (no commits/releases since 2026-04-28; June issues unanswered) 2026-04-28 → The "live control" crown is sitting on an unmaintained injection layer.

Honest position today: this repo is the most capable pure-FCPXML MCP server, not "the most powerful AI editing MCP in the FCP ecosystem." SpliceKit owns the raw power axis. The winnable axis is safety + portability + media intelligence — no binary patching, runs on managed Macs, works without FCP installed, survives every FCP update. Nobody else credibly occupies that quadrant and has format depth.


2. The control-surface map (verified)

Official Apple surfaces (FCP 12.2, verified on-machine)

Surface Can Cannot
AppleScript dictionary (ProEditor.sdef) Enumerate open libraries → events → projects/sequences: names, IDs, durations, frame rates (100% read-only, sole command is get) Create, modify, delete, export — anything
Apple-event import (open / odoc) Zero-click programmatic import of .fcpxml/.fcpxmld with <import-options> (library location, copy assets, suppress warnings, base url). Officially documented. Choose where in an open timeline content lands
Workflow Extensions (ProExtensionHost 1.1) Floating panel inside FCP; read active sequence + playhead; observe selection/sequence changes; movePlayhead(to:) (the only write); drag media/FCPXML into timeline; host can network Add clips, edit timeline content, modify sequences (explicitly excluded by Apple)
FxPlug 4.3.4 Render-graph plugins (effects/transitions/titles), timing/keyframe/project info See or touch edit decisions entirely
URL schemes / CLI / App Intents Nothing — none exist (verified: no CFBundleURLTypes, no appintents metadata, no headless mode) —

The structural asymmetry: import is fully scriptable; there is NO official programmatic export. Reading back the user's current timeline requires a human File → Export XML click — or an unofficial surface. Apple added zero new automation hooks across FCP 11.0 → 12.2 (six releases). Do not bet on Apple opening up.

Unofficial surfaces

Route Capability Fragility State
SpliceKit (MIT) — dylib-injected re-signed FCP copy, full ObjC runtime (78K classes: Flexo/Ozone/TimelineKit…), JSON-RPC on 127.0.0.1:9876 Everything: blade, retime, color, effects, import/EXPORT, render, playback, 221 MCP tools Breaks every FCP update; re-signed binary loses entitlements; DMCA §1201(f) asserted not tested; enterprise Macs will refuse it Dormant since 04-28
CommandPost (MIT, 554★, v2.0.5 Feb 2026) — AXUIElement + per-version string tables; built-in WebSocket server, port 27480, executes any registered action by ID Deep: timeline, full color suite, every inspector, export dialogs (incl. triggering Export XML via UI), media import. Production-proven (Apple's own WWDC videos graded through it) Needs maintainer fix after essentially every FCP release; v2 requires a paid LateNite app installed (~US$10); v1 free but frozen Alive
Raw AX / Keyboard Maestro / Hammerspoon Menu clicks, shortcut chains Brittle, shallow; CommandPost supersedes this for FCP —

What FCPXML itself can never carry (the XML-only ceiling, DTD-verified)

  • Magnetic Mask — Apple docs: "not included in XML exports." Period.
  • Transcript / visual-analysis / beat-detection data — lives in the library, not the XML. 1.14's only additions are smart-collection search hooks referencing it.
  • Effect definitions — referenced by uid; must exist on the importing machine.
  • Object-tracker + Cinematic depth data — round-trips ONLY via .fcpxmld bundle sidecars (dataLocator → locator). Flat .fcpxml silently drops them.
  • Render files, optimized media, undo history.

Fully round-trippable: clips/spines/lanes, multicam, sync clips, compounds, captions (real CEA-608/ITT elements — Transcribe-to-Captions output lands here), markers/keywords/roles, keyframed params, adjust-* intrinsics, filters with params.

DTD version deltas are small (1.12: filter nameOverride, optical-flow FRC; 1.13: stereo-3D/spatial, hidden-clip-marker, HFR conform; 1.14: smart-collection search only — zero new timeline elements). Bumping support is cheap; the ground-truth DTDs ship inside /Applications/Final Cut Pro.app/.../Interchange.framework/Resources/ (FCPXMLv1_0.dtd … FCPXMLv1_14.dtd). Apple's online FCPXML reference still documents 1.10 — the app bundle is the only real spec.


3. Competitive landscape

Project Stars Approach Status
samuelgursky/davinci-resolve-mcp 1,217 Real Resolve Python API; 341 granular tools Active — shows the ceiling when an NLE has an official API (~20× FCP traction)
elliotttate/SpliceKit 81 Injection (live, everything) Dormant 6 wks
DareDev256/fcpxml-mcp-server 51 Pure FCPXML This repo
FireRed-OpenStoryline 2,895 Intention-driven editing agent (FCPXML as output) Agentic rough-cut wave
DozaVisuals/doza-assist 46 Learns editing style from user's past cuts Pushed daily
elliotttate/finalcutpro-mcp 7 JXA/System Events, 99 tools Superseded by SpliceKit
Poechant/final-cut-pro-cli 2 FCPXML + .fcpbundle FS + minimal AppleScript v0.1.0 May 27
dreliq9/fcp-mcp 0 FCPXML + AppleScript live + ffprobe — "the most capable FCP MCP server" Names us as the incumbent
OTIO fcpx adapter 7 — Dead (last commit Jun 2024, no modern FCPXML) — OTIO is not a viable FCPXML path; we are more current than the "standard"
Eddie AI (commercial) — AI assembles → XML handoff → editor finishes in NLE Validates our exact workflow pattern at NAB scale

Python FCPXML competition is near zero (PyPI fcpxml is a placeholder; OTIO adapter stale). The Swift side is livelier (pipeline-neo v2.5.2 validates DTDs 1.5–1.14; orchetect/swift-fcpxml) — useful as reference implementations, not dependencies.

CapCut verdict (asked 2026-06-11): lane crowded — don't build it. ≥8 CapCut MCP servers exist; VectCutAPI (1,977★) and capcut-mate (1,156★) push daily atop pyJianYingDraft (3,425★). No official API; CN builds encrypt drafts; ByteDance enforced its trademark (CapCutAPI → VectCutAPI forced rename). FCPXML is a documented, stable Apple format — the opposite. Stay here.


4. Dual-mode architecture (decision)

Three tiers sharing one operation vocabulary. The repo audit found the de facto seam: FCPXMLModifier's ~30 public methods ARE the operation set; handlers are thin (_setup_modifier → method → save → _text_result). Extract a backend Protocol over that vocabulary; make _setup_modifier backend-selecting. Moderate refactor — not a rewrite. (Known wart to fix on the way: read path uses frame-quantized Timecode while write path uses rational TimeValue — unify on TimeValue.)

                    ┌────────────────────────────────────┐
                    │   MCP tool surface (one schema)     │
                    └────────────┬───────────────────────┘
                    ┌────────────┴───────────────────────┐
                    │   Operation layer (~30 verbs)       │
                    │   trim/split/retime/marker/reorder… │
                    └──┬──────────────┬──────────────┬───┘
        Tier 1: XML    │  Tier 2: Live (official) │  Tier 3: Bridges (optional)
        ───────────    │  ─────────────────────── │  ──────────────────────────
        parser/writer  │  • push-import (odoc +   │  • SpliceKit JSON-RPC :9876
        rough_cut/diff │    <import-options>)     │    (if patched FCP running)
        export — today │  • AppleScript library   │  • CommandPost WS :27480
                       │    inspection (read)     │    (if installed — incl.
                       │  • watch-folder round-   │    triggering Export XML →
                       │    trip ergonomics       │    closes the read-back loop)
                       │  • later: Workflow Ext   │
                       │    (playhead/selection)  │
                       └──────────────────────────┘
        + Media-intelligence layer feeding all tiers:
          whisperX/parakeet · PySceneDetect 0.7/TransNetV2 · Beat This! · Silero VAD
          · FastVLM/Qwen3-VL via mlx-vlm · ffmpeg-8 preview compiler

Principles:

  1. Never patch the binary. Tier 3 detects SpliceKit/CommandPost if the user installed them; we ship adapters, not injections. Safety is the brand.
  2. The export asymmetry is handled, not hidden: watch-folder + one-keystroke export instructions by default; CommandPost bridge automates the click when present; SpliceKit bridge reads live state when present. Degrade gracefully.
  3. Media intelligence is the real moat. Nobody couples FCPXML depth + actual media analysis + preview-without-FCP. That combination is unique as of June 2026.

5. Roadmap

v0.8 — Format currency (defensive, ~days)

  • Parse FCPXML 1.12–1.14 (deltas enumerated above); tolerate unknown elements losslessly.
  • .fcpxmld bundle read/write with sidecar preservation (don't destroy object-tracking/Cinematic data — rare third-party tool that doesn't).
  • CI: xmllint --dtdvalid against Apple's own bundled DTDs.
  • Emit 1.13 by default (1.11 forfeits HFR/spatial attrs).
  • Bulk media-relink tool (rewrite media-rep src paths — known user pain, trivial here).
  • Hygiene: CHANGELOG entry for 0.7.0 missing; README badge says 912 tests / Testing section says 795; README references nonexistent fcpxml/README.md and a phantom env var.

v0.9 — Live mode v1, official surfaces only (~1-2 weeks)

  • push_to_fcp tool: write FCPXML + <import-options>, fire the Apple event (~20 lines; zero-click; officially supported).
  • list_open_libraries / get_fcp_state: AppleScript read-only inspection via osascript.
  • Watch-folder round-trip: user exports XML to a watched dir; server auto-detects, diffs against last known state.
  • Backend Protocol refactor (operation layer); split server.py (3,046 lines) into tools/ modules while at it.

v0.10 — Media intelligence (the moat, ~weeks)

  • Transcription: whisperX (word-level <100ms) or FluidAudio/Parakeet CoreML → transcript-driven editing: cut-by-sentence, chapter markers, caption generation into real FCPXML caption elements.
  • Scene cuts: PySceneDetect 0.7 (has save-fcp!) + TransNetV2 for hard content.
  • Beats: Beat This! (pip install beat-this, Apr 2026) — madmom is dead, do not dep.
  • Silence: Silero VAD v6 / wrap auto-editor (public domain) rather than reimplement.
  • Shot understanding: FastVLM / Qwen3-VL via mlx-vlm for "find the b-roll of X."
  • Preview-without-FCP: compile timeline → ffmpeg trim/concat/xfade filtergraph, render low-res proxy. Unfilled gap in the entire ecosystem; closes the verify loop.

v1.0 — Bridges + positioning

  • Optional adapters: SpliceKit :9876 (live read/edit/export when present), CommandPost :27480 (action execution incl. Export XML trigger when present).
  • Maintained OTIO bridge (the official adapter is dead — become the de facto one).
  • Flagship demo: beat-synced music-video rough cut (350-video director credibility — nobody else can author that demo).
  • MCP Registry / Smithery refresh, FCP Cafe + Discord presence (the integration debates are happening there; demand is explicit and unserved).

Explicitly NOT doing

  • CapCut MCP (crowded, encrypted format, trademark risk).
  • Forking/bundling SpliceKit's injection (legal + fragility + enterprise rejection).
  • Betting on Apple opening automation (two major versions, zero new hooks).
  • madmom, OTIO-as-engine, raw AX scripting maintained solo.

6. Risks register

  1. SpliceKit revives → it subsumes the live axis; our safety/portability framing must be established before that. (Watch: github.com/elliotttate/SpliceKit commits.)
  2. dreliq9-class clones — the tool taxonomy was replicated in ~a month by a 0-star repo. Capability alone isn't the moat; distribution + format depth + media layer are.
  3. Apple absorbs from above (native transcription/beat/visual search already) — keep value in batch/programmatic workflows Apple won't ship.
  4. FCPXML coverage shrinks relatively — Apple keeps new AI data library-side. Means: the live bridges matter more over time, not less.
  5. Round-trip lossiness blame: users will blame the tool for Apple's drops (Magnetic Mask, sidecars). Document loudly; preserve bundles.

Sources: 36-agent verified sweep 2026-06-11. Researcher outputs archived at /tmp/fcp-research/ (session-local). Key primary sources: FCP 12.2 sdef + bundled DTDs (local), developer.apple.com Professional Video Applications docs, github.com/elliotttate/SpliceKit, CommandPost PR #3514, Apple release notes 102825.