Repository navigation
v0.25.2 — markers stay DTD-valid on color-conformed clips
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.jsonpointing atuvx fcp-mcp-server, and the agent skill moved toskills/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_markersproduced DTD-invalid FCPXML on any clip
carryingadjust-colorConform(orobject-tracker,adjust-cinematic,
adjust-stereo-3D,live-drawing,hidden-clip-marker).adjust-transformadjust-colorConformis 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_keywordalso moved off a blindET.SubElementappend
onto the same_dtd_inserthelper every other insertion site already used,
for consistency. Seetests/test_marker_dtd_order_regression.py.
Thanks to @xwil04 for the report (#24) and the fix (#25).
SKILL.mdhad no YAML frontmatter, so nothing that loads skills could ever have registered it. It now declaresnameanddescription, with the description written as the situations a user is actually in.