Skip to content

v0.25.2 — markers stay DTD-valid on color-conformed clips

Choose a tag to compare

@DareDev256 DareDev256 released this 07 Oct 17:47
· 17 commits to main since this release

First release on PyPI since 0.25.0. 0.25.1 was tagged in the manifests but never
published, so server.json advertised a version PyPI did not have; this release
ships everything listed under 0.25.1 as well.

Added

  • Packaged as a Claude plugin bundle, which is now the only route into Anthropic's directory for a server like this one. .claude-plugin/plugin.json, .mcp.json pointing at uvx fcp-mcp-server, and the agent skill moved to skills/fcpxml/SKILL.md. claude plugin validate . passes.
  • Recorded why the other routes are closed: a directory MCP connector submission accepts "one remote MCP server… the server's URL", and this server is stdio and must run on the Mac that has Final Cut Pro. Packaging a local server as a desktop extension (MCPB) is also out — the directory deprecated MCPB listings and no longer accepts them. A plugin bundle carrying a local server loads in Claude Code and in Cowork sessions running on the person's computer, and is ignored in chat, which is correct for a macOS-only server.

Fixed

  • add_marker / batch_add_markers produced DTD-invalid FCPXML on any clip
    carrying adjust-colorConform (or object-tracker, adjust-cinematic,
    adjust-stereo-3D, live-drawing, hidden-clip-marker).
    adjust-transform
    • adjust-colorConform is an ordinary combination on any reframed,
      color-managed clip — e.g. vertical iPhone footage pulled into a 1.14 project
      — so this broke real timelines, not an edge case. _ASSET_CLIP_CHILD_ORDER
      (fcpxml/writer.py) was missing those six DTD element names; a tag missing
      from that table sorts as "last priority" in _dtd_insert's lookup, which
      made an already-correctly-placed <adjust-colorConform> look like it
      belonged after a newly-inserted <marker>. The marker landed before it
      instead, and Final Cut Pro (12.3 / FCPXML 1.14) rejected the file on
      import: DTD validation failed. (Element asset-clip content does not follow the DTD, expecting (note?, (conform-rate?, timeMap?), (object-tracker?, ... adjust-colorConform?, adjust-stereo-3D?, ... The
      same incomplete table also blinded the server's own pre-export validator
      (_check_child_order) to the exact ordering bug it was introducing, since
      both read the same lookup. Six tags added in their correct DTD position
      (verified against xmllint's reported content model for FCPXMLv1_14.dtd);
      FCPXMLWriter._add_keyword also moved off a blind ET.SubElement append
      onto the same _dtd_insert helper every other insertion site already used,
      for consistency. See tests/test_marker_dtd_order_regression.py.
      Thanks to @xwil04 for the report (#24) and the fix (#25).
  • SKILL.md had no YAML frontmatter, so nothing that loads skills could ever have registered it. It now declares name and description, with the description written as the situations a user is actually in.