
fcp-mcp — Final Cut Pro MCP Server
io.github.dreliq9由 GitHub 账号 dreliq9 发布v0.2.0更新于 Oct 24, 2026
Final Cut Pro MCP — 88 tools: FCPXML engine, live FCP control, media analysis, puppets.
概览
让助手检查、生成并以事务方式编辑 Final Cut Pro 的 FCPXML,执行质检,并可选地在 macOS 上实时控制 Final Cut Pro。
- 可以做什么
- 按配置提供 97 个工具,用于 FCPXML 解析、片段/标记/效果列表、节奏与时间线分析、A/B 对比、结构验证,以及闪光帧、空隙、重复、帧率、音频电平、安全区等质检。可生成项目和时线,编辑标记、关键词、字幕、音频、转场、修剪、分割和角色,并导出为 EDL、DaVinci Resolve XML 或 Premiere FCP7 XMEML。持久工作流层先准备候选、展示语义差异,仅在哈希批准后提交。可选的实时工具通过 AppleScript 打开资源库、控制播放、执行菜单命令和快捷键,并派发 Compressor 编码。
- 适用场景
- 当你在 macOS 上使用 Final Cut Pro,并希望助手检查或修复 FCPXML、在剪辑前质检、批量编辑时间线、生成粗剪或木偶动画,或将已验证的 XML 交给 Final Cut Pro 时使用。也适合把字幕或粗剪转换为其他 NLE 格式。
- 运行要求
- 从 PyPI 安装为 fcp-mcp 的本地 macOS 进程;需要 Python 3.10+、macOS 15.6 或更高版本并安装 Final Cut Pro,媒体工具需要 PATH 中有 FFmpeg;Apple Compressor 可选。实时控制需要 FCP_MCP_ENABLE_LIVE_CONTROL=1 且 Final Cut Pro 正在运行;部分查询需要辅助功能权限。可选变量包括 FCP_MCP_OUTPUT_DIR、FCP_MCP_ALLOWED_ROOTS 和 FCP_MCP_STATE_DIR。
安装
在 SourceWeft 中
- 打开 控制台中的 fcp-mcp — Final Cut Pro MCP Server,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
fcp-mcp — Final Cut Pro MCP Server
Trusted, local, human-approved Final Cut Pro workflows. fcp-mcp inspects, generates, and transactionally edits FCPXML, then optionally hands verified artifacts to Final Cut Pro. The default profile never performs direct live or offline mutation.
This development catalog adds three import-bridge tools to the v0.3.0 baseline across four profiles. It is a bounded FCPXML interchange and tested Final Cut Pro handoff surface—not a claim of complete autonomous Final Cut Pro control. The default workflow is inspect, prepare, review, hash approval, then commit.
Start here:
- Documentation index
- First run
- Compatibility
- Support
- Security
- v0.3.0 release and fresh product evidence
- Agent operating guide
- Production workflow recipes
- v0.3 changelog
- v0.3.0 review evidence
Project Structure
Setup
Prerequisites
- Python 3.10+
- macOS 15.6 or later with Final Cut Pro
- FFmpeg on
$PATH(formedia_*tools):brew install ffmpeg - Apple Compressor (optional, for
compressor_*tools)
Install
Install the current published release from PyPI:
Or from source (for contributors):
Verify
doctor exits 0 when ready, 1 when offline service is usable but
optional capabilities are degraded, and 2 when configuration blocks
required runtime behavior. MCP clients can call the same structured
surface through fcp_doctor.
Connect to Claude Code
Or if you installed from source, point at your venv's Python:
Or edit ~/.claude.json directly:
Claude Desktop
Add the same config to your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Verify connection
Catalog Profiles
Select a profile with FCP_MCP_PROFILE. The default workflow profile keeps
the inspect → prepare → review → hash approval → commit sequence bounded and
reviewable.
The 97 tools include the youtube-mcp.materialized-clip-plan/v1 provenance
adapter, fcpxml_generate_from_clip_plan, in edit and full only. Live FCP
control remains independently disabled unless FCP_MCP_ENABLE_LIVE_CONTROL=1;
choosing full does not grant that authority.
Available Tools (97 in full)
The full catalog combines 96 domain tools across 14 functional categories with
fcp_doctor.
Key Features
Three layers in one server
Most FCP MCPs pick a lane. DareDev256/fcpxml-mcp-server is FCPXML-only. elliotttate/finalcutpro-mcp is AppleScript/JXA-heavy with thin FCPXML. fcp-mcp does both — and adds media analysis (ffprobe) and a parametric puppet system on top. An agent can open a library, inspect the active timeline, patch the XML, re-import, trigger Share, and dispatch a Compressor job — end to end.
Rational-arithmetic timecode
Time values are stored as fractions ("720/24s") and only collapsed to
floats at display boundaries. Frame-accurate across 23.976 / 24 / 29.97 /
59.94 / drop-frame — no rounding drift when splitting, trimming, or
concatenating.
Scoped and transactional XML handling
All .fcpxml reads go through defusedxml via utils/safe_xml.py —
XXE, entity expansion, and external entities are blocked by default.
The parser enforces configured XML size and depth limits.
User paths are resolved beneath configured roots after symlink resolution. FCPXML writes are serialized to a secure temporary file beside the destination, structurally validated, backed up when replacing an existing destination, atomically committed, and validated again. The built-in validator checks the invariants it implements; it is not a complete Apple schema validator. Import into a disposable Final Cut Pro project is the authoritative compatibility gate for important outputs. On a release workstation with Final Cut Pro installed, preflight a candidate against the DTD matching its declared FCPXML version:
This gate reads the DTD from the installed Final Cut Pro application bundle; the project does not copy or redistribute Apple's schema. A passing DTD check does not replace the disposable-project import because Final Cut Pro also checks media and application-level semantics.
fcpxml_assign_role, fcpxml_batch_assign_roles, and their workflow
operations assign audio roles. For an asset-clip, fcp-mcp writes Apple's
audioRole attribute and continues to read legacy role values for
compatibility.
Reviewable transactional edits
The default profile exposes four workflow tools:
fcpxml_workflow_prepare, fcpxml_workflow_status,
fcpxml_workflow_commit, and fcpxml_workflow_cancel.
Prepare runs a fixed, bounded edit graph and stores the candidate, semantic
diff, validation evidence, and event chain beneath the private
FCP_MCP_STATE_DIR. It does not create or change the public destination.
Review the returned summary and diff_uri, then pass the exact returned
candidate_sha256 to commit as expected_candidate_sha256. Client approval
is cryptographically bound to that candidate but is recorded as
client_unverified_human; the server cannot independently prove that a human
approved a chat message.
Three read-only templates expose durable evidence:
fcp-workflow://runs/{run_id},
fcp-workflow://runs/{run_id}/events, and
fcp-workflow://runs/{run_id}/diff. Candidate XML is deliberately private
and is not exposed as a resource. Interrupted commits are assessed from
durable evidence and can be explicitly reconciled with:
This is a bounded workflow engine, not a generic graph runtime. It does not use MCP Tasks or run background autonomous agents.
Cross-NLE export
Same timeline out to three targets:
fcpxml_export_resolve— DaVinci Resolve-flavored XML (v1.9)fcpxml_export_fcp7— Premiere-compatible XMEML (FCP7 format)fcpxml_export_edl— flat EDL for color-grading and archive pipelines
Parametric character puppets
puppet_* tools build animated character rigs entirely in FCPXML —
no third-party motion templates required. Parts, keyframes, and
presets (walk, talk, wave, multi-character compositions) emit XML for
structural validation followed by a disposable-project FCP import gate.
QC before you cut
Media links, frame rates, audio levels, safe zones, and target duration
are separate fcpxml_check_* tools. Run the specific checks you need
instead of assuming the aggregate report includes them.
Programmatic XML import bridge
fcpxml_prepare_import(path, library_path) prepares one named event/project
without contacting Final Cut. It requires an existing .fcpbundle, scoped
local media files, and a matching installed Apple DTD. Its private artifact
contains Apple's documented import-options library URL. Media is copied into
private snapshots within FCP_MCP_WORKFLOW_MAX_ARTIFACT_BYTES (aggregate staged
media plus staged XML; default 268,435,456 bytes / 256 MiB per preparation),
and Final Cut is asked to copy assets into its library. Warnings remain visible.
Conflicting embedded destinations are rejected. Factory Motion template UIDs and
matching installed factory locators are supported; external Motion templates and
locator resources are rejected. Media bookmarks are removed in favor of the
reviewed snapshot URLs.
Dispatch uses a separate sealed copy of the reviewed XML, with pinned identities
and hashes for every staged file. The bridge checks these after native preflight.
Files are mode 0400 and snapshot directories 0500; public path tools cannot access
the reserved staging tree. Snapshots are retained for asynchronous reads, including
after metadata observation; there is no automatic cleanup. This consumes disk space.
Retain the entire private import state under FCP_MCP_STATE_DIR/import-bridge,
including snapshots, plans and dispatch records, across requests, reconciliation
and evidence/recovery decisions. Keep the source XML unchanged until dispatch.
Do not delete, move or change permissions on prepared snapshots. Acceptance or
matching metadata does not establish that Final Cut has finished reading them.
Deleting state also removes duplicate-dispatch evidence; its absence does not
authorize another import.
Use a stable private FCP_MCP_STATE_DIR for retained work. Managed workspaces may
normalize directory permissions, invalidating the 0500 seal. Temporary locations
such as /private/tmp can avoid that normalization for a bounded test, but the OS
or another process may remove their contents; they are not a persistent-retention
guarantee. If state, permissions or identities change, stop and investigate;
do not repair permissions or bypass verification to force a send. No cleanup or
state-migration behavior is provided by this bridge.
These controls assume a trusted OS account and installed Final Cut application. They do not isolate against malicious processes running as the same user or root, which can change permissions or replace paths before the app reads them. The three bridge tools reject unknown arguments and require strict schema types.
Review that artifact and target before approving the returned plan_sha256.
With the full profile, live control enabled, and client approval mode,
fcp_request_import(prepared_id, expected_plan_sha256) inspects the exact open
library, blocks existing event names, records intent, and sends one Open Document
AppleEvent. accepted_unverified means the event returned without error;
it does not mean the import completed. Preflight is not atomic with native
processing, so app state can change and Final Cut may still prompt. Apple may
create a library if the target disappears before processing. Native errors/timeouts stay ambiguous,
and recorded requests are never automatically resent. An unresolved request
also blocks another request into that library.
fcp_reconcile_import(prepared_id) reads app metadata and updates private
bookkeeping. metadata_observed establishes only the expected library URL,
event/project identity and duration. It does not verify timeline content or
rendering. Missing, mismatched or unavailable observations require waiting or
manual inspection, without another import. CLI approval mode blocks bridge
dispatch; it is not silently replaced by client approval. XML export and
rendering still depend on Final Cut. The older fcp_import_xml tool is unchanged.
Apple contracts: programmatic import and import options.
Live FCP control
When FCP is running, fcp_* tools wire through AppleScript:
Output Files
By default, modified FCPXMLs are written next to their input with a
_modified suffix. Override per-call via the output_path parameter,
or set the canonical directory for relative and generated outputs:
FCP_PROJECTS_DIR remains a legacy fallback when
FCP_MCP_OUTPUT_DIR is unset. Relative input paths resolve beneath the
output directory.
Allow additional input roots with the macOS path separator (:):
Absolute and symlink-resolved inputs outside those roots are rejected.
For an input-backed operation, explicit outputs may be beneath the
output directory or the input file's parent. Input and output resolving
to the same file are always rejected. Replacing an existing destination
creates a sibling backup named
<file>.bak.<UTC timestamp>.<transaction UUID>.
Live FCP, Accessibility, and Compressor actions are opt-in:
Leave it unset for offline-only use. Runtime and transaction events use
text by default; set FCP_MCP_LOG_FORMAT=json for JSON lines.
Workflow state defaults to the macOS application-support directory. Override it when isolation is required:
Examples
See the full gallery for tool sequences and workflow breakdowns. Sample prompts:
- "Run the structural QC report on hero.fcpxml and fix every reported flash frame."
- "Convert these .srt captions into FCPXML title clips on the V2 track."
- "Take my assembly-edit XML and re-export it as a DaVinci Resolve XML for color."
- "List every clip on the timeline, then batch-assign the 'dialogue' role to all interview clips."
- "Open the active library, seek to the first marker, and dispatch a ProRes 422 HQ bounce via Compressor."
- "Build a 3-character puppet scene: one walking, one talking, one waving. 5-second timeline."
Architecture
Troubleshooting
fcp-mcp: command not found — make sure the venv you installed into is on
your PATH, or use the absolute path to the venv's bin/fcp-mcp in your MCP config.
ffmpeg: command not found on media_ calls* — brew install ffmpeg. FFmpeg
is not bundled.
fcp_* tools return "Final Cut Pro is not running" — launch FCP first. Live
tools require an active FCP process on macOS and
FCP_MCP_ENABLE_LIVE_CONTROL=1.
fcp_* tools fail silently on newer FCP versions — FCP's scripting surface is
limited compared to pre-FCPX versions. Menu items and keyboard shortcuts are the
reliable path; some JXA queries are gated behind Accessibility permissions
(System Settings → Privacy & Security → Accessibility → Claude/Terminal).
fcpxml_* tools report structural validation failures — run
fcpxml_validate for the implemented checks. Passing this validator is
not proof of complete Apple/FCP compatibility. Run
python scripts/apple_dtd_gate.py path/to/result.fcpxml on a Mac with
Final Cut Pro installed, then import an important result into a disposable
Final Cut Pro project before relying on it.
path_outside_scope — add the media location to
FCP_MCP_ALLOWED_ROOTS. External volumes are not implicitly trusted.
same_file_forbidden — choose a different output. fcp-mcp never
overwrites its source path, even when the caller supplies it explicitly.
unsupported_contract from fcpxml_apply_template — template
listing and saving remain available, but clip substitution has no stable
schema and remains intentionally unavailable in v0.3.0.
Tests failing on import — activate the venv and reinstall: pip install -e ".[dev]".
Planned Work
See ROADMAP.md for the full plan. Highlights:
- MCP Prompts — shipped:
qc-check,youtube-chapters,cleanup,rough-cut,beat-sync - Proxy/Resolve round-trip — proxy-aware offline/online workflows
Acknowledgments
fcp-mcp was co-developed by Adam Steen and Claude (Anthropic).
License
MIT — see LICENSE.
来源:README.md,提交 20ea2a3
工具
0版本历史
1- v0.2.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分