Fcpxml MCP Server vs Reaper MCP

A side-by-side look at the Fcpxml MCP Server and Reaper MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Fcpxml MCP Server logoFcpxml MCP ServerMultimedia Process · Local subprocess (stdio)The first MCP server for Final Cut Pro. 53 tools that parse, edit, and generate FCPXML timelines — health checks, flash frame detection, chapter markers, rough cuts, NLE export. 912 tests, MIT licensed.65GreatAuth: no auth requiredReaper MCP logoReaper MCPMultimedia Process · Local subprocess (stdio)AI-powered music production in REAPER through natural conversation - 173 tools across 26 modules covering transport, tracks, MIDI (insert/edit/quantize/humanize), mixing and FX (EQ, compression, sidechain, sends), tempo maps, markers/regions, ReaScript discovery/execution, and more.65GreatAuth: no auth required

Verdict: choose Fcpxml MCP Server for multimedia process work as a local process; choose Reaper MCP for multimedia process as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Fcpxml MCP Server logoChoose Fcpxml MCP Server when

  • You need dedicated capabilities in the Multimedia Process domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You have the keys it needs: FCP_PROJECTS_DIR.
  • You want tools like inspect, diagnose, edit.
Explore Fcpxml MCP Server

Reaper MCP logoChoose Reaper MCP when

  • You need dedicated capabilities in the Multimedia Process domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: No auth required.
  • You want tools like item_split_at_transients, item_split_at_positions, take_set_pitch.
Explore Reaper MCP

Feature & specification comparison

Rows where the two servers differ are marked.

SpecFcpxml MCP Server logoFcpxml MCP ServerReaper MCP logoReaper MCP
CategoryMultimedia ProcessMultimedia Process
Quality signal65/100 · Great65/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNo auth requiredNo auth required
PricingFreeFree
Required env varsFCP_PROJECTS_DIRNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars127103
Directory activity 11 views 0 installs 0 upvotes 5 views 0 installs 0 upvotes
Tools13174

Tools & capabilities

Fcpxml MCP Server tools 13

  • inspectRead a timeline or project without changing it. Use this first to understand what you are working with. Actions: list_projects, analyze_timeline, analyze_pacing, list_clips, list_markers, list_roles, list_keywords, list_effects, list_templates, list_library_clips, list_compound_clips, list_connected_clips, filter_by_role.
  • diagnoseFind problems in a timeline: gaps, flash frames, duplicates, dead air, and beat structure. Read-only. Run before editing. Actions: validate_timeline, detect_gaps, detect_duplicates, detect_flash_frames, detect_silence_candidates, detect_media_silence, detect_beats, find_short_cuts, find_long_clips, diff_timelines.
  • editChange clips on the timeline: insert, delete, trim, split, reorder, retime, remove silence, and attach audio, B-roll or transitions. Writes a new file. Actions: insert_clip, delete_clips, trim_clip, split_clip, reorder_clips, change_speed, rapid_trim, add_transition, add_audio, add_connected_clip, assign_role, fill_gaps, fix_flash_frames, remove_silence_candidates, remove_media_silence.
  • markAdd or import markers and chapters, including from SRT/VTT subtitles, transcripts, and beat analysis. Actions: add_marker, batch_add_markers, import_srt_markers, import_transcript_markers, import_beat_markers, snap_to_beats.
  • generateBuild new timeline structure from source clips: rough cuts, montages, A/B roll, templates and compound clips. Actions: auto_rough_cut, generate_ab_roll, generate_montage, apply_template, create_compound_clip, flatten_compound_clip, import_edl_json.
  • transcriptTranscribe source media locally and edit the timeline by what was SAID rather than by timecode. Also removes filler words. Actions: transcribe_media, edit_by_transcript, remove_filler_words, transcript_pack.
  • deliverGet the edit out: export to other NLEs, CSV, EDL and stems, reformat, relink media, or push straight into a running Final Cut Pro. Exports and push refuse a cut with no rendered preview of its current state (pass confirm_unreviewed=true to ship anyway). Actions: export_csv, export_edl, export_fcp7_xml, export_resolve_xml, export_role_stems, reformat_timeline, relink_media, push_to_fcp, list_fcp_libraries.
  • previewSee the edit without opening Final Cut Pro. Render a proxy video of the timeline, a contact sheet of every cut, a single frame, or a filmstrip-plus-waveform check read from the SOURCE MEDIA rather than from the XML. Run preview_check to confirm a fix actually landed. Actions: preview_render, preview_sheet, preview_frame, preview_check, preview_timeline.
  • watchClose the round-trip. Watch the Final Cut Pro export folder, detect the XML the moment it lands, and diff it against the last one seen. Pair with deliver.push_to_fcp for a full loop: push in, edit, Cmd-E, watch_pull. Actions: watch_start, watch_status, watch_stop, watch_pull.
  • indexThe analysis cache under ~/.fcp-mcp/index.db. index_status shows what is cached and how old it is; index_build warms it for every source in a timeline (args: filepath, with_transcript); index_clear drops it. Every other tool works with the index off (FCP_MCP_INDEX=off) — this only makes the second question fast. Actions: index_status, index_build, index_clear.
  • scenesShot boundaries. detect_scenes reads every source in a timeline and reports cuts in timeline time (args: filepath, clip_name?, backend auto|content|adaptive|ffmpeg, threshold?, min_scene_len=0.5); scenes_to_markers writes a marker at each cut; scenes_split cuts the clips there. PySceneDetect via the scenes extra, ffmpeg without it — the result names which one answered. Actions: detect_scenes, scenes_to_markers, scenes_split.
  • organizeBulk library logging and the ledger. organize_auto proposes keywords per clip from cached captions and the transcript (apply=true writes them). Select clips with clip_name (glob), keyword and/or role, then organize_keywords (keywords, mode add|remove|replace), organize_rate (rating favorite|rejected|clear) or organize_roles (audio_role, video_role); each writes a _organized copy. history lists every recorded operation for the file's folder (limit); undo (n) moves the outputs of the last n writes into the journal's undone/ folder — it never deletes and refuses when a file changed since it was written. Actions: organize_auto, organize_keywords, organize_rate, organize_roles, history, undo.
  • +1 more on the listing page

