Dropl MCP vs Reaper MCP
A side-by-side look at the Dropl MCP and Reaper MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Dropl MCP 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?
Choose Dropl MCP when
- You need dedicated capabilities in the Multimedia Process domain.
- You prefer a local stdio subprocess transport.
- You have the keys it needs:
DROPL_API_KEY. - You want tools like
whoami, list_sites, create_site.
Choose 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.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Multimedia Process | Multimedia Process |
| Quality signal | 61/100 · Good | 65/100 · Great |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | No auth required |
| Pricing | Not declared | Free |
| Required env vars | DROPL_API_KEY | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 1 | 105 |
| Directory activity | 1 views 0 installs 0 upvotes | 8 views 0 installs 0 upvotes |
| Tools | 38 | 174 |
| Full listing | View Dropl MCP | View Reaper MCP |
Tools & capabilities
Dropl MCP tools 38
whoamiShows the connected Dropl account, user, role, and API key (name, prefix, scopes, site restriction) plus the web app URL. Use it first in a session to confirm which account you're acting on, or when another tool reports a sign-in or permission error. Needs a saved sign-in or DROPL_API_KEY; it never returns the full key.list_sitesLists the client sites (one per client website) this connection can reach, with their domains and the plan's site allowance. Use it before creating anything, to find the site id for the client the user means and avoid duplicate sites. Keys restricted to some sites only see those sites.create_siteCreates a client site: the home for one client website's showcases, videos, collections, and feedback. Use it when the client has no site yet; check list_sites first to avoid duplicates. Only call after showing the plan to the user and getting explicit confirmation. Counts toward the plan's site allowance; safe to retry, since the same name and domain return the same site.list_showcasesLists a client site's showcases (embeddable photo and video galleries), newest first, with their type (gallery or projects) and item and project counts. Use it to reuse an existing gallery or portfolio instead of creating a duplicate, or to find a showcase id. Paged: pass nextCursor to get more.create_showcaseCreates a showcase: an embeddable photo/video gallery the client can update from their phone. Use it when the user wants a gallery, portfolio, project photos, or a section the client can update themselves. Requires a site id from list_sites or create_site. Only call after showing the plan to the user and getting explicit confirmation. Use type: "projects" for a portfolio where each project gets its own page, photos, and details (then create_project for each); the type can't change once the showcase has items. Turn on showCategoryFilters when items or projects will be grouped into categories. Safe to retry with the same arguments.get_showcaseSummarizes a showcase: type, settings, item counts by status (processing/ready/failed) and kind, project counts and details (projects showcases), categories with counts, photos without alt text, and failed items. Use it to check that an upload finished processing or to review a gallery before changing it. It returns counts, not items: use list_showcase_items for ids, alt text, and categories, or list_projects for projects.list_showcase_itemsPages through a showcase's items in display order: id, kind, status, file name, the local path it was uploaded from, alt text, and categories. Use it to find item ids for update_items or tag_items, or photos that still need alt text (missingAlt: true). Up to 200 items per call; local paths only appear for files uploaded from this machine.update_itemsSets alt text and adds/removes categories on many showcase items in one call. Use it after an upload to fix alt text or categories by id (files[].id from upload_photos / upload_videos, library video ids, or ids from list_showcase_items) instead of uploading again. Up to 1000 items per call; category names that don't exist yet are created. Alt text: Write concise, descriptive alt text: what the photo shows (e.g. "Cedar deck with glass railing at dusk"), without "image of" or "photo of". Leave it empty for purely decorative photos. Show the user the alt text you plan to write before saving a large batch.update_showcaseChanges a showcase's title, layout, grid fit, category filter tabs, or items per page. Use it when the user wants the gallery to look or page differently; embeds pick up the change without new code. Pass only the settings to change; at least one is required.create_categoryAdds a category (a filter tab) to a showcase. Use it to group items, e.g. one category per project type or source folder, before tagging them; upload and tagging tools also create missing categories by name. If one with the same name or slug exists, it's returned instead of creating a duplicate.tag_itemsAdds and/or removes the same categories on many showcase items (photos or videos) at once. Use it to put uploaded items into filter tabs, with itemIds from upload_photos / upload_videos (files[].id; library video ids work too) or list_showcase_items. Up to 1000 items per call; category names that don't exist yet are created. For per-item changes or alt text, use update_items.upload_photosUploads local photos (JPEG, PNG, WebP, AVIF, HEIC; up to 20 MB each) into a showcase, straight to storage. Use it to turn a folder of project photos into a client-editable gallery: pass files, folders (recursive by default), and globs via paths, and per-photo alt text and categories via files. Skips hidden files and validates file contents. Run with dryRun: true first and show the result to the user; Only call after showing the plan to the user and getting explicit confirmation. Resumable: re-running with the same arguments skips files already uploaded (and still applies changed alt text and categories). categoryFromFolder tags each photo with its top-level folder's name; categories tags every photo (both created if missing). In a projects showcase, pass project: the photos join the end of that project (categories belong to the project there, not to photos); the same file can go into several projects. Returns files: each local path with its showcase item id and status, for update_items and tag_items. Alt text: Write concise, descriptive alt text: what the photo shows (e.g. "Cedar deck with glass railing at dusk"), without "image of" or "photo of". Leave it empty for purely decorative photos.- +26 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.
Dropl MCP
{
"mcpServers": {
"dropl-mcp": {
"command": "npx",
"args": [
"-y",
"@dropl/mcp"
],
"env": {
"DROPL_API_KEY": "YOUR_DROPL_API_KEY_HERE"
}
}
}
}
Reaper MCP
{
"mcpServers": {
"xdarkzx-reaper-mcp": {
"command": "uvx",
"args": [
"xdarkzx-reaper-mcp"
]
}
}
}
Frequently asked questions
Dropl MCP is categorized under Multimedia Process and uses a local stdio subprocess. Reaper MCP belongs to Multimedia Process and uses a local stdio subprocess. Pick Dropl MCP 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.
Dropl MCP has no declared pricing — check the project's own site. 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 dropl-mcp and xdarkzx-reaper-mcp as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Dropl MCP has a quality signal of 61/100 (Good) with 1 views, 0 installs and 1 GitHub stars. Reaper MCP has 65/100 (Great) with 8 views, 0 installs and 105 GitHub stars.