Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
fl_pingA

Report health of BOTH bridges.

Returns: { "midi_bridge": {"online": bool, ...}, "piano_roll": {"installed": bool, ...}, "available_capabilities": [...], }

fl_reconnectA

Reset the bridge client (file-bus has no persistent connection, but this clears any client-side state and re-pings).

fl_bridge_infoB

Detailed info about the main bridge (fails if it's offline).

fl_call_rawB

Escape hatch: invoke any action the main bridge accepts with arbitrary params.

fl_test_mac_restrictionsA

Test which operations are blocked by FL Studio's macOS audit hook.

FL Studio 2025 on macOS runs Python in a heavily-restricted sub-interpreter. This tool reports which operations are blocked (sockets, threads, subprocess, file I/O restrictions, etc.) and which are allowed.

Returns a dict mapping operation names to status strings: "OK" = operation succeeded "BLOCKED: " = audit hook blocked the operation

Expected on macOS: sockets, threads, subprocess, mkdir, unlink, rename = BLOCKED file_io = OK

transport_playA

Start or toggle playback (FL Studio's Play button).

transport_stopB

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 steps 16th-notes (negative = backward).

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_renameB

Rename an existing pattern.

pattern_set_colorB

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.

pattern_groupsA

List pattern groups (name + member pattern indices) and the active group.

pattern_burn_loopA

Burn the pattern's loop-recorded takes into editable note data (current pattern if index omitted).

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. steps is a list of 0/1 ints (any length up to pattern length).

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.

channel_get_step_paramsA

Read per-step graph-editor values for a channel in the current pattern.

params: any of velocity, pan, shift, pitch, fine_pitch, release, mod_x, mod_y (default: velocity, pan, shift). Returns one row per active step.

channel_set_step_paramsA

Write per-step graph-editor values (velocity/pan/shift/etc.) — adds groove and dynamics beyond on/off grid bits.

steps: list of {"step": N, "velocity": 0..127, "pan": 0..127 (64=center), "shift": ticks, "pitch": ..., ...}. Only provided keys are written. pattern defaults to the current pattern.

channel_get_activityA

Live activity/VU level per channel (all channels if index omitted). Useful during playback to confirm a channel is actually sounding.

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'.

mixer_get_peaksA

Live peak levels (left/right, ~0..1, >1 = clipping) for one mixer track.

Only meaningful while playing — start the transport first, poll during playback. Master is track 0.

mixer_all_peaksA

Live peak snapshot for every mixer track (master @ 0), for gain staging and clipping checks. Poll a few times during playback for a representative picture; silent tracks are omitted unless include_silent.

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.

playlist_track_activityA

Live activity level per playlist track during playback (all active tracks if track omitted) — confirms which lanes are actually sounding.

live_statusC

Performance-mode state; with a track, per-block clip status for it.

live_triggerA

Trigger a performance-mode live clip (playlist must be in performance mode). Default flags mute the previous clip on the track.

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.

arrangement_play_timeA

Get current playback time in ticks + bars + seconds.

arrangement_selectionA

Current timeline selection (start/end ticks; -1 start = no selection).

automation_record_tempoA

Record an automation ramp on the master tempo.

points: list of {time_bars: float, bpm: float}. MCP will sequence them live with the correct REC flags to create a real automation clip.

automation_record_channel_volumeC

Record volume automation on a channel. points: [{time_bars, value}].

automation_record_channel_panC

Record pan automation on a channel.

automation_record_mixer_volumeC

Record volume automation on a mixer track.

automation_record_plugin_paramB

Record automation on a plugin parameter. points: [{time_bars, value}].

project_metadataB

Project snapshot: tempo, signature, tracks, channels, patterns, selected, title, path.

project_newB

Start a new project (optionally from a template path).

project_openC

Open an existing .flp project.

project_saveB

Save the project.

project_save_asB

Save the project to a new path.

project_undoB

Undo last action.

project_redoB

Redo last undone action.

project_undo_historyC

Return undo history stack.

project_save_undoA

Push a named entry onto the undo stack before a batch edit.

project_renderA

Trigger render to disk (uses FL's render dialog automation; blocks until complete).

project_versionA

Return FL Studio version string.

project_dump_score_logA

Dump the last N seconds of notes the USER PLAYED (even without recording) into the selected pattern — 'turn what I just jammed into a pattern'. Select/create the target pattern first.

ui_focused_windowB

Return info about the currently focused FL Studio window.

ui_show_windowA

Open / focus a main window by name.

ui_hide_windowC

Close a main window.

ui_hintA

Display a transient hint message in FL Studio's status bar.

ui_open_piano_roll_for_channelA

Switch the piano roll to show a given channel/pattern without closing the window.

In one-channel-per-pattern mode, selecting the pattern causes FL to auto-select its channel and update the piano roll viewport — no openEventEditor call needed (which would cause the window to disappear and reappear). openEventEditor is only called as a last resort when the channel still doesn't match after the pattern switch.

ui_selected_channelB

Return selected channel index + name.

ui_scroll_to_channelC

Scroll the channel rack to show a channel.

ui_get_snap_modeA

Current global snap mode (affects playlist + piano roll editing).

ui_set_snap_modeA

Set the global snap mode. Accepts a name ('bar', 'beat', 'half_beat', 'step', 'line', 'cell', 'none', ...) or a numeric midi.Snap_* value.

Set this BEFORE any GUI clip placement/moves in the playlist so clicks land on the grid; restore the previous mode afterwards.

ui_focused_pluginA

Name/caption of the plugin editor window that currently has focus.

browser_focusedA

Caption + file type of the currently focused FL browser node.

browser_navigateA

Move the browser selection ('up'/'down'/'left'/'right'; left/right collapse/expand folders). Returns the newly focused node so you can walk the tree without screenshots.

browser_tabsA

Cycle browser tabs (negative steps = backwards).

browser_previewA

Audition the focused browser node — plays the sample/preset preview through FL's output (combine with fl-listen/metering to hear it).

browser_selectA

Activate the focused browser node (like double-click: loads the sample/preset into the project).

piano_roll_gotoA

Navigate the piano roll viewport to a specific channel × pattern.

Always use this instead of pattern_select / channel_select directly. Uses the sequence: channels.select → patterns.select → ui.openPianoRoll. Does nothing if already on the target pattern.

Args: channel: Channel rack index (0-based). pattern: Pattern index (1-based, as returned by patterns.list).

piano_roll_statusA

Report whether the file-based piano-roll bridge is installed/reachable.

Use this to verify the pyscript is in place before issuing edits.

piano_roll_add_notesA

Add notes to the currently-open piano roll (works WITHOUT MIDI).

notes: list of {midi: int, time_bars: float, duration_bars: float, velocity: 0..1, pan?: -1..1}.

Before calling, make sure:

  1. In FL Studio, open the target channel's piano roll (double-click the channel in the Channel Rack).

  2. Pick ComposeWithLLM from the piano-roll scripts dropdown.

piano_roll_add_chordC

Add a chord at a given bar position.

piano_roll_add_arpeggioC

Arpeggiate a chord into sequential notes.

piano_roll_delete_notesC

Delete notes by {midi, time_bars} match.

piano_roll_clearA

Remove every note in the currently-open piano roll.

piano_roll_readA

Read back the current piano-roll state (returns all notes).

piano_roll_read_patterns_autolocateA

Read notes across patterns using FL's auto-located piano-roll channel.

This avoids explicit channel retargeting/openEventEditor. It changes only the selected pattern, triggers ComposeWithLLM, and records the selected channel FL reports after each pattern switch.

After the sweep, if navigate_after_pattern is provided, FL is left on that pattern (and optionally channel) so the UI is already showing the edit target while the LLM plans its changes. Use this whenever you know ahead of time which pattern will be edited first.

piano_roll_write_patternA

Write notes to a specific channel × pattern using autolocate-style switching.

Mirrors piano_roll_read_patterns_autolocate: switches to the target pattern via patterns.select (no openEventEditor, no visual flicker), selects the channel, then stages a clear+add_notes action sequence and fires Cmd+Opt+Y.

Args: channel: Channel rack index (0-based). pattern: Pattern index (1-based, as returned by patterns.list). notes: List of notes with midi, time_bars, duration_bars, velocity. clear_first: Clear the pattern before writing (default True). restore_start: Restore the original pattern/channel when done (default False — stays on last edited).

Returns: {ok, note_count, hotkey_sent, restored}

piano_roll_write_patternsA

Write notes to multiple channel × pattern pairs sequentially, restoring only at the end.

Mirrors piano_roll_read_patterns_autolocate: iterates through all writes in order without jumping back between each one, then restores to the original pattern/channel once at the very end.

Args: writes: List of {channel: int, pattern: int, notes: [...], current_note_count?: int}. Supply current_note_count from a prior read sweep to skip force_retarget for non-empty patterns. Omit or set to 0/None to always force_retarget (safe default). clear_first: Clear each pattern before writing (default True). restore_start: Restore the original pattern/channel after all writes (default False — stays on last edited).

Returns: {results: [{channel, pattern, ok, note_count, hotkey_sent}], restored}

piano_roll_quantizeB

Snap existing notes to a grid.

piano_roll_transposeC

Shift every note by N semitones.

piano_roll_humanizeC

Add subtle timing+velocity randomisation.

piano_roll_duplicateC

Copy a time-range of notes to another location.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
statusBridge + transport quick status.
projectFull project metadata: tempo, signature, channels, mixer, patterns, selection.
transportLive transport state (is_playing, position, tempo, loop mode).
channelsFull channel rack as JSON.
mixerAll mixer tracks as JSON.
patternsAll patterns in the project.
playlistPlaylist tracks + clips.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/marconadas/MacFLStudioMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server