Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOGIC_MCP_REMOTENoPin an rclone remote used for delivery. With several remotes configured and none pinned, delivery refuses rather than guessing which account your audio should land in.

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
logic_systemC

Health, permissions, MIDI ports, menu bar (menu/press_menu with path like ['Track','New Audio Track']), and Accessibility exploration (ax_dump / ax_find) of Logic's UI.

logic_transportC

Transport with verified readback (MCU LEDs + Accessibility). play/record via AX press; stop via MCU or Space.

logic_tracksA

Track list + per-track ops. Target by index (1-based) or name. Writes go via MCU (mute/solo/arm/select/volume) with Accessibility readback, or AX nudging as fallback. set_volume takes db (-inf..+6) or raw value 0-233 (173 = 0 dB); set_pan takes value 0-127 (64 = center). set_color takes color = 1..96 | '#rrggbb' | 'blue' | 'dark green' | 'light rose' (see action='palette'); verified by the palette's selection ring. list with colors=true samples header icon tints (approx).

logic_midiC

Send MIDI into Logic's Virtual In (lands on the record-armed track) or drive the MCU surface.

logic_projectC

Project lifecycle via AppleScript + key commands. save/new/close use key commands (need Accessibility).

logic_offlineA

Read or rename track/folder/group names INSIDE a .logicx file, without driving Logic's UI.

list:   every patchable name in the project (kind: track | folder | group), plus counts.
rename: apply changes [{"old","new","kind"?}] to the project's ProjectData. By default writes to an
        APFS clone "<name> OFFLINE.logicx" next to the original (instant, no data copied); in_place
        patches the original after saving ProjectData.bak, and is refused while Logic has that
        document open (Logic would overwrite it on save). Returns uncertain: only Logic reopening
        the file proves the edit, so open the result and read the names back.
logic_keysB

Escape hatch: send any key chord ('cmd+shift+n') or a named Logic command from key_map to Logic.

logic_exportA

Render audio out of Logic and verify it landed on disk.

bounce  - one pass, several formats at once: formats=["wav","mp3"]. Optional start_bar/end_bar limit the range.
          sample_rate like "44.1 kHz", bit_depth like "24-bit", normalize "Off", mode "Offline".
stems   - File > Export > All Tracks as Audio Files, one file per track (the input for level analysis).
options - read the current bounce dialog settings without changing anything.
dismiss - close any stray Logic dialog (escape hatch).
logic_deliverA

Get finished audio out of Logic and into cloud storage.

bounce_and_upload - the whole chain: render the project to `formats`, verify the files, upload them,
                    and return share links. Give directory + filename + formats + folder.
upload            - push existing local `paths` to remote:folder.
remotes / list    - what storage is configured, and what is already in a folder.
setup             - how the user connects their OWN cloud account.

Uploads go to the user's own remote: this server ships no credentials and no default account. The
remote comes from `remote`, else $LOGIC_MCP_REMOTE, else the single configured remote; with several
configured and nothing pinned it refuses rather than guessing. Run `setup` for the exact commands —
the user runs them themselves, since the flow ends in a browser sign-in to their own account.
logic_pluginsA

Read and write plugin parameters in real units (dB, Hz, %, ratios).

insert   - add a plugin to a track by name, e.g. plugin="Channel EQ" (uses Mix > Search and Add Plug-in).
describe - every parameter, switch and menu in an open plugin window, with its current readout.
get      - one parameter's current value.
set      - drive a parameter to a target: value="+3 dB", "1.2 kHz", "80 Hz", 2.0. Verified by re-reading
           the plugin's own readout. A parameter whose band is switched off is enabled first when
           enable_band is true, otherwise it refuses rather than silently doing nothing.
switch   - toggle a named switch (an EQ band, Analyzer, HQ...).
preset   - read the current preset name.
windows / close - list or close open plugin editors.
logic_levelA

Measure rendered audio and balance the mix from it.

Logic's meters report clipping only, with no numbers, so levels are measured from audio rather than read
off the UI — which is what a human engineer does anyway.

analyse         - loudness (gated LUFS per BS.1770), true peak, crest, stereo correlation and spectral
                  balance for each file in `paths`.
plan            - the above, plus a proposed gain and pan per stem. Nothing is applied.
export_and_plan - render one stem per track out of Logic first, then plan.
apply           - carry the plan out on the matching tracks, verified in dB. dry_run reports what it
                  would do without touching anything.

mode matters. "relative" adds each gain to the track's CURRENT fader, which is right when the stems were
rendered through those faders (export_and_plan). It is NOT idempotent — running it twice applies the move
twice. "absolute" treats each gain as the fader position itself, which is right for stems that came from
outside this project, and is safe to re-run.
logic_oscA

Drive Logic through its built-in TouchOSC "LogicPad" control surface over OSC (UDP), with feedback.

We advertise a Bonjour service in the TouchOSC Mk1 format, Logic binds it as a control surface (one-time
alert "OSC app TouchOSC wants to connect" -> Connect, pressed automatically), then Logic streams its state
(track names of the current 8-strip bank, select/mute/solo, volumes, meters, bar, SMPTE time, transport)
and accepts the fixed LogicPad address map. Faster and more reliable than Mackie emulation for transport,
selection and mixer moves; every result is read back from Logic's own OSC echo.

connect        bind the device (idempotent).            status    snapshot of everything Logic last sent.
transport      command=play|stop|record|cycle|rewind|forward|click|soloreset (record starts recording on
               armed tracks -- only on explicit request).
bank           command=bank+|bank-|track+|track-  (move the 8-strip window; strips are 1..8 inside it).
select|mute|solo  strip=1..8 (mute/solo toggle; readback says the new state).
volume         strip=1..8 value=0..1 (fader, 0.75 ~ 0 dB).   master_volume value=0..1.
send           address=/1/... args=[...] raw message; feedback returns what Logic sent in the last `wait` s.

Selected-track pages (select a track first):
strip          inserts (slot, name, bypassed), focused plug-in name + its 16 parameters (name, 0..1, display),
               sends, pan, mute/solo/arm of the SELECTED track.
eq             the Channel EQ on the selected track: 8 bands (1 high-pass, 2 low shelf, 3-6 peaks, 7 high shelf,
               8 low-pass) with on/gain/freq/q (+slope on 1 and 8), each as 0..1 and Logic's display value.
               present=false means the track has no Channel EQ (insert one via logic_plugins first).
eq_set         band=1..8 param=gain|freq|q|slope|on, then EITHER value=0..1 (raw) OR target=<number in
               Logic's units: dB, Hz, Q> which is reached by bisection on Logic's display value
               ("cut the mud": band=4 param=freq target=300; param=gain target=-3; param=q target=1).
plugin         command=slot+|slot-|page+|page-|bypass|open  (bypass/open take slot=1..12) on the selected track.
param          list the focused plug-in's parameters (same as strip.params).
param_set      param=<n or exact name> + value=0..1 or target=<number in the display unit>; read back.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
res_health
res_transport
res_tracks
res_app
res_markersThe project's marker list. Marker text lives in AXDescription, not AXValue — reading values gives a row per marker with an empty name.
res_mixerMixer state for the 8 strips the OSC surface is showing, plus the selected channel strip. Reports only what Logic echoed back. It is the surface's CURRENT bank, never a dead-reckoned one: assuming the bank once silently set three wrong tracks to -6.2 dB on a real mix. Strictly read-only, and that is a deliberate constraint rather than a convenience. Reading a resource must not change anything, so this NEVER binds the surface (which would raise Logic's "OSC app wants to connect" alert and click it) and never switches the surface page (which is a visible change and drops feedback for the page being left). It reports the already-connected device or explains how to connect.
res_regionsRegions on the arrange canvas. Offscreen regions are listed with visible=false and no geometry rather than omitted, so 'none here' and 'cannot see from here' stay distinguishable.

TDQS

B3.4/5.0

Scored across 12 tools

Disambiguation3/5

Several capabilities are duplicated across channels: transport appears in both logic_transport and logic_osc (play/stop/record), mixer moves in both logic_tracks and logic_osc (volume/mute/solo), and plugin parameters in both logic_plugins and logic_osc (eq_set/param_set). The detailed descriptions explain when each channel is preferable, which prevents total confusion, but an agent still faces genuine misselection risk between the MCU/AX path and the OSC path.

Naming Consistency5/5

Every tool follows the same logic_<subsystem> pattern (logic_system, logic_tracks, logic_project, logic_plugins, etc.). The naming is highly predictable and the domain word cleanly signals the scope of each tool.

Tool Count5/5

12 tools is well within a healthy range and each maps to a distinct subsystem (transport, tracks, MIDI, project, export, plugins, level, OSC, etc.). Nothing feels padded or missing at the count level.

Completeness4/5

The surface is remarkably broad, covering health/permissions, transport, tracks, MIDI, project lifecycle, offline .logicx edits, export, cloud delivery, plugin control, level analysis, and OSC. Minor gaps remain around timeline/region editing, marker management, and bus/aux routing, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues