{"name":"io.github.DareDev256/fcpxml-mcp-server","slug":"daredev256-fcpxml-mcp-server","title":null,"description":"Final Cut Pro automation: 13 grouped tools, 88 operations. FCPXML edit, QC, transcript, preview.","url":"https://mcp.market/server/daredev256-fcpxml-mcp-server","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":35,"stars":109,"forks":19,"downloads_week":null,"last_push_at":"2026-09-08T15:45:56.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":null,"version":"0.25.0","remotes":[],"packages":[{"registryType":"pypi","registryBaseUrl":"https://pypi.org","identifier":"fcp-mcp-server","version":"0.25.0","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Directory containing your FCPXML project files for auto-discovery","name":"FCP_PROJECTS_DIR"}]}],"tools":[{"name":"add_audio","description":"Add an audio clip or music bed to the timeline","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_connected_clip","description":"Connect a library clip to an existing timeline clip (B-roll overlay, audio, title)","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_marker","description":"Add a marker at a specific timecode","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_transition","description":"Add a transition between clips","write_action":false,"price_micros":0,"input_schema":null},{"name":"analyze_pacing","description":"Analyze edit pacing with suggestions for improvements","write_action":false,"price_micros":0,"input_schema":null},{"name":"analyze_timeline","description":"Get comprehensive timeline statistics including duration, resolution, clip count, pacing metrics","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_template","description":"Fill a timeline template with clips and generate FCPXML","write_action":false,"price_micros":0,"input_schema":null},{"name":"assign_role","description":"Set the audio or video role on a clip (dialogue, music, effects, titles, etc.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"auto_rough_cut","description":"Generate a rough cut from source clips based on keywords, duration, and pacing","write_action":false,"price_micros":0,"input_schema":null},{"name":"batch_add_markers","description":"Add multiple markers at once, or auto-generate at cuts/intervals","write_action":false,"price_micros":0,"input_schema":null},{"name":"change_speed","description":"Change clip playback speed (slow motion or speed up)","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_compound_clip","description":"Group spine clips into a compound clip","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_clips","description":"Delete clips from timeline","write_action":true,"price_micros":0,"input_schema":null},{"name":"detect_beats","description":"Detect musical beats and tempo in an audio/video file (librosa beat tracker). Writes a beats JSON next to the media file that plugs directly into import_beat_markers + snap_to_beats for beat-synced editing. Requires the optional [intelligence] extra (librosa); degrades to an install hint without it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_duplicates","description":"Find clips using the same source media (potential duplicates)","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_flash_frames","description":"Find ultra-short clips (flash frames) that are likely errors, with severity categorization","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_gaps","description":"Find unintentional gaps in the timeline","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_media_silence","description":"Detect REAL silence by analyzing each clip's source audio with ffmpeg silencedetect, mapped into timeline time. Unlike detect_silence_candidates (XML-only heuristics), this reads the actual media files referenced by the timeline. Requires ffmpeg; clips whose media is missing or unreadable are reported, not failed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"detect_silence_candidates","description":"Detect potential silence/dead air using timeline heuristics (gaps, ultra-short clips, name patterns, duration anomalies)","write_action":false,"price_micros":0,"input_schema":null},{"name":"diff_timelines","description":"Compare two FCPXML files and report differences in clips, markers, transitions, and format","write_action":false,"price_micros":0,"input_schema":null},{"name":"edit_by_transcript","description":"Text-based editing: cut timeline content by what was SAID. mode=remove cuts every occurrence of the given phrases (with ripple); mode=keep_only keeps only the matched phrases and cuts everything else in each matched clip (clips with no matches are left untouched). Uses each media file's _transcript.json (auto-transcribes if missing). Non-destructive: writes a _transcript_edit copy.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_csv","description":"Export timeline data to CSV format","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_edl","description":"Generate EDL (Edit Decision List) from timeline","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_fcp7_xml","description":"Export timeline as FCP7 XML (XMEML) for Premiere Pro, DaVinci Resolve, and Avid compatibility","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_resolve_xml","description":"Export timeline as DaVinci Resolve compatible FCPXML (simplified v1.9)","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_role_stems","description":"Export clip list grouped by role for audio mixing stem planning","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_gaps","description":"Automatically fill gaps in the timeline by extending adjacent clips","write_action":false,"price_micros":0,"input_schema":null},{"name":"filter_by_role","description":"List all clips matching a specific audio or video role","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_long_clips","description":"Find clips longer than threshold","write_action":false,"price_micros":0,"input_schema":null},{"name":"find_short_cuts","description":"Find clips shorter than threshold (flash frame detection)","write_action":false,"price_micros":0,"input_schema":null},{"name":"fix_flash_frames","description":"Automatically fix detected flash frames by extending neighbors or deleting","write_action":false,"price_micros":0,"input_schema":null},{"name":"flatten_compound_clip","description":"Flatten a compound clip back into individual clips in the spine","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_ab_roll","description":"Create documentary-style A/B roll edits alternating between main content and cutaways","write_action":true,"price_micros":0,"input_schema":null},{"name":"generate_montage","description":"Create rapid-fire montages with pacing curves (accelerating, decelerating, pyramid)","write_action":true,"price_micros":0,"input_schema":null},{"name":"import_beat_markers","description":"Import beat markers from external audio analysis (JSON format)","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_srt_markers","description":"Import SRT or VTT subtitles as chapter markers on the timeline","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_transcript_markers","description":"Import timestamped transcript (YouTube chapter format) as markers. Supports '0:00 Title' and 'HH:MM:SS Title' formats","write_action":false,"price_micros":0,"input_schema":null},{"name":"insert_clip","description":"Insert a library clip onto the timeline at a specific position","write_action":true,"price_micros":0,"input_schema":null},{"name":"list_clips","description":"List all clips with timecodes, durations, and metadata","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_compound_clips","description":"List compound clips (ref-clips) and their nested content","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_connected_clips","description":"List all connected clips (B-roll, titles, audio) with their lanes and parent clips","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_effects","description":"List all available FCP transition effects with slugs and UUIDs","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_fcp_libraries","description":"LIVE: enumerate the running Final Cut Pro's open libraries, events, and projects via Apple's read-only scripting dictionary. Refuses to launch FCP unless allow_launch is true. macOS-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_keywords","description":"Extract all keywords/tags from project","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_library_clips","description":"List all available clips in the library (source media, not yet on timeline)","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_markers","description":"Extract markers (chapter, todo, standard) with timestamps","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_projects","description":"List all FCPXML projects in directory","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_roles","description":"List all audio/video roles used in the timeline with clip counts","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_templates","description":"List available timeline templates with slot definitions","write_action":false,"price_micros":0,"input_schema":null},{"name":"push_to_fcp","description":"LIVE: send an FCPXML file into the running Final Cut Pro with zero clicks (official Open Document Apple event), then VERIFY the import actually landed. macOS-only; first use triggers an Automation permission prompt. Pass library_location ending in .fcpbundle to target a library (a path that does not exist yet is created by FCP). Omit it and the target is inferred only when exactly one library is o","write_action":false,"price_micros":0,"input_schema":null},{"name":"rapid_trim","description":"Batch trim clips to a maximum duration for fast-paced montages","write_action":false,"price_micros":0,"input_schema":null},{"name":"reformat_timeline","description":"Create new FCPXML with different resolution/aspect ratio (9:16 for TikTok, 1:1 for Instagram, etc.)","write_action":true,"price_micros":0,"input_schema":null},{"name":"relink_media","description":"Bulk-rewrite media source paths (asset/media-rep src URLs) to relink moved or renamed media folders without opening FCP. Prefix-based: find='/Volumes/OldDrive/Media' replace='/Volumes/NewDrive/Media'. Use dry_run to preview.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_filler_words","description":"Cut filler words (um, uh, erm...) out of the timeline with ripple, using word-level transcripts of the real source audio. Conservative default filler list — words like 'like' and 'so' are only cut if you pass them explicitly. Uses each media file's _transcript.json (auto-transcribes if missing). Non-destructive: writes a _defillered copy.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_media_silence","description":"Detect REAL silence in each clip's source audio (ffmpeg) and CUT it out of the timeline with ripple. Clips are split around silence; the silent middles are removed and everything after shifts earlier. Non-destructive: writes a _silence_removed copy. Preview with detect_media_silence first.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_silence_candidates","description":"Remove or mark detected silence candidates from timeline","write_action":true,"price_micros":0,"input_schema":null},{"name":"reorder_clips","description":"Move clips to a new position in the timeline","write_action":false,"price_micros":0,"input_schema":null},{"name":"snap_to_beats","description":"Align cuts to nearest beat markers for music-synced edits. Works on spine cuts and on connected clips lane by lane (a music video keeps its whole edit on lanes). Moving a connected clip does not ripple the clips after it; a move that would collide with a neighbour in the same lane is skipped and reported.","write_action":false,"price_micros":0,"input_schema":null},{"name":"split_clip","description":"Split a clip at specified timecodes","write_action":false,"price_micros":0,"input_schema":null},{"name":"transcribe_media","description":"Transcribe each clip's source media locally with word-level timestamps (faster-whisper). Writes a _transcript.json next to each media file (reused by edit_by_transcript / remove_filler_words so media is only transcribed once) and optionally an SRT for captions. Requires the optional [transcribe] extra; degrades to an install hint without it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"transcript_pack","description":"The whole shoot on one page: every clip's transcript packed into one document — a header per source, one line per utterance, broken on silence or a speaker change, audio events inline. Built for planning an edit from what was said. Uses each media file's _transcript.json / the index (auto-transcribes if missing). Truncated at 60KB; write=true saves the full pack as <project>_pack.md beside the FCP","write_action":false,"price_micros":0,"input_schema":null},{"name":"trim_clip","description":"Trim a clip's in-point and/or out-point","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_timeline","description":"Comprehensive timeline health check for flash frames, gaps, duplicates, and issues","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-20T11:37:27.446Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T11:37:27.354Z","components":{"code":{"score":25,"max":25,"notes":["42 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 12 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"fcp-mcp-server","version":"0.25.0","found":true,"license":"MIT","dependencyCount":11,"publishedAt":"2026-09-05T18:26:29.251740Z","repositoryUrl":"https://github.com/DareDev256/fcp-mcp-server.git"}],"repo":{"found":true,"owner":"DareDev256","repo":"fcp-mcp-server","archived":false,"pushedAt":"2026-09-08T15:45:56Z","stars":109,"forks":19,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/93986675?v=4","ownerCreatedAt":"2021-11-09T12:15:26Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/93986675?v=4&s=128","source":"github"},"presence":{"stars":109,"forks":19,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-08T15:45:56.000Z","score":35}}}},"grade_history":[],"reviews":[]}