Reaper MCP tools 174

  • item_split_at_transientsSlice an audio item at every detected transient. Uses REAPER's native transient detection (action 40310). Sensitivity is controlled by REAPER's project settings (Options → Preferences → Project → Item handling → Transient detection sensitivity), not by this tool — set it once in REAPER and it applies to every call. Args: item_index: Global 0-based item index of the source audio item. Returns: chops_created: number of new items created from the split. chops_total: total items now spanning the original time range. chops: list of `{item_index, position, length, offset_in_original_sec}` in playback order. The AI uses these indices to repitch / duplicate / reverse individual chops.
  • item_split_at_positionsSlice an item at a list of absolute project-time positions. For grid-based or hand-picked chopping where transient detection isn't right. Pass positions in seconds; positions outside the item's range are silently ignored. Args: item_index: Global 0-based item index. positions: JSON array of absolute project-time positions (seconds). Example: `"[1.5, 2.0, 2.5, 3.0]"`. Returns the resulting chops in playback order with their indices, positions, lengths, and offset relative to the original item start.
  • take_set_pitchPitch-shift a take by N semitones (no time change). The core of "tune a chop to a chord tone". Pass positive values to shift up, negative for down. Range is roughly -60 to +60 (REAPER clamps extremes). Half-semitone values work (`0.5`, `-1.25`, etc.) for fine-tuning. Pitch quality depends on REAPER's per-take pitch shift mode setting (Item Properties → Take pitch shift mode). For vocals, "Élastique Pro Soloist" preserves formants well. Set it once in REAPER's project defaults and it applies to every chop. Args: item_index: Global 0-based item index. semitones: Pitch shift in semitones. Float. Default 0 (no change). take_index: 0-based take index, or -1 for the active take.
  • take_set_playrateTime-stretch a take by changing its playrate. With `preserve_pitch=True` (default), audio plays slower/faster without changing pitch — useful for fitting a chop to a beat grid. With `preserve_pitch=False`, this becomes a vinyl-style speed change (faster = higher pitch). After changing the rate, the item's visible length in the timeline does NOT auto-resize. Call `item_set_length` afterwards to match. Args: item_index: Global 0-based item index. rate: Playback rate. 1.0 = normal, 0.5 = half speed, 2.0 = double. Range 0.05 to 16.0. preserve_pitch: Time-stretch without pitch change. Default True.
  • take_set_reversedReverse an item's audio. Uses REAPER's "Item: Reverse items as new take" action — the new reversed take becomes the active one, the original take is kept (item now has 2 takes). To revert, switch back to the original take via `item_take_set_active`. Useful for: reverse-cymbal-into-downbeat fills, breath-in vocal FX, glitchy chop reversals (Skrillex / Flume style). Args: item_index: Global 0-based item index.
  • item_duplicateCopy an item N times at fixed spacing. Each copy is a full clone — same source, same take properties (pitch, playrate, FX, fades). Used for the Porter Robinson 1/16 stutter, EDM build-up risers, percussive vocal repeats. With default spacing (0), copies are placed back-to-back at the original item's length. For tight stutters, pass a small spacing like `60/bpm/4` for 1/16-note repeats at the project's tempo. Args: item_index: Global 0-based source item index. count: Number of copies to make. Range 1-100. spacing_sec: Time between copy starts in seconds. 0 = use item length (back-to-back). Default 0. Returns the new clones with their `item_index` so the AI can manipulate them (pitch, fade, etc.) directly.
  • analyze_chop_setInspect a list of chops and classify each by duration. Pure-Python helper that calls `item_get_info` for each index and returns enriched per-chop info plus summary stats. Helps the AI pick which chops to use for which musical role without doing audio content analysis. Duration classes: hit — < 150 ms (drum hit, consonant burst) staccato — 150-400 ms (short syllable, good for stutters) syllable — 400 ms-1 s (full syllable / word) sustain — > 1 s (phrase / vowel held) Args: item_indices: JSON array of item indices. Up to 200 chops.
  • arrange_chops_to_chord_tones[NICHE] Retune each chop to a chord tone. ⚠️ WARNING: This is NOT how professional vocal chops are made. Per-slice chord-tone retuning smears vocal formants and sounds unnatural. `chop_pipeline` uses uniform transpose instead, which is the correct default for EDM vocal chops. This tool is kept for stylized experimental use (e.g., glitch / granular / heavily-processed chop effects where the pitched-up- demon-voice sound is the desired character). DO NOT use it as your default chop workflow. Walks the chops in playback order. For each chop, determines which chord it falls within (based on its time position) and picks a chord tone according to `layout`. Applies the pitch shift via `take_set_pitch`. Args: item_indices: JSON array of chop item indices (in playback order). Typically the `chops` list returned by `item_split_at_transients`. chord_progression: Chord names separated by commas, pipes, or dashes-with-spaces. E.g., `"Cm7, Fm7, Bb7, Eb"` or `"Am - F - C - G"`. beats_per_chord: How many beats each chord lasts. Default 4 (one bar per chord at 4/4). bpm: Project tempo. Pass 0 to fetch from REAPER (extra round-trip). layout: How to pick a chord tone for each chop: - `follow` — cycle root → 3rd → 5th → root → 3rd → 5th - `ascending` — climb chord tones across each chord - `porter` — root → 5th → octave → 5th → root (Porter Robinson) - `root` — every chop = root of current chord source_root: Note name the source vocal is "in". Pitch shifts are computed relative to this. Default `"C"`. If you don't know, leave as `C`; the result will still be musical relative to the chord changes, just not in absolute key.
  • chop_pipelineEnd-to-end vocal-chop arrangement (redesigned for pro workflow). Produces a contiguous, key-matched, professionally-structured chop arrangement on a new track. Follows researched EDM vocal-chop rules: • CHOPS ARE CONTIGUOUS — every slot filled wall-to-wall, no silence gaps. Slot length is determined by the grid. • PITCH IS UNIFORM — the whole chop set is transposed ONCE to match the track key (source_key → target_key). No per-slice chord-tone retuning; that destroys formants and sounds bad. • LAYER STACKS ARE SEPARATE TRACKS — octave/fifth layers are duplicate child tracks at reduced volume (not overlays that smear the lead). • BAR-LEVEL VARIATION — each bar pulls a different permutation of source slices, so the arrangement doesn't just loop. REQUIREMENT for clean pitch: set REAPER's per-item pitch-shift mode to "élastique Pro Soloist Monophonic" (Project Settings → Media Item Defaults, or per-take in Item Properties). Raw pitch shift without formant preservation destroys vocal character. The tool does not auto-set this (requires REAPER user config). Modes: • `slice-preserve` (default): slice source at a 1/16 (or 1/8 / 1/32 per style) grid, reorder slices across bars for variation, apply ONE uniform pitch shift to all chops. • `melody`: pick a central vowel offset in the source, write a chord-tone melody across bars (root/3rd/5th of each chord), capped at ±5 semitones from source. Requires `chord_progression`. Approximates the "one vowel + sampler + MIDI melody" workflow (Flume / Simpler / Quick Sampler). Args: vocal_item_index: Global 0-based index of the vocal item. chord_progression: Chord list (required for `melody` mode, optional for `slice-preserve`). E.g. `"Fm, Ab, Bb, Fm"`. bpm: Project tempo. 0 = fetch from REAPER. bars: Length in bars. Default 4, max 32. style: One of `future_bass`, `chillstep`, `porter`, `trap`, `mura_masa`, `odesza`. Drives grid / stutter / layers. target_track_name: Name for the new track. mute_original: Mute the source vocal's track. Default True. source_key: Vocal's original musical key. Accepts `Am`, `A minor`, `A`, `Ebm`, etc. Default `C`. target_key: Track key to transpose TO. Empty = use root of first chord in `chord_progression`, or source_key if no progression given. mode: `slice-preserve` (default) or `melody`. See above. seed: Random seed for bar permutations. 0 = nondeterministic.
  • stack_chop_layersFor each chop, create overlay copies at parallel pitch intervals. The classic "future bass / Porter Robinson" harmonized chop stack: each chop becomes a 3-voice cluster — original (root) + 5th (`+7`) + octave (`+12`). Each layer is a clone placed at the EXACT same position as the source on the SAME track, with `take_set_pitch` applied. This means layers play simultaneously with the original. Args: item_indices: JSON array of chop indices to stack. Up to 50. intervals_semitones: JSON array of pitch shifts to add. Default `"[7, 12]"` = perfect 5th + octave (the classic stack). For unison-only set to `"[]"` (no extra layers). Note: stacking creates many overlapping items. Best applied to a SUBSET of chops (e.g., the standout chops in your sequence) rather than every chop, or REAPER's mixer will get crowded.
  • wipe_all_midiWipe all MIDI items and reset composition state. Tracks can compose again after. Only deletes items whose active take is MIDI — audio items on the same tracks are left untouched. On a full wipe (tracks omitted), also clears all markers and regions. Args: tracks: JSON array of track indices e.g. "[0,1,2]", or empty for all.
  • reset_compositionUnlock compose_arrangement without deleting MIDI. Use wipe_all_midi to also delete.
  • +162 more on the listing page

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Fcpxml MCP Server

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "daredev256-fcpxml-mcp-server": {
      "command": "uvx",
      "args": [
        "fcp-mcp-server"
      ],
      "env": {
        "FCP_PROJECTS_DIR": "YOUR_FCP_PROJECTS_DIR_HERE"
      }
    }
  }
}

Reaper MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "xdarkzx-reaper-mcp": {
      "command": "uvx",
      "args": [
        "xdarkzx-reaper-mcp"
      ]
    }
  }
}

Frequently asked questions

Fcpxml MCP Server is categorized under Multimedia Process and uses a local stdio subprocess. Reaper MCP belongs to Multimedia Process and uses a local stdio subprocess. Pick Fcpxml MCP Server for multimedia process work and Reaper MCP for multimedia process.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Fcpxml MCP Server is listed as free. Auth: no auth required. Reaper MCP is listed as free. Auth: no auth required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add daredev256-fcpxml-mcp-server and xdarkzx-reaper-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Fcpxml MCP Server has a quality signal of 65/100 (Great) with 11 views, 0 installs and 127 GitHub stars. Reaper MCP has 65/100 (Great) with 5 views, 0 installs and 103 GitHub stars.