fcp-mcp
Parses, edits, quality-checks and generates Final Cut Pro timelines in Apple's FCPXML v1.14 interchange format (including DTD validation), and provides AppleScript-based live control of a running Final Cut Pro to list libraries, events and projects, get project info and import XML.
Uses macOS System Events / Accessibility GUI automation to drive Final Cut Pro's File menu, automating XML export (with path navigation) and XML import (including library-selection dialogs) that FCP's read-only AppleScript dictionary cannot handle.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fcp-mcpanalyze ~/Movies/Edit.fcpxml and flag gaps before I export"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Understand any timeline
Resolution, frame rate, clips, gaps, markers and keywords in one call. Pacing analysis shows cuts per minute and a clip-length histogram.
Edit without risk
Trim, split, reorder, delete, change speed and add transitions. Every edit writes a new *_modified.fcpxml; the original is never touched.
QC before export
Detect gaps (black frames), flash frames and reused media, then get a health score (A–F). Output is validated against Apple's FCPXML v1.14 DTD.
Hands-free roundtrip
Export XML from Final Cut Pro, let the AI edit, validate, and import it back. System Events drives the File menu so no manual steps are needed.
Quick start
Requirements: macOS, Node.js 18+, Final Cut Pro 10.6+ (for live control, GUI automation and DTD validation).
git clone https://github.com/kks0488/fcp-mcp.git
cd fcp-mcp
npm install
npm run build
npm test # 91 testsConnect to Claude Code
claude mcp add fcp-mcp -- node /path/to/fcp-mcp/dist/index.jsConnect to Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"fcp-mcp": {
"command": "node",
"args": ["/path/to/fcp-mcp/dist/index.js"]
}
}
}Then ask things like "Analyze ~/Movies/Edit.fcpxml", "Add chapter markers every 30 seconds" or "Find flash frames and gaps before I export".
Related MCP server: DaVinci Resolve MCP Server
How the roundtrip works
1. EXPORT fcp_export_xml_gui File > Export XML, driven by System Events
2. AI EDIT fcp_add_marker, fcp_trim_clip, ... parse → modify → write *_modified.fcpxml
3. VALIDATE xmllint --dtdvalid FCPXML v1.14 DTD compliance
4. IMPORT fcp_import_xml_gui open in Final Cut Pro and pick the libraryWithout GUI automation, steps 1 and 4 are a manual File menu action. FCP's AppleScript dictionary is read-only, which is why the GUI layer exists.
Tools (30)
Analysis (4)
Tool | Description |
| Scan a directory for |
| Resolution, FPS, duration, clip count, markers |
| All clips with timecodes, media paths, keywords |
| Cuts-per-minute with histogram visualization |
Markers & Keywords (4)
Tool | Description |
| List markers filtered by type (standard/chapter/todo) |
| Add a marker at SMPTE timecode or rational time |
| Add multiple markers in one operation |
| List keyword ranges applied to clips |
Editing (6)
Tool | Description |
| Change clip in-point and/or duration |
| Move a clip to a different position in timeline |
| Remove clips by index |
| Split a clip at a timecode |
| Apply speed changes (slow-mo, fast-forward) |
| Add cross-dissolve transitions between clips |
All edit tools write to *_modified.fcpxml — originals are never touched.
Quality Control (4)
Tool | Description |
| Find gaps (black frames) in the timeline |
| Detect clips shorter than threshold |
| Find clips reusing the same source media |
| Full health check with score (A-F grade) |
Generation (2)
Tool | Description |
| Generate a rough cut with pacing control |
| Generate a montage with accelerating/decelerating pacing curves |
Export (2)
Tool | Description |
| Export as CMX 3600 EDL |
| Export clip data as CSV spreadsheet |
FCP Live Control — AppleScript (6)
Requires Final Cut Pro to be running.
Tool | Description |
| Check if FCP is running, get version |
| List all open libraries |
| List events in a library |
| List projects via AppleScript |
| Get project details by name |
| Import FCPXML via |
FCP GUI Automation — System Events (2)
Requires Accessibility permissions. Automates FCP menu interactions that are impossible via AppleScript (FCP's scripting API is read-only).
Tool | Description |
| Automate File > Export XML with path navigation |
| Import FCPXML and handle library selection dialog |
Architecture
src/
├── index.ts MCP server entry point (stdio transport)
├── engine/
│ ├── models.ts 1,055 lines — Full FCPXML v1.14 type system
│ ├── fcpxml-parser.ts 1,443 lines — XML → TypeScript parser
│ ├── fcpxml-writer.ts 939 lines — TypeScript → FCPXML writer
│ ├── fcpxml-validator.ts 146 lines — DTD validation via xmllint
│ └── time.ts 245 lines — Rational time & SMPTE arithmetic
└── tools/
├── shared.ts 24 lines — ToolDefinition, ok(), err()
├── analyze.ts 423 lines — Timeline analysis
├── markers.ts 515 lines — Marker CRUD
├── edit.ts 748 lines — Clip editing
├── qc.ts 579 lines — Quality control
├── generate.ts 498 lines — Timeline generation
├── export.ts 261 lines — EDL/CSV export
├── fcp-control.ts 499 lines — AppleScript bridge
└── fcp-gui.ts 383 lines — System Events GUI automationData Flow
┌─────────────┐
Claude/AI ──MCP stdio──▶ │ fcp-mcp │
│ server │
└──────┬──────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────────┐
│ Engine │ │ Engine │ │ System │
│ Parser │ │ Writer │ │ Events │
└────┬─────┘ └────┬─────┘ └──────┬───────┘
▼ ▼ ▼
.fcpxml .fcpxml Final Cut Pro
(read) (write) (GUI control)FCPXML tools (analyze, edit, QC, generate, export, markers) read/write
.fcpxmlfiles directly — FCP does not need to be runningLive control tools query FCP via AppleScript — FCP must be running
GUI automation tools control FCP menus via System Events — FCP must be running + Accessibility permissions
FCPXML Format
This server works with FCPXML v1.14, Apple's XML interchange format for Final Cut Pro. Key concepts:
.fcpxml— Single XML file containing timeline data.fcpxmld— Bundle (directory) containingInfo.fcpxmlinsideResources — Assets (media files), formats (resolution/fps), effects
Spine — The primary storyline containing clips in sequence
Rational Time — Time as fractions (e.g.,
3600/2400s= 1.5 seconds at 24fps)
The server handles both .fcpxml and .fcpxmld transparently.
Permissions Setup (GUI Automation)
For fcp_export_xml_gui and fcp_import_xml_gui to work:
Open System Preferences > Privacy & Security > Accessibility
Add your terminal app (Terminal.app, iTerm2, etc.)
If using through Claude Code/Desktop, also add the app running the MCP server
Verify with:
osascript -e '
tell application "System Events"
tell process "Final Cut Pro"
return name of every menu of menu bar 1
end tell
end tell'Expected output: the list of Final Cut Pro menu names (localized to your macOS language).
Development
npm test # vitest
npm run dev # start the server with tsx
npm run build # compile to dist/
npx tsc --noEmit # type check onlyDTD validation uses the FCPXMLv1_14.dtd that ships inside Final Cut Pro (see dtd/README.md). On a machine without Final Cut Pro, validator tests fail unless you place the DTD in dtd/.
FAQ
Does Final Cut Pro need to be running? Only for the live-control and GUI tools. Analysis, editing, QC, generation and export work on .fcpxml / .fcpxmld files directly.
Will it overwrite my project? No. Edit tools always write *_modified.fcpxml next to the original.
Which FCPXML version? v1.14. Both single files and .fcpxmld bundles are supported.
License
MIT © Kyoungsoo Kim — see LICENSE. Final Cut Pro is a trademark of Apple Inc.; this project is not affiliated with Apple.
This server cannot be deployed
Maintenance
Related MCP Connectors
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
Turn Claude into a creative studio: DNA-locked characters, images, video, voiceover — 55 tools.
Publish and schedule videos to TikTok, YouTube Shorts, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads and X from Claude, Cursor or any MCP client. Upload once, post everywhere, track views in unified analytics, and retry failed posts. Official platform APIs only, free plan available. Docs: https://docs.multi-upload-tool.com/mcp
Edit video by talking to your AI — search footage, cut timelines, apply effects, add captions.
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables comprehensive remote control and automation of Final Cut Pro through 99 tools covering timeline editing, project management, and AI-powered features. It facilitates complex workflows including media organization, color grading, and FCPXML generation using AppleScript and JXA automation.10013-
- AlicenseBqualityBmaintenanceEnables natural language control of DaVinci Resolve, allowing Claude to browse projects, edit timelines, apply color grades, render exports, and perform AI-powered frame analysis via Moondream.147713MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables Claude to read, edit, and generate real Final Cut Pro timelines from exported FCPXML, covering trimming, splitting, silence removal, markers, transcript-based editing, keyframes and speed ramps, cross-NLE export, and pushing edits into a running Final Cut Pro. Every write is journaled with its sha256 and reversible, and timelines can be rendered visually for review before delivery.-
- FlicenseNot gradedqualityAmaintenanceEnables Claude and other MCP clients to read, edit, and generate Final Cut Pro XML timelines, including cut detection, marker and role assignment, transcript-based editing, and pushing cuts into a running Final Cut Pro.-