Command line
device list
List devices loaded on a track
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …)
device drum-pads
List a Drum Rack’s pads (index, name, trigger note) on a track
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …)
default:"0"
Index of the Drum Rack device in the track’s chain (default 0)
device load
Load a stock device, User Library preset, or plug-in (VST3/AU) onto a track
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …)
Browser path or URI. Accepts (a) classic stock-device paths like ‘Instruments/Operator’, (b) preset ‘.adg’ browser paths like ‘Drums/F9 TK Menu_ Hat Closed V2.adg’ (auto-resolved to their query: URI), or (c) query: URIs from find_instruments_by_tag/show_instrument, including plug-in URIs from the Plug-Ins browser section.
PartType shorthand (Bass, Pad, Lead, …); resolves through defaults.instruments
Insert position in device chain (1-based: 1 = first slot). Omit to let Vibrai pick a valid slot for the device family — audio effects append after the instrument, MIDI effects and instruments insert at the head — since Live enforces MIDI effects then instrument then audio effects.
device browse
List immediate children of a Live browser path
Browser path; empty for the snapshot’s top-level folders. Examples: “Drums”, “Instruments/Operator”, “Packs/F9 GALAXY”, “User Library”.
device default
Show the resolved default device for a part-type
required
PartType to resolve
Resolve genre-aware defaults against this .vibrai file (default: <current-directory-name>.vibrai in the working directory)
Report the stock-only view: skips explicit defaults.instruments overrides AND tagged instruments.
device delete
Remove a device from a track’s top-level device chain by index
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …)
required
Device chain position (1-based: 1 = first device in the chain)
device load-defaults
Load each part’s default instrument from a .vibrai project onto its track
Path to the .vibrai file whose parts get their default instruments
Resolve instruments from stock content only: skips explicit defaults.instruments overrides AND tagged instruments. For demos/testing without third-party packs.
device set-param
Set one device parameter to a static value (e.g. a filter cutoff)
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …).
required
Device ID, 1-based chain position, or a name substring (e.g. “Auto Filter”).
required
Parameter name (exact, then case-insensitive) or 0-based index. See ‘vibrai automation params’.
A number in the parameter’s [min, max] domain (see ‘vibrai automation params’), or a label for a quantized parameter (Band-pass). NOT display units: an Auto Filter’s Frequency runs 0..1, where 0.5 reads as 632 Hz. Mutually exclusive with —raw and —label.
Value as a normalized 0.0-1.0 fraction of the parameter’s travel, scaled into its own [min, max] domain — use this when you don’t know the native range. Mutually exclusive with the positional value and —label; not accepted on quantized parameters.
Label for a quantized parameter, e.g. “Band-pass” — an explicit alternative to passing the label as the positional value, needed when the label itself looks numeric (a vocabulary entry like “12” would otherwise be parsed as a native value). Mutually exclusive with the positional value and —raw.
device apply-params
Set several parameters on one device at once (all-or-nothing)
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …).
required
Device ID, 1-based chain position, or a name substring.
Parameter assignment, e.g. —set Frequency=0.5. Repeatable. Values are in the parameter’s own [min, max] domain, not display units. A quantized parameter takes its label (—set “Filter Type=Band-pass”) or its index. Prefix with raw: for a normalized 0-1 fraction of travel, scaled into the parameter’s own domain (—set Pitch=raw:0.75).
device set-state
Bypass or un-bypass a device
required
Track handle (trk_42) OR 1-based number (1, 2, …) OR ordinal (first, second, …).
required
Device ID, 1-based chain position, or a name substring.
Activate the device.
Bypass the device.
MCP tools
load_device
Load a stock device, User Library preset, or plug-in (VST3/AU) onto a track. Specify either path OR part_type, not both. The path argument accepts (a) classic browser paths like “Instruments/Operator” for stock devices, (b) query: URIs from find_instruments_by_tag for user-tagged presets, or (c) plug-in URIs from the Plug-Ins browser section. part_type=Bd/Snare/HiHat/Perc/Crash/Fill/Roll/Drums loads the deterministic default kit (the stock 909 Core Kit), falling back to an empty “Instruments/Drum Rack” + warning when it is unavailable (use browse_devices “Drums” and load_device on a specific kit preset to override). Tonal part_types (Bass/Pad/Chord/etc.) load synths that sound by default.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
String
Browser path or URI. Accepts (a) classic stock-device paths like ‘Instruments/Operator’, (b) preset ‘.adg’ browser paths like ‘Drums/F9 TK Menu_ Hat Closed V2.adg’ (auto-resolved to their query: URI), or (c) query: URIs from find_instruments_by_tag/show_instrument, including plug-in URIs from the Plug-Ins browser section.
Nullable`1
PartType shorthand; resolves through defaults.instruments
String
Insert position in device chain (1-based: 1 = first slot). Omit to let Vibrai pick a valid slot for the device family — audio effects append after the instrument, MIDI effects and instruments insert at the head — since Live enforces MIDI effects then instrument then audio effects.
browse_devices
List immediate children of a Live browser path. Reads the Vibrai instrument-browser snapshot (written by the Vibrai Live remote script via SP9) in-process — no live Ableton connection required. Empty path returns the snapshot’s top-level folders. Examples: ‘Drums’ (drum kit presets), ‘Instruments/Operator’ (Operator presets), ‘Packs/<PackName>’ (pack contents), ‘User Library’ (user-saved presets). Returns an empty list when the snapshot is missing — run install_vibrai_remote_script and refresh in Live.
String
Browser path string; empty = top-level snapshot folders.
delete_device
Remove a device from a track’s top-level device chain by index. v1 scope: top-level chain only — nested racks (Drum Rack pads, Instrument Rack chains) are not addressable through this call. The device is gone immediately; there is no undo. Use list_devices to discover indices.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
String
required
Device chain position (1-based: 1 = first device in the chain)
list_devices
List devices currently loaded on a track in chain order. Returns each device’s index, id, name, class info, and current is_active (device.is_active, Live’s bypass switch) — pass device_id to list_automation_params / get_automation / write_automation.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
list_drum_pads
List the pads of a Drum Rack on a track: each pad’s index, name, and the MIDI note that triggers it. Use this to see which sounds a loaded kit maps to (e.g. which note is the snare). Returns an empty list when the device at device_index is not a Drum Rack.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
Nullable`1
Index of the Drum Rack device in the track’s chain (default 0 = first device)
get_default_instrument
Report the resolved instrument for a part-type without loading it: precedence is explicit defaults.instruments → tagged → genre stock default → built-in generic. Pass project_path to resolve against a project’s genre; stock_only reports the stock-only view (skips explicit + tagged).
PartType
required
PartType to resolve
String
Path to a .vibrai file to resolve genre-aware defaults against (defaults to <current-directory-name>.vibrai in the working directory)
Boolean
Report the stock-only view: skips explicit defaults.instruments overrides AND tagged instruments.
load_default_instruments
Load each MIDI part’s default instrument from a .vibrai project onto its track, so the rendered song is audible. Tonal parts get their resolved synth (defaults.instruments override or built-in); drum parts get the deterministic default kit (the stock 909 Core Kit), falling back to an empty Drum Rack + warning when it is unavailable. Idempotent: a track that already has a device is skipped. Run this after generate (or pass with_instruments=true to generate). live_track_id in the result is 1-based, matching list_tracks and load_device.
String
Path to the .vibrai file (defaults to <current-directory-name>.vibrai in the working directory when omitted)
Boolean
Resolve instruments from stock content only: skips explicit defaults.instruments overrides AND tagged instruments. For demos/testing without third-party packs.
set_device_param
Set one device parameter to a static value. value is a number in the parameter’s own [min_value, max_value] domain — NOT display units: an Auto Filter’s Frequency runs 0..1, where 0.5 reads as 632 Hz. Call list_automation_params first to see each parameter’s range, its current display_value, and its value_items when quantized. Don’t know the native range? Pass value_raw instead: a normalized [0, 1] number scaled into [min_value, max_value] for you. For a quantized parameter pass label (“Band-pass”) or its index as value. Exactly one of value / value_raw / label. Returns that ONE parameter as Live reports it AFTER the write, including display_value, so you can see what the number meant. For time-varying changes use write_automation.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
String
required
1-based position: 1 = the first device in the chain, 2 = the second. NOT the
device_id list_devices reports — that field is 0-based, so add 1 to it. A name substring also works (case-insensitive, must match exactly one device).String
required
Parameter name (exact, then case-insensitive) or 0-based index
Nullable`1
Value in the parameter’s [min_value, max_value] domain. Mutually exclusive with value_raw and label.
Nullable`1
Normalized value in [0, 1], scaled into the parameter’s own [min_value, max_value] domain — use this when you don’t know the native range. Mutually exclusive with value and label.
String
Label for a quantized parameter, e.g. “Band-pass”. Mutually exclusive with value and value_raw.
apply_device_params
Set several parameters on ONE device in a single call. Each entry is “param=value”, e.g. [“Frequency=0.5”, “Resonance=0.3”, “Filter Type=Band-pass”]. Values are in each parameter’s own [min_value, max_value] domain, not display units; a quantized parameter takes its label or its index. Prefix a value with “raw:” (e.g. “Frequency=raw:0.5”) to pass a normalized [0, 1] number instead — scaled into the parameter’s own domain when you don’t know its native range. Everything is validated before anything is applied, so one bad entry lands nothing. Scoped to one device deliberately: that is the boundary where all-or-nothing is real, since Live offers no transaction across devices. Returns the parameters actually written, as Live reports them after the write.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
String
required
1-based position: 1 = the first device in the chain, 2 = the second. NOT the
device_id list_devices reports — that field is 0-based, so add 1 to it. A name substring also works (case-insensitive, must match exactly one device).String[]
required
Entries as “param=value”, e.g. [“Frequency=0.5”, “Filter Type=Band-pass”, “Resonance=raw:0.5”]. Must not be empty.
set_device_state
Bypass or un-bypass a device (Live’s device on/off switch, device.is_active). Lets you A/B a chain without deleting it. list_devices reports each device’s current is_active.
String
required
Track handle from list_tracks, e.g. “trk_42”. Copy verbatim.
String
required
1-based position: 1 = the first device in the chain, 2 = the second. NOT the
device_id list_devices reports — that field is 0-based, so add 1 to it. A name substring also works (case-insensitive, must match exactly one device).Boolean
required
true = active, false = bypassed