{"name":"io.github.rosasynthesiz/flstudio-mcp","slug":"rosasynthesiz-flstudio-mcp","title":null,"description":"Control FL Studio with Claude: in-DAW mixing, diagnosis, routing, and composition.","url":"https://mcp.market/server/rosasynthesiz-flstudio-mcp","rating":null,"grade":"A","score":85,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":34,"stars":57,"forks":10,"downloads_week":32,"last_push_at":"2026-07-03T09:18:19.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/rosasynthesiz/flstudio-mcp","website":null,"version":"1.0.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"fl-studio-mcp","version":"1.0.0","transport":{"type":"stdio"}}],"tools":[{"name":"fl_analyze_audio","description":"Estimate tempo + key (+ duration, beats, onsets) of an audio file. Pure offline analysis -- does NOT touch FL. Key is ESTIMATED.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_apply_compression_intent","description":"Compress via Fruity Limiter (COMP section) or FabFilter Pro-C. ALWAYS sets ratio AND threshold together; ratio/attack/release/makeup (+ Pro-C Style) per intent, as ONE rollback unit. When level_aware and the track is playing, threshold is set relative to the MEASURED peak (a smart starting point, not exact gain-reduction); stopped -> preset fallback + a note. Returns readback + the measured level","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_apply_delay_intent","description":"Musical delay moves on a Fruity Delay (time division / feedback / wet / feedback-cut), as one undo-able group. Feedback is clamped <=100% unless intensity>0.9 (warns on self-oscillation risk). Returns readback strings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_apply_eq_intent","description":"Apply a musical EQ move on a Fruity Parametric EQ 2 using a free band. Sets type/freq/gain/width as one undo-able group; returns the band used and FL's readback strings. Revert with fl_rollback_last_change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_apply_mix_fix","description":"Apply ONE Mix Doctor fix via the safety layer: snapshot -> write -> FRESH readback -> rollback-able with fl_rollback_last_change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_apply_reverb_intent","description":"Musical reverb moves on a Fruity Reeverb 2 (decay/wet/high-cut), as one undo-able group. Returns readback strings. Revert: fl_rollback_last_change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_arrange_add_marker","description":"Add a named timeline marker at a bar (intro/verse/chorus/drop).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_arrange_clone_pattern","description":"Clone a pattern (copies its notes) and rename the clone -- e.g. for verse -> verse2 variations.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_arrange_new_pattern","description":"Create + select + name the next empty pattern. After this, the note bridge (fl_write_piano_roll_notes) writes INTO this pattern.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fl_arrange_select_channel","description":"Make a channel the active selection so the note bridge (fl_write_piano_roll_notes) writes INTO it. Use before writing each instrument's notes in a section (drums -> ch X, bass -> ch Y, ...).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_clear_mute_solo","description":"Unmute and unsolo every mixer track (reset). The universal undo for the bulk solo/mute tools.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_detect_cleanup_candidates","description":"Flag (do NOT touch) empty channels + unused mixer tracks, each with a reason. Judgement is computed server-side from cheap controller reads. Channel emptiness is a name heuristic; unused-track detection is reliable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_diagnose_mix","description":"Scan the WHOLE mix and report problems + proposed fixes. READ-ONLY.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_export_midi","description":"Write a type-1 multi-track .mid from an arrangement spec. YOU (Claude) generate the whole arrangement -- multiple named tracks, each with notes {pitch, start_bars, length_bars, velocity} across all sections -- and this writes ONE .mid. Bypasses the note-bridge's one-pattern + MCP_Apply limits.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fl_extract_melody","description":"Transcribe a monophonic melody to quantized notes; engine-selectable (CREPE = accurate/heavy, pyin = light). Returns ALL notes with confidence + a `kept` flag; bridge_notes holds only the confident notes, ready for fl_write_piano_roll_notes. Does NOT write to FL -- review first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_gain_stage","description":"Propose per-track fader trims so each track's peak sits in a healthy band (~-12..-6 dBFS, aim -9) and the Master keeps -3..-6 dB headroom. READ-ONLY proposals -- apply approved ones via fl_apply_mix_fix (rollback).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_channel_routing","description":"Which mixer track each channel-rack channel is linked to: {total, channels:[{channel, name, target_mixer_track, target_name}]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_channel_state","description":"All channel-rack channels (index, name, volume, pan, mute, solo).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_mixer_state","description":"All mixer tracks (index, name, volume, pan, mute, solo). Names in this overview are truncated; use a single-track read for the full name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_play_state","description":"Return whether FL is currently playing and / or recording.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_project_state","description":"Tempo, transport state, pattern/channel/mixer counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_routing","description":"Which destination tracks this mixer track sends to: {track, name, routes_to:[{dst, dst_name, level?}]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_routing_all","description":"Routing for every mixer track (paginated under the hood, returned whole): {total, routing:[{i, name, routes_to:[...]}]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_song_position","description":"Return the current playhead position in beats from the song start.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_tempo","description":"Return the current FL Studio project tempo in beats per minute.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_get_track_level","description":"Measure a mixer track's level by sampling meter peaks over a short window. Requires PLAYBACK -- returns playing=False (avg/peak null) when stopped/silent. {track, playing, avg_db, peak_db}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_group_tracks","description":"Group sources into a bus, EXCLUSIVELY: each source -> bus ON and its direct -> Master OFF; bus -> Master ON; optional bus rename. Applied as ONE rollback unit -- fl_rollback_last_change undoes the whole grouping.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_list_chains","description":"List the built-in genre processing-chain recipes (vocal, drum_bus, bass, master) and their ordered steps.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_list_installed_plugins","description":"Read FL's installed-plugin DATABASE from disk (the .fst shortcuts FL writes for every scanned plugin) -> a de-duped, categorized list of what you OWN. Bypasses the FL API (which only sees LOADED plugins). FL still can't LOAD these -- it's for library-aware suggestions. effects_by_role is a rough keyword grouping (Claude should apply its own plugin knowledge). Read-only (directory listing only).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_list_presets","description":"Read preset NAMES from disk: FL Presets\\ (per-plugin 'Plugin presets', plus Channel/Mixer presets) + Serum 2 Presets (.serumpreset). With NO filter -> a SUMMARY (which plugins have presets + counts). With plugin_filter -> that plugin's full preset list. Read-only. FL can't LOAD presets via the API -- this is for suggestions (you load the named preset, then Claude can tweak it).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_mix_watch_start","description":"Begin a peak-HOLD watch: continuously sample every mixer track's peak, keeping a RUNNING MAX per track, until fl_mix_watch_stop. Tell the user to PLAY the whole song (or at least the loudest section / the drop) while this runs -- then stop for full-song-accurate level diagnosis. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_mix_watch_status","description":"Is a peak watch running, and for how long / how many polls so far?","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_mix_watch_stop","description":"Stop the peak watch and diagnose on the FULL-SONG running-max peaks captured across the whole watch (accurate clipping/headroom/imbalance vs the ~1.2s snapshot). Read-only -- proposes fixes, applies nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_mute_tracks","description":"Mute a group of tracks (leaves the others as they are). Use category or explicit tracks. One rollback unit; reverse with fl_clear_mute_solo.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_ping","description":"Check that FL Studio is running and the controller script is loaded.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_play","description":"Start playback. Idempotent — calling while already playing is a no-op.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_plugin_get_params","description":"Every named parameter of the plugin in this slot: index, name, normalised value (0..1) and FL's display string (e.g. '3.6dB', '500Hz'). Returns {\"total\", \"params\":[{\"i\",\"name\",\"v\",\"s\"}, ...]}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_plugin_list","description":"List the filled effect slots (0-9) on a mixer track, with plugin names.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_plugin_set_param","description":"Set one plugin parameter (normalised 0..1). ``param`` may be an index or a name; names are resolved from the live param list. The change is logged and undo-able via fl_rollback_last_change. Returns before/after plus the resolved {index, name}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_quantize_pattern","description":"Quantize the notes ALREADY in the open Piano roll: reads the score, snaps note starts (and optionally lengths) to the grid, rewrites -- via the pyscript bridge, no dialog. Needs the Piano roll open + MCP_Apply armed once this session (same setup as note writing).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_record","description":"Toggle FL Studio's record-arm state.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_reference_match","description":"Compare your mix's LEVEL + rough tonal BALANCE to a reference track. READ-ONLY. Analyzes the reference FILE (overall level + low/mid/high spectral-band shares) and your mix (Master peak for level + a ROUGH name-based band estimate). HONEST: a level/balance compare, NOT a spectral match -- FL doesn't expose its output audio, so the your-mix balance is estimated from track names + peaks. Suggests ad","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_rollback_last_change","description":"Undo the most recent write by replaying its pre-change snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_channel_color","description":"Set the color of channel-rack channels (separate from mixer-track color). Target by index or name substring. ONE rollback unit -- fl_rollback_last_change reverts it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_channel_mute","description":"Mute or unmute a channel-rack channel (state=True mutes).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_channel_pan","description":"Set a channel-rack channel's pan position (-1 left .. +1 right).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_channel_solo","description":"Solo or unsolo a channel-rack channel (state=True solos).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_channel_volume","description":"Set a channel-rack channel's volume. unit='db' uses 0.8=unity (0 dB).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_dry_run","description":"When on, write tools return a 'planned' preview without changing FL.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fl_set_mixer_mute","description":"Mute or unmute a mixer track (state=True mutes).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_mixer_name","description":"Rename a mixer track.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_mixer_pan","description":"Set a mixer track's pan position (-1 left .. +1 right).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_mixer_solo","description":"Solo or unsolo a mixer track (state=True solos).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_mixer_volume","description":"Set a mixer track volume. unit='db' uses 0.8=unity (0 dB).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_route","description":"Enable/disable a send from src -> dst (calls afterRoutingChanged on the FL side). Snapshot + readback; undo with fl_rollback_last_change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_song_position","description":"Move the playhead to the given beat position.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_tempo","description":"Set the FL Studio project tempo. Range is 10-999 BPM (FL's own limits).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_set_track_color","description":"Set the color of mixer tracks. Pick targets by category ('drums', 'bass', ...) or an explicit tracks list; choose a color by name or hex. All writes are ONE rollback unit -- fl_rollback_last_change reverts them. (Master is never colored.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_setup_chain","description":"Plan a genre-appropriate processing chain over a track's EXISTING plugins. READ-ONLY plan: returns the ordered intent calls (each with the matched plugin + slot) and which steps are MISSING because the needed plugin isn't loaded (FL can't load plugins -- add those manually). After the user approves, apply each step by calling its 'apply' tool+args (fl_apply_eq_intent / fl_apply_compression_intent","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_solo_tracks","description":"Isolate a group so only it is audible -- mutes every OTHER (non-Master) track. Use category ('drums', etc.) or explicit tracks. Implemented as mute-the-rest (reliable; FL's multi-solo is inconsistent). Reverse with fl_clear_mute_solo. One rollback unit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_stop","description":"Stop playback. Idempotent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_suggest_preset","description":"Suggest presets from YOUR library matching a description, for a given plugin. Reads the plugin's preset NAMES from disk + ranks by name match. Name-only (can't hear the sound) -- apply your own knowledge of preset naming. FL can't LOAD presets via the API: recommend which to load in the plugin manually; AFTER the user loads it you can tweak its params via fl_plugin_set_param / fl_apply_*_intent.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_take_snapshot","description":"Read current state for a scope (for your own before/after diffing).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_toggle_play","description":"Toggle between play and stop, mirroring the spacebar in FL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fl_write_piano_roll_notes","description":"Write notes into the currently-open FL Piano roll.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fl_write_raga_chords","description":"Write CHORDS / a progression (stacked notes sharing start times) into the selected channel via the bridge. YOU stack chord tones drawn from the raga/scale (give simultaneous notes the SAME time_bars). Tool selects the channel + writes. SHOW the user the chords BEFORE calling.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fl_write_raga_melody","description":"Write a MELODY (single-line, sequential notes) into the selected channel via the piano-roll bridge. YOU (Claude) generate the swaras for the named raga/root -> MIDI notes (use the proper aarohana/avarohana; respect the raga's allowed swaras); this tool only selects the channel + writes. SHOW the user the notes/swaras BEFORE calling. Needs the Piano roll open + MCP_Apply armed once this session (se","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":85,"grade":"A","scanned_at":"2026-09-27T17:06:10.356Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T17:06:10.399Z","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":12,"max":15,"notes":["last push 86 days ago"]},"identity":{"score":6,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"fl-studio-mcp","version":"1.0.0","found":true,"weeklyDownloads":32,"license":"MIT","dependencyCount":15,"publishedAt":"2026-05-27T16:04:52.313155Z","repositoryUrl":"https://github.com/rosasynthesiz/flstudio-mcp"}],"repo":{"found":true,"owner":"rosasynthesiz","repo":"flstudio-mcp","archived":false,"pushedAt":"2026-07-03T09:18:19Z","stars":57,"forks":10,"openIssues":9,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/287931106?v=4","ownerCreatedAt":"2026-05-26T08:01:09Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/287931106?v=4&s=128","source":"github"},"presence":{"stars":57,"forks":10,"downloadsWeek":32,"license":"MIT","lastPushAt":"2026-07-03T09:18:19.000Z","score":34}}}},"grade_history":[],"reviews":[]}