fender-studio-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STUDIO_ONE_SONGS | No | Colon-separated list of song folders. Default: ~/Documents/Studio One/Songs. | ~/Documents/Studio One/Songs |
| STUDIO_ONE_PROFILE | No | Studio Pro/Studio One user profile folder. Defaults to the newest …/PreSonus/Studio One * user folder. | |
| STUDIO_ONE_MCP_HOME | No | Data folder containing the mailbox. Default: ~/Library/Application Support/studio-one-mcp. | ~/Library/Application Support/studio-one-mcp |
| STUDIO_ONE_MCP_MIDI_PORT | No | MIDI port used for the bridge. Defaults to the first MIDI output whose name contains 'IDAC'; otherwise the server’s own MIDI port. | |
| STUDIO_ONE_MCP_VIRTUAL_PORT | No | Name of the virtual MIDI port the server publishes on macOS. | studio-one-mcp |
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": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| song_listB | List Studio One songs on disk (newest first), from ~/Documents/Studio One/Songs or $STUDIO_ONE_SONGS. |
| song_readA | Read a Studio One song from its .song file: tempo, time signature, markers, arranger sections, tracks with takes/clips (bar, beat and seconds) and instrument notes, mixer channels with volume/pan/mute/solo, automation mode and plug-in inserts (with each plug-in's saved settings in its own units, for PreSonus plug-ins), automation envelopes that have points, the song notes and channel notes, and media files. Reflects the last save, not unsaved edits. Notes, settings and envelope points are in detail=full. |
| song_historyA | List a song's autosaves and backups in its History folder (newest first). Each path can be passed to song_read to compare versions. |
| song_diffA | What changed between two saves of a song: tempo, meter, markers, sections, tracks (added, removed, renamed, active take, events, notes), mixer (level, pan, mute, solo, automation mode, output, plug-ins and their saved settings) and automation envelopes. Compares |
| live_statusA | Is a running Studio One reachable through the MCP Bridge device? Explains how to fix it if not. |
| live_channelsA | List the mixer channels of the song open in Studio One right now, with live volume, pan, mute, solo, record-arm, input monitoring, automation mode, and routing (input and output names; read-only). |
| live_set_channelA | Change one mixer channel in the running Studio One. Values are Studio One normalised values (volume/pan 0..1, pan 0.5 = centre; mute/solo/recordArmed/monitor 0 or 1). Returns before/after. |
| live_set_automationA | Set a mixer channel's automation mode in the running Studio One: off, read, touch, latch or write (live_channels shows each channel's mode). Touch, latch and write record fader and plug-in moves as automation while the song plays. Returns before/after. |
| live_songA | The song open in Studio One right now: title, transport (playing, recording, loop, position, tempo, loop range, precount, preroll), track count and selected tracks. Unlike song_read this includes unsaved changes. |
| live_tracksB | Tracks of the song open in Studio One right now, with media type, colour, mixer channel, number of takes, selection, and (by default) their events: name, start/end/length in seconds, muted. |
| live_notesA | Notes in an instrument track's parts in the running Studio One, unsaved edits included: pitch (MIDI number and name, middle C = C3 as Studio One shows it by default), velocity 0-127, start/end/length in seconds, and start in quarter-note beats. Read-only. |
| live_edit_notesA | Edit the notes of an instrument track's parts in the running Studio One, through the MCP Edit task (installed with the device). Operations run in order: transpose {semitones}, velocity {set 1-127 | add}, move {beats}, length {set beats | scale}, quantize {grid like 1/16, 1/8T (triplet) or 1/8. (dotted), strength 0-1; note starts only, Studio One's own quantize setting is left alone}, delete (needs a filter), add {notes: [{pitch, beat, length, velocity}]}. Each can take a filter (pitch, pitches, from/to beats). Beats are the ones live_notes reports. Returns what each operation touched and the notes afterwards. One live_undo per operation, usually; check with live_notes. |
| live_select_trackA | Select a track by exact name in the running Studio One, so that selection-based commands (live_command) act on it. Replaces the selection unless exclusive is false. |
| live_transportC | Press a transport button in the running Studio One and return the resulting transport state. |
| live_set_transportB | Set transport values in the running Studio One: tempo (bpm), playhead position (seconds), loop / precount / preroll on or off. Returns the resulting transport state. |
| live_markersA | Markers of the song open in Studio One right now: number, position (seconds and bar display) and name. Briefly moves the playhead to read them and puts it back; refuses while playing. Only markers 1-20 are visible. |
| live_add_markerA | Add a marker in the running Studio One at a position (seconds or bars; default: the playhead), optionally named. The playhead is left where it was. |
| live_rename_markerA | Rename a marker in the running Studio One, by number (as live_markers numbers them) or by its current name. One live_undo reverts it. |
| live_delete_markerB | Delete a marker in the running Studio One, by number (from live_markers) or by exact position in seconds. |
| live_select_eventsA | Select all events on the named track(s), or on every track, or clear the event selection. Then use live_command for selection-based edits, e.g. Event/Mute Events, Event/Unmute Events, Event/Toggle Mute, Edit/Split at Cursor, Event/Quantize, Event/Transpose Events Up, Track/Activate Next Layer (switch takes), Edit/Undo. |
| live_set_loopA | Set the loop range in the running Studio One (start/end in seconds or as bars like "9.1.1.0"), and optionally turn looping on or off. Returns the transport state. |
| live_takesA | A track's takes (layers) in the running Studio One: list them (with their names from the last save), switch to the next/previous take or to take N (goto, 1-based), add an empty take or duplicate the active one (each one live_undo), unpack all takes to separate tracks, or recall a retrospective recording (instrument tracks: what you played while not recording). Returns the number of takes and the names of the clips now playing. Takes do not wrap: next on the last take (or previous on the first) changes nothing. |
| live_saveA | Save the song open in Studio One (File/Save), or save it as a new version (File/Save New Version) to keep the old one. |
| live_undoA | Undo the last edit(s) in the running Studio One; returns how many ran (a refused undo counts 0). Check the result rather than counting steps: mixer parameter changes (volume, monitor, plug-in parameters, automation mode...) become undo steps that are recorded late and merge, so an undo can land on one of those instead of the edit you just made. Undo again until your edit is gone. |
| live_redoC | Redo edit(s) in the running Studio One. |
| live_track_stateA | Toggle a track's arm / monitor / mute / solo, hide it, or duplicate it, by track name; showAll unhides every track. Returns the track's mixer channel afterwards. The track selection is restored. Mute is not on Studio One's undo stack: revert it by toggling again, since live_undo would undo the edit before it. |
| live_edit_eventsA | Edit all events on one track in the running Studio One: mute, unmute, toggleMute, quantize, transposeUp/Down (instrument parts), split / trimStart / trimEnd at a time (seconds or bars), merge, delete. Returns the track's events afterwards. Use live_undo to revert. |
| live_add_trackA | Add a track to the song open in Studio One: audioMono (default), audioStereo, instrument, folder or automation. |
| audio_captureA | Record what the running Studio One plays, to a WAV file (32-bit float, the session's rate), through a macOS process tap: nothing is installed and the audio output is unchanged. If the transport is stopped, it plays from from_seconds / from_bars (or the playhead) for the capture, then stops and puts the playhead back; the metronome click and precount are off while it plays. Audible. Never records in Studio One. Pass the file to audio_analyze. Recordings go to the studio-one-mcp data folder unless out is given. |
| audio_analyzeA | Measure a WAV (an audio_capture, a bounce, any mix): integrated / short-term / momentary loudness and LRA (EBU R128), sample and true peak, crest factor and PLR, energy per band (sub 20-60, low 60-200, low-mid 200-500, mid 500-2k, presence 2k-6k, air 6k-20k Hz) as dB of the total, low end below 120 Hz (mono or not), L/R correlation over time, stereo width per band, loudness per section, and flags worth acting on. With reference (another WAV, e.g. a capture before a change or a commercial track), also the difference per measure; band differences are loudness-independent. For before/after on a short excerpt use loudnessDeltaLu (ungated): integrated LUFS is gated for whole songs and can hide a change. Repeat captures of the same passage differ by about ±0.2 dB true peak and ±3% width (start timing), so smaller moves are noise. Writes a PNG of the plots next to the file. |
| live_metersA | Peak meters of every mixer channel in dB (-144 = silence). With duration_ms, samples repeatedly (e.g. while playing) and returns the highest peak per channel, plus which channels clipped (above -0.1 dB). |
| live_insertsB | Plug-ins on each mixer channel of the running Studio One (or one channel): slot, plug-in name, bypassed; plus the channel's bypass-all switch. |
| live_pluginsB | The plug-ins installed in the running Studio One, by name (PreSonus, VST and AU), optionally filtered: audio effects (default; the names live_add_plugin and live_add_send take) or instruments (kind "instrument"; the names live_add_instrument_track takes). |
| live_add_pluginA | Add a plug-in by name (from live_plugins) to a channel's inserts in the running Studio One. Returns the channel's inserts afterwards. One live_undo removes it (the add goes through the MCP Track Edit task). |
| live_add_sendA | Add an effect send to a channel in the running Studio One: Studio One makes a new FX channel with the plug-in (by name, from live_plugins) and a send to it, e.g. a reverb or delay send. Returns the FX channel and the channel's sends (set the level with live_set_send). Sending to an existing bus or FX channel cannot be scripted. Not reliably undone by live_undo, so ask before adding when the user has not clearly asked for it. |
| live_add_instrument_trackA | Add an instrument track in the running Studio One with a new instance of an instrument (by name, from live_plugins with kind "instrument", e.g. "Mai Tai", "Presence"), optionally named. One live_undo removes the track and the instrument. |
| live_bypass_insertA | Bypass or un-bypass one plug-in slot on a channel in the running Studio One (slot number from live_inserts), or the whole insert rack with slot "all". |
| live_sendsC | Sends on each mixer channel of the running Studio One (or one channel): destination, level (0..1, Studio One normalised) and mute. |
| live_set_sendB | Set a send level (0..1) and/or mute on a channel in the running Studio One (index from live_sends). |
| live_plugin_paramsA | Parameters of one plug-in on a channel in the running Studio One (slot from live_inserts): name, value, display text (e.g. "2.0:1", "-12.0 dB"), range and normalised value. Studio One cannot list a plug-in's parameters, so names come from its presets and Studio One's remote-control map; this works for PreSonus plug-ins. For others, pass the names in |
| live_set_plugin_paramA | Set one plug-in parameter on a channel in the running Studio One (names from live_plugin_params). Give exactly one of: text, as Studio One displays it (e.g. "4.0:1", "-12 dB", "Standard"); normalized, 0..1; or value, the raw value within its min..max. Returns before/after; to revert, set the "before" value. |
| live_recordA | Record in the running Studio One. This writes a new take into the song, so it only runs with confirm: true, which should mean the user asked for it. Optionally arms a track first, starts from a position (seconds or bars), sets precount, and stops after |
| live_commandA | Run any Studio One command by category and name, exactly as listed in Studio One → Keyboard Shortcuts (e.g. Transport/Start, Transport/Stop, Transport/Record, Edit/Undo, File/Save, View/Console). Use live_list_commands to discover names. With check_only, only reports whether the command is currently enabled, without running it. |
| live_list_commandsA | List Studio One commands available to live_command (about 1,000 on Studio One 5), optionally filtered by a substring. with_state adds whether each is enabled right now; many need a selection or an open editor. |
| live_tempoA | Tempo map of the running Studio One (stopped). at: tempo at one or more positions. set: change the tempo of the segment containing a position (default: the playhead). insert: add a tempo change at a position with its bpm. Removing one needs live_undo (usually two steps), and Studio One has refused an undo right after a tempo edit, so check with action at afterwards; setting a segment back is exact. Positions are seconds or bars like "9.1.1.0"; the playhead is put back. For the whole saved map, and time signatures, use song_read. |
| live_bounceA | Bounce all events on one track in the running Studio One: inPlace renders them into a single new event (with plug-ins), toNewTrack renders them onto a new track of the same name and mutes the originals. No dialogs; one live_undo reverts it, but the rendered .wav stays in the song's Bounces folder. Exporting a mixdown or stems is not offered: those open dialogs. |
| live_mix_snapshotA | Save the whole mix of the running song under a name (every channel's volume, pan, mute, solo, input monitoring, and each send's level and mute), restore it later, or list this song's snapshots. Restore sets only what differs. Record-arm and automation mode are not included. Mixer changes are not reverted by one live_undo; restore a snapshot instead. |
| live_plugin_snapshotB | Save a plug-in's current settings under a name, restore them onto the same kind of plug-in (any channel), or list saved snapshots. A stand-in for presets that works remotely: it stores every known parameter's raw value (PreSonus plug-ins; names as in live_plugin_params) in the studio-one-mcp data folder. Restore only sets parameters that differ. |
| live_record_setupA | Recording setup in the running Studio One. With no arguments, reads the metronome: click, precount, precount length in bars, preroll. Set any of those, and/or record modes: replace, loopTakes or loopMix, takesToLayers, inputQuantize, noteErase (true/false). Record modes cannot be read back from Studio One, so they are reported as set, not confirmed. Auto Punch: punch off, in, out or both, and punchFrom/punchTo for the range (seconds or bars; Studio One punches between the loop locators, so this sets the loop range without turning looping on). The result shows punch-in and whether any autopunch is on (punch-out alone cannot be read separately once punch-in is on). |
| live_add_busA | Create a bus for some tracks (their outputs are routed into it) or a VCA that controls them, in the running Studio One. Returns the new channel and, for a bus, where each track now goes. One live_undo removes it. The track selection is kept. |
| live_track_editA | Edit a track by exact name in the running Studio One: rename (and its mixer channel), color ("#rrggbb"), remove, move (reorder: put it just before or after another track; both at the top level, not inside a folder), route (send its channel's output to a bus or output, by channel name), folder (move it into a folder track, creating it with create: true; the folder is expanded so the track stays visible to these tools), or renameEvents (name every event on it, numbered in time order if asked). Rename and colour are not on the undo stack; route is set back by routing to the "before" channel the result gives; remove, move, folder and renameEvents undo with live_undo. The track selection is kept. Move, route, folder and renameEvents run through the MCP Track Edit task installed with the device. |
| live_arrangerA | Arranger sections in the running Studio One. sections: list them (numbered in song order). goto: a section by number or name; while playing it jumps at the arranger's sync point, while stopped it moves the playhead to the section's start. next / previous: step while playing. syncMode: when jumps happen (off = immediately, 1bar, 2bars, 4bars, end of section); changing it is an undo step. createFromMarkers: make sections between markers. Editing (each one live_undo): add {start, end, name}, rename {section, name}, resize {section, end}, move {section, start}, remove {section}; these change only the section, not the events under it. With its content, on every track: copy {section, to} inserts a copy at a position (what follows moves later); delete {section} removes it and everything in it, closing the gap; move {section, to, content: true} does both (two undo steps). Positions are seconds or bars like "9.1.1.0". The loop range is kept. |
| live_macrosA | List the macros in the running Studio One (Macros panel: built-in and your own) by title, optionally filtered; with_state adds whether each can run right now (most act on the selection). |
| live_run_macroA | Run a Studio One macro by title (from live_macros), e.g. "Normalize Audio & Set Peaks To -12". Macros are chains of commands that usually act on the selected events or tracks (see live_select_events / live_select_track) and can edit the song; most edits undo with live_undo. check_only reports whether it is enabled without running it. |
| live_eventsA | One event (audio clip or instrument part) on a track in the running Studio One. list: the track's events, numbered in time order, with start/end in seconds and, for audio, gain (dB) and fade lengths. edit {event, and any of: to (new start), to_track (move it to another track), gain_db (set), add_gain_db, fade_in / fade_out (seconds, audio)}: one live_undo reverts the whole edit. duplicate {event, times}: copies right after it, times times. copy {event, to, to_track?}: pastes a copy at a position (uses the clipboard). Positions are seconds or bars like "9.1.1.0". |
| live_time_signatureB | Time signatures in the running Studio One. at: the signature in effect at positions (seconds or bars; default the start). insert {bar, numerator, denominator}: a change at the start of a bar. remove {bar}: the change at that bar. Each insert or remove is one live_undo. |
| live_write_automationA | Write volume or pan automation on a channel in the running Studio One, along points [{at, db}] (volume in dB), [{at, pan}] (-1 left .. 1 right) or [{at, value}] (0..1 as live_set_channel takes it), straight lines between them. Studio One gives scripts no way to add envelope points, so this plays the range once in real time with the channel in Write mode and the fader following the curve (audible, and it replaces that parameter's automation in the range), then leaves the channel in Read. Only runs with confirm: true. For fades inside one clip, prefer live_events fade_in/fade_out. |
| live_changesA | What changed in the song open in Studio One since the previous call: tracks added, removed, renamed or reordered, events added, removed or moved on each track, mixer changes (volume, pan, mute, solo, arm, monitor, automation mode, output, plug-ins), tempo, loop, and markers and arranger sections added, removed, renamed or moved. The first call for a song only takes a look. Changes are net (moved and moved back is no change) and do not say who made them. reset: start over from now. |
| live_evalA | Run JavaScript inside Studio One's script engine and return the result (host objects are described to a depth). Globals: Host, PreSonus, component, describe. Only works when the bridge was installed with --allow-eval. Useful for exploring the undocumented object model, e.g. Host.Objects.getObjectByUrl('://studioapp/DocumentManager'). Do not throw, and check that a host member exists (typeof) before calling it: either one pops a modal Scripting Error dialog in Studio One. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 59 tools
Most tools target distinct Studio One resources and actions, but there is meaningful overlap: live_command duplicates many specialized commands, live_events/live_edit_events/live_track_edit all modify events, and live_tracks/live_events/live_notes are easy to confuse for inspection. The detailed descriptions help, but the large surface still creates real selection ambiguity.
The naming is mostly consistent snake_case with recognizable prefixes: live_ for the running Studio One, song_ for saved song files, and audio_ for capture/analysis. Some tools use noun-style getter names while others use verb_style action names, but the pattern remains readable and predictable overall.
At 59 tools, the surface is very heavy for an MCP server and well beyond the typical 3-15 range. The DAW domain is broad, but many operations could be consolidated, especially given the generic live_command escape hatch and several overlapping inspection/edit tools.
The surface covers a wide range of Studio One workflows: transport, tracks, events, notes, mixer channels, inserts, sends, markers, arranger sections, automation, recording, undo/redo, snapshots, and audio analysis. Minor gaps remain, such as no explicit song creation/open/close and no mixdown or stem export, but most workflows are reachable.