FL Studio 2025 AI Bridge
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FLMCP_MIDI_PORT | No | Name of the loopMIDI port used for MIDI-wake mechanism. | loopMIDI |
| FLMCP_TRANSPORT | No | Transport mode for FL Studio bridge: 'file' (recommended for FL Studio 2025) or default socket-based. | file |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| fl_pingA | Report health of BOTH bridges. Returns: { "midi_bridge": {"online": bool, ...}, "piano_roll": {"installed": bool, ...}, "available_capabilities": [...], } |
| fl_reconnectA | Drop and reopen the TCP connection to the MIDI bridge. |
| fl_bridge_infoA | Detailed info about the MIDI bridge (fails if it's offline). |
| fl_call_rawB | Escape hatch: invoke any action the MIDI bridge accepts with arbitrary params. |
| transport_playA | Start or toggle playback (FL Studio's Play button). |
| transport_stopA | Stop playback. |
| transport_recordA | Toggle record arm state. |
| transport_statusA | Get is_playing, is_recording, position, loop mode, tempo, signature. |
| transport_set_positionB | Seek to a specific position in the song. |
| transport_song_lengthA | Return song length in ticks, seconds, ms, bars, steps. |
| transport_set_loop_modeA | Set FL Studio's song/pattern loop mode. |
| transport_set_playback_speedA | Set the playback speed multiplier (0.25..4.0). |
| transport_set_tempoA | Set the project tempo in BPM. Uses processRECEvent for proper undo history. |
| transport_tap_tempoA | Send a tap-tempo event (accumulates to set BPM). |
| transport_set_time_signatureB | Set project time signature (e.g. 4/4, 3/4, 7/8). |
| transport_toggle_metronomeA | Toggle metronome on/off. |
| transport_toggle_countdown_before_recordingB | Toggle 'countdown before recording'. |
| transport_jogA | Nudge playhead by |
| pattern_countA | Return total pattern count. |
| pattern_currentA | Return index + name of currently selected pattern. |
| pattern_listA | Return list of all patterns: [{index, name, color, length}]. |
| pattern_selectA | Jump to pattern by index (1-based in FL). |
| pattern_createA | Create a new empty pattern. Returns {index, name}. |
| pattern_rename | Rename an existing pattern. |
| pattern_set_color | Set pattern color. Accepts '#RRGGBB' or 'rgb(r,g,b)'. |
| pattern_cloneC | Clone a pattern (copy all notes & channel grid bits). |
| pattern_deleteB | Delete a pattern by index. |
| pattern_set_lengthC | Set pattern length in bars. |
| pattern_find_by_nameA | Find a pattern by exact name (case-insensitive). Returns {index, name} or null. |
| pattern_jump_to_nextB | Select the next pattern in the list. |
| pattern_jump_to_previousA | Select the previous pattern in the list. |
| channel_countB | Total channel count (global = across all groups). |
| channel_infoA | Detailed info on one channel: name/volume/pan/pitch/color/mute/solo/fx_route/type. |
| channel_allB | List of all channels with basic info. |
| channel_selectedB | Return currently selected channel (or null). |
| channel_selectB | Select channel (exclusive=True deselects others). |
| channel_set_volumeB | Set channel volume (0.0..1.0, where 0.78 ≈ 0 dB). |
| channel_set_panC | Set channel pan (-1.0..1.0). |
| channel_set_pitchA | Set channel pitch offset in semitones (-120..120). |
| channel_muteB | Mute / unmute / toggle (None = toggle). |
| channel_soloB | Solo / unsolo / toggle (None = toggle). |
| channel_set_nameC | Rename a channel. |
| channel_set_colorB | Set channel color. Accepts '#RRGGBB' or 'rgb(r,g,b)'. |
| channel_route_to_mixerC | Route a channel to a given mixer insert track. |
| channel_trigger_noteA | Trigger a one-shot MIDI note on the channel (live preview, not recorded). |
| channel_get_grid_bitB | Read a single step-sequencer bit (position is 0-based step within the pattern). |
| channel_set_grid_bitC | Set a single step-sequencer bit. |
| channel_get_step_sequenceB | Read the full step sequence for a channel (optionally for a specific pattern). |
| channel_set_step_sequenceB | Overwrite step sequence. |
| channel_clear_step_sequenceA | Clear all step-sequencer bits for the channel (in the current or specified pattern). |
| channel_quick_quantizeC | Quantize the channel's notes in the current pattern. |
| mixer_countA | Number of mixer tracks (incl master @ index 0). |
| mixer_track_infoA | Detailed info on a mixer track (name, vol, pan, mute, solo, arm, color, stereosep, sends, fx slots). |
| mixer_all_tracksC | List of all mixer tracks. |
| mixer_set_volumeB | Set mixer track volume (0.0..1.0). |
| mixer_set_panA | Set mixer track pan (-1.0..1.0). |
| mixer_muteB | Mute / unmute / toggle (None = toggle). |
| mixer_soloC | Solo / unsolo / toggle. |
| mixer_armC | Arm track for recording. |
| mixer_set_nameC | Rename a mixer track. |
| mixer_set_colorA | Set mixer track color ('#RRGGBB' or 'rgb(r,g,b)'). |
| mixer_set_stereo_separationB | Set mixer track stereo separation (-1.0..1.0). |
| mixer_set_send_levelB | Set send level from one mixer track to another (0..1). |
| mixer_routeC | Enable or disable a mixer route (send) between two tracks. |
| mixer_fx_slotsA | List plugin IDs in the 10 FX slots of a mixer track (-1 = empty). |
| mixer_selectC | Focus / select a mixer track. |
| mixer_get_eqB | Return 3-band mixer EQ (gains + frequencies). |
| mixer_set_eq_bandA | Set one band of the mixer EQ. band=0|1|2 (low/mid/high). gain -1..1, freq 0..1 (normalised). |
| mixer_link_to_channelC | Link a channel to a mixer track. mode='replace'|'add'. |
| plugin_is_validB | Check if a plugin slot has a valid plugin loaded. |
| plugin_nameD | Plugin display name. |
| plugin_param_countC | Return number of automatable parameters. |
| plugin_paramsC | List parameters (paginated): [{idx, name, value, value_string}]. |
| plugin_get_paramC | Get value of a single parameter. |
| plugin_set_paramC | Set a single parameter (0.0..1.0 normalised). |
| plugin_find_paramC | Find a parameter by substring (case-insensitive). |
| plugin_preset_countC | Number of built-in presets for plugin. |
| plugin_next_presetC | Advance to the next preset. |
| plugin_prev_presetC | Go back to the previous preset. |
| plugin_set_presetC | Load preset by numeric index. |
| plugin_show_editorC | Show/hide the plugin editor window (None = toggle). |
| plugin_list_mixer_trackA | List all loaded plugins in every FX slot of a mixer track. |
| playlist_track_countC | Playlist track count. |
| playlist_track_infoB | Info on a playlist track: name, color, mute, solo, height, group. |
| playlist_all_tracksB | List of all playlist tracks. |
| playlist_set_track_nameC | Rename a playlist track. |
| playlist_set_track_colorB | Set playlist track color ('#RRGGBB'). |
| playlist_mute_trackC | Mute/unmute a playlist track. |
| playlist_solo_trackC | Solo a playlist track. |
| playlist_list_clipsA | List all clips in the playlist (optionally filter to one track). |
| playlist_place_patternB | Place a pattern clip on a playlist track at a given bar position. |
| playlist_delete_clipA | Delete the clip on a track starting at the given bar position. |
| playlist_refreshA | Force playlist repaint (use after bulk edits). |
| playlist_list_markersA | Return all timeline markers: [{pos_bars, name, mode}]. |
| playlist_add_markerC | Add a playlist marker. |
| playlist_delete_markerB | Remove a playlist marker by index. |
| arrangement_currentA | Return current arrangement index + name. |
| arrangement_listA | List all arrangements. |
| arrangement_selectC | Switch to a different arrangement. |
| arrangement_jump_markerA | Jump playhead to next (+1) or previous (-1) marker within current arrangement. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| status | Bridge + transport quick status. |
| project | Full project metadata: tempo, signature, channels, mixer, patterns, selection. |
| transport | Live transport state (is_playing, position, tempo, loop mode). |
| channels | Full channel rack as JSON. |
| mixer | All mixer tracks as JSON. |
| patterns | All patterns in the project. |
| playlist | Playlist tracks + clips. |
TDQS
Scored across 157 tools
Each tool falls into a clear domain (e.g., arrangement, audio, channel, mixer, pattern, piano_roll, playlist, plugin, project, transport, UI, voice, gen) with distinct purposes. Even overlapping areas like audio analysis vs transcription are separated by target output (analysis data vs piano roll notes). The drum pattern tools differentiate step sequencer vs piano roll output via name and description.
All tools follow a consistent snake_case convention with a domain prefix (e.g., arrangement_, audio_, channel_, mixer_) and a descriptive action (e.g., _list, _select, _set_volume). No mixing of camelCase or inconsistent verb styles. The naming pattern is predictable and aids discoverability.
157 tools is high, but FL Studio is a complex DAW with many components (arrangement, mixing, patterns, plugins, playback, generative features, voice input). The count reflects the breadth of the server's scope. While some tools could be merged (e.g., multiple transport toggles), the granularity helps agents perform fine-grained actions. Slightly over the ideal 3-15 range for a focused server, but reasonable for full DAW control.
The toolset covers almost every major FL Studio workflow: arrangement switching, audio analysis/transcription, automation recording (channels, mixer, plugins, tempo), channel/mixer manipulation, pattern/clip management, piano roll editing, plugin control, project lifecycle, transport, UI, voice input, and generative music. Minor gaps exist (e.g., no mixer EQ automation, no CC event editing), but the surface is extensive enough for most music production tasks.