All 102 methods of OmniDAW API 0.21.0, generated from the live catalog (api.methods) of Omni, so this page always matches the API. Each method shows its effect (see Protocol and conventions), its parameters, and the request line you send over the connection.
Parameters are closed objects: an unknown or misspelled field is an invalid_params error. A track is referenced by its id (UUID string) or its 0-based index. Time is always in beats, levels in dB. The method descriptions are the same text an AI model receives as a tool description.
Session
Project information and saving.
session.info
Session Info · Effect: read · idempotent · since 0.1.0 · MCP tool: session_info
Overview of the open project: name, unsaved changes, sample rate, number of tracks, scenes and return buses, and whether the audio engine runs. Call this first to orient yourself.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"session.info","params":{}}
session.save
Save Project · Effect: control · idempotent · since 0.10.0 · MCP tool: session_save
Save the project with its audio collected next to it, to its own file or to an absolute .omni path (a new name becomes the project's). Does not overwrite another existing file unless asked.
| Parameter | Type | Required | Description |
|---|---|---|---|
overwrite | boolean | Replace another existing file (default false). | |
path | string | Absolute .omni path (default: the project's own). |
Request:
{"jsonrpc":"2.0","id":1,"method":"session.save","params":{"path":"C:/Music/song.omni"}}
Transport
Play, stop, seek and the project tempo.
transport.get
Transport State · Effect: read · idempotent · since 0.1.0 · MCP tool: transport_get
Play / record state, tempo (BPM), time signature and the playhead position in beats.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"transport.get","params":{}}
transport.play
Play · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_play
Start playback from the playhead. Does nothing if already playing.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"transport.play","params":{}}
transport.stop
Stop · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_stop
Stop playback (and a running recording, which is then kept).
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"transport.stop","params":{}}
transport.set_tempo
Set Tempo · Effect: edit · idempotent · since 0.1.0 · MCP tool: transport_set_tempo
Set the project tempo in BPM (40-240). Arrangement clips keep their musical position. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bpm | number | yes | Tempo in beats per minute. Range: 40 to 240. |
Request:
{"jsonrpc":"2.0","id":1,"method":"transport.set_tempo","params":{"bpm":124.0}}
transport.seek
Move Playhead · Effect: control · idempotent · since 0.1.0 · MCP tool: transport_seek
Move the playhead to a song position in beats (0 = song start).
| Parameter | Type | Required | Description |
|---|---|---|---|
beat | number | yes | Song position in beats. Range: 0 to 1000000. |
Request:
{"jsonrpc":"2.0","id":1,"method":"transport.seek","params":{"beat":16.0}}
Tempo map
Tempo changes and ramps over the song, time signature changes.
tempo.get
Get Tempo Map · Effect: read · idempotent · since 0.18.0 · MCP tool: tempo_get
The project tempo, the tempo map (tempo changes and ramps over the song) and the time signature changes.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"tempo.get","params":{}}
tempo.set_map
Set Tempo Map · Effect: edit · idempotent · since 0.18.0 · MCP tool: tempo_set_map
Replace the tempo map: points at song beats with a tempo, each a step or a linear ramp to the next. Timeline clips, automation, markers and the loop stay on their beats. Empty points = one tempo (transport.set_tempo). A step at a section boundary plays exactly; a ramp inside a MIDI clip is followed block by block. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
points | {beat, bpm, curve}[] | yes | Tempo points in time order. Up to 256 items. |
Fields of points[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
beat | number | yes | Song position in beats. Range: 0 to 1000000. |
bpm | number | yes | Tempo from here. Range: 20 to 999. |
curve | string | step = jump here, linear = ramp to the next point. One of: step, linear. |
Request:
{"jsonrpc":"2.0","id":1,"method":"tempo.set_map","params":{"points":[{"beat":0,"bpm":174},{"beat":96,"bpm":174,"curve":"linear"},{"beat":128,"bpm":160}]}}
tempo.set_time_signatures
Set Time Signatures · Effect: edit · idempotent · since 0.18.0 · MCP tool: tempo_set_time_signatures
Replace the time signature changes: from a bar on, so many beats of a unit (7/8, 3/4, …). Empty = the project signature everywhere. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
points | {bar, denominator, numerator}[] | yes | Signature changes in bar order. Up to 256 items. |
Fields of points[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
bar | integer | yes | Bar (0-based) where it starts. Range: 0 to 100000. |
denominator | integer | yes | Beat unit. One of: 1, 2, 4, 8, 16, 32. |
numerator | integer | yes | Beats per bar. Range: 1 to 32. |
Request:
{"jsonrpc":"2.0","id":1,"method":"tempo.set_time_signatures","params":{"points":[{"bar":0,"denominator":4,"numerator":4},{"bar":16,"denominator":8,"numerator":7}]}}
Groove
The project groove (swing, push, humanize) and which tracks play straight.
groove.get
Get Groove · Effect: read · idempotent · since 0.18.0 · MCP tool: groove_get
The project groove every clip follows (unless its track opts out): style, amount, grid, accent, lean, humanize; and which tracks play straight.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"groove.get","params":{}}
groove.set
Set Groove · Effect: edit · idempotent · since 0.18.0 · MCP tool: groove_set
Change the project groove (fields left out stay): style (straight, mpc, jazz, nested, push, drunk, samba, waltz, custom), amount 0-1, grid 8th/16th/32nd, accent, lean_ms, humanize_ms, humanize_vel, seed. Picking a style without amount or grid takes the style's own. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
accent | number | Depth of the style's dynamics. Range: -1 to 1. | |
amount | number | 0 = straight, 1 = the style's full shape. Range: 0 to 1. | |
grid | string | Subdivision that swings. One of: 8th, 16th, 32nd. | |
humanize_ms | number | Random timing up to this many ms. Range: 0 to 30. | |
humanize_vel | number | Random velocity, 0-1. Range: 0 to 1. | |
lean_ms | number | Beats 2 and 4 late (+) or early (-). Range: -40 to 40. | |
seed | integer | Humanize seed. Range: 0 to 4294967295. | |
style | string | Groove style. One of: straight, mpc, jazz, nested, push, drunk, samba, waltz, custom. |
Request:
{"jsonrpc":"2.0","id":1,"method":"groove.set","params":{"amount":0.55,"humanize_ms":4,"style":"mpc"}}
groove.set_track
Track Groove · Effect: edit · idempotent · since 0.18.0 · MCP tool: groove_set_track
Whether a track follows the project groove (false = it plays straight, e.g. a tight bass under swung hats). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
follow | boolean | yes | Follow the groove. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"groove.set_track","params":{"follow":false,"track":1}}
Tracks
Create, edit, move, duplicate and delete tracks; set their instrument.
tracks.list
List Tracks · Effect: read · idempotent · since 0.1.0 · MCP tool: tracks_list
Every track in mixer order with its id, kind (midi/audio/group/vca), instrument, fader (dB), pan, mute/solo/arm, colour, group, insert effects and send levels. Use the ids in later calls; indices shift when tracks move.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.list","params":{}}
tracks.create
Create Track · Effect: edit · since 0.1.0 · MCP tool: tracks_create
Add a track at the end. kind 'midi' plays notes through an instrument: pass an instrument from instruments.list: a builtin URI or an installed plugin (its uri = path, or its name). Without one the track is silent. Plugins load in the background: their parameters show in params.list a moment later. kind 'audio' plays samples. Returns the new track. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
instrument | string | instruments.list uri (builtin or plugin) or plugin name (MIDI only). | |
kind | string | yes | Track type. One of: midi, audio. |
name | string | Track name (default: the instrument's name). |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.create","params":{"instrument":"builtin://omni-synth","kind":"midi","name":"Bass"}}
tracks.update
Update Track · Effect: edit · idempotent · since 0.1.0 · MCP tool: tracks_update
Change a track's name, fader (volume_db, up to +6 dB), pan (-1..1), mute, solo or colour. Only the fields given change. Returns the track. One undo step (solo is monitoring and is not recorded).
| Parameter | Type | Required | Description |
|---|---|---|---|
color | string | Colour as #rrggbb. | |
mute | boolean | Mute. | |
name | string | New name. | |
pan | number | Pan, -1 left .. +1 right. Range: -1 to 1. | |
solo | boolean | Solo. | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
volume_db | number | Fader in dB; -120 or lower = fully down. Range: -200 to 6. |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.update","params":{"pan":-0.2,"track":0,"volume_db":-6.0}}
tracks.delete
Delete Track · Effect: destructive · since 0.2.0 · MCP tool: tracks_delete
Delete a track with its clips, devices and automation. Groups are not deleted this way (ungroup first). Indices of later tracks shift down. Undoable: undo rebuilds the whole track, instrument state included.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.delete","params":{"track":2}}
tracks.duplicate
Duplicate Track · Effect: edit · since 0.15.0 · MCP tool: tracks_duplicate
Copy a track (instrument, clips, effects, mixer settings, automation) right after it, named '<name> (Copy)'. A plugin instrument loads in the background: the copy shows in tracks.list a moment later. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.duplicate","params":{"track":1}}
tracks.set_instrument
Set Instrument · Effect: edit · idempotent · since 0.3.0 · MCP tool: tracks_set_instrument
Replace the instrument of a MIDI track with one from instruments.list (builtin, or an installed plugin, loaded in the background). The track keeps its name, clips, effects and mixer settings. Undoable: undo brings the previous instrument back with its sound.
| Parameter | Type | Required | Description |
|---|---|---|---|
instrument | string | yes | instruments.list uri, or a plugin name, e.g. Surge XT. |
name | string | New track name (default: keep it). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.set_instrument","params":{"instrument":"builtin://piano-synth","track":0}}
tracks.move
Move Track · Effect: edit · idempotent · since 0.3.0 · MCP tool: tracks_move
Move a track (a group with all its members) right before another track, joining that track's group, or to the end when 'before' is absent. Returns the new track order. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
before | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"tracks.move","params":{"before":0,"track":3}}
Instruments
Built-in and plugin instruments, and the presets of a plugin.
instruments.list
List Instruments · Effect: read · idempotent · since 0.1.0 · MCP tool: instruments_list
Instruments that tracks.create can load: name, family and the URI to pass as 'instrument'; installed plugins (group Plugin, with vendor and format) after the builtins. Families: Synth (Omni Synth = subtractive/wavetable all-rounder), Keys (Piano), Physical model (strings, winds, plucked, mallets), Drums (TOMNIC drum synth), Image to sound, DJ.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"instruments.list","params":{}}
instruments.presets
List Presets · Effect: read · idempotent · since 0.14.0 · MCP tool: instruments_presets
Preset files (.fxp) installed with the external plugin on a track, e.g. Surge XT's factory patches: name, category (their folders) and path. Filter with query words ("bass reese", "leads"); pages of up to 200.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | At most this many (default 200). Range: 1 to 200. | |
offset | integer | Skip this many matches. Range: 0 to 1000000. | |
query | string | Words that must all appear in the name or category. | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"instruments.presets","params":{"query":"leads","track":4}}
instruments.load_preset
Load Preset · Effect: edit · idempotent · since 0.14.0 · MCP tool: instruments_load_preset
Load a preset file (from instruments.presets) into the plugin on a track: its whole sound, as the plugin's own preset browser would. Then params.list shows the new values to tweak. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | yes | Preset file path from instruments.presets. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"instruments.load_preset","params":{"path":"C:/Program Files/Common Files/CLAP/Surge Synth Team/SurgeXTData/patches_factory/Leads/Moogy Saw.fxp","track":4}}
Scenes
The scene rows of the session grid.
scenes.list
List Scenes · Effect: read · idempotent · since 0.2.0 · MCP tool: scenes_list
Scene rows of the session: index, name, colour and how many tracks have a clip in the row. Clip slot N of every track belongs to scene N.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"scenes.list","params":{}}
scenes.launch
Launch Scene · Effect: control · idempotent · since 0.2.0 · MCP tool: scenes_launch
Launch every clip of a scene row together, quantised like a click on the scene. Starts the transport unless start_transport is false.
| Parameter | Type | Required | Description |
|---|---|---|---|
scene | integer | yes | 0-based scene row. Range: 0 to 255. |
start_transport | boolean | Start playback if stopped (default true). |
Request:
{"jsonrpc":"2.0","id":1,"method":"scenes.launch","params":{"scene":0}}
scenes.update
Update Scene · Effect: edit · idempotent · since 0.3.0 · MCP tool: scenes_update
Rename or recolour a scene row (e.g. 'Intro', 'Drop'). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
color | string | #rrggbb, or empty for the default colour. | |
name | string | New name. | |
scene | integer | yes | 0-based scene row. Range: 0 to 255. |
Request:
{"jsonrpc":"2.0","id":1,"method":"scenes.update","params":{"name":"Verse","scene":0}}
Clips
Session clips: notes, chords, drums, slices and melodies.
clips.generate_melody
Generate Melody · Effect: edit · idempotent · since 0.15.0 · MCP tool: clips_generate_melody
Write a melody into a MIDI slot with the piano roll's melody generator: a style (stepwise_flow, minimal_cell, classical_arch, funk_groove, celtic_reel, bebop_line, arpeggio_loop, synth_arp, sequence_run, ambient_drift, tension_build, modal_motive), a key, bars, register and density. It sits on the chords of the slot's chord lane, or of chords_from (e.g. the pad slot written by clips.write_progression). Same seed, same melody. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | integer | Bars to write (default 4). Range: 1 to 16. | |
chords_from | {slot, track} | ||
density | string | Notes per bar (default medium). One of: sparse, light, medium, dense, very_dense. | |
key | {mode, root} | yes | |
register | string | Pitch range (default mid). One of: low, mid, high, full. | |
seed | integer | Same seed, same melody (default 1). Range: 0 to 9223372036854775807. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
style | string | yes | Melody style. One of: stepwise_flow, minimal_cell, classical_arch, funk_groove, celtic_reel, bebop_line, arpeggio_loop, synth_arp, sequence_run, ambient_drift, tension_build, modal_motive. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of chords_from:
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of key:
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.generate_melody","params":{"bars":8,"chords_from":{"slot":0,"track":2},"key":{"mode":"minor","root":"F"},"register":"high","slot":0,"style":"synth_arp","track":4}}
clips.list
List Clips · Effect: read · idempotent · since 0.1.0 · MCP tool: clips_list
The session clip slots (scene rows) of a track: empty or not, kind (midi/audio/sequencer), loop length in beats, note count, playing / queued.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.list","params":{"track":0}}
clips.get_notes
Read Clip Notes · Effect: read · idempotent · since 0.1.0 · MCP tool: clips_get_notes
Notes of a session MIDI clip (pitch, start and duration in beats, velocity) and its loop length.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.get_notes","params":{"slot":0,"track":0}}
clips.write_midi
Write MIDI Clip · Effect: edit · idempotent · since 0.1.0 · MCP tool: clips_write_midi
Write notes into a session clip slot of a MIDI track, creating the clip if the slot is empty. mode 'replace' (default) leaves exactly these notes, 'merge' adds them. length_beats sets the loop (default: the notes rounded up to whole bars). Times are in beats from the clip start (1 beat = a quarter note; in 4/4 a bar is 4 beats). The clip loops; launch it with clips.launch. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
length_beats | number | Loop length in beats. Range: 0.25 to 1024. | |
mode | string | Replace or merge the clip's notes. One of: replace, merge. | |
notes | {chance, duration, pan, pitch, pitch_offset, pressure, start, timing, velocity, volume}[] | yes | Notes to write. Up to 4096 items. |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of notes[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
chance | number | Chance it plays each pass, 0-1 (default 1). Range: 0 to 1. | |
duration | number | yes | Length in beats. Range: 0.0001 to 1024. |
pan | number | Per-note pan, -1 left to 1 right. Range: -1 to 1. | |
pitch | integer | yes | MIDI note number (60 = middle C). Range: 0 to 127. |
pitch_offset | integer | Pitch offset in semitones. Range: -24 to 24. | |
pressure | number | Poly pressure during the note, 0-1. Range: 0 to 1. | |
start | number | yes | Start from the clip start, in beats. Range: 0 to 1024. |
timing | number | Micro-timing in beats (- early, + late). Range: -0.25 to 0.25. | |
velocity | integer | Velocity 1-127 (default 100). Range: 1 to 127. | |
volume | number | Sustained note volume, 0-1 (default 1). Range: 0 to 1. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.write_midi","params":{"length_beats":4.0,"notes":[{"duration":0.5,"pitch":48,"start":0.0,"velocity":110},{"duration":0.5,"pitch":55,"start":1.0}],"slot":0,"track":0}}
clips.launch
Launch Clip · Effect: control · idempotent · since 0.1.0 · MCP tool: clips_launch
Play a session clip, quantised like a click on its slot. Starts the transport unless start_transport is false.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
start_transport | boolean | Start playback if stopped (default true). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.launch","params":{"slot":0,"track":0}}
clips.stop
Stop Clips · Effect: control · idempotent · since 0.1.0 · MCP tool: clips_stop
Stop the session clip of one track, or of every track when no track is given.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.stop","params":{"track":0}}
clips.write_progression
Write Progression · Effect: edit · idempotent · since 0.2.0 · MCP tool: clips_write_progression
Render a chord progression (text, library or generated, see theory.progression) into a session slot of a MIDI track and set the clip's chord lane, so the user sees the chords in the piano roll. The loop length is the progression's. Replaces the clip's notes. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
progression | {chords, generate, key, library, perform} | yes | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of progression:
| Parameter | Type | Required | Description |
|---|---|---|---|
chords | string | Roman numerals or chord symbols. Each chord is one bar unless bars are marked: '|' separates bars and splits one between its chords, 'I:2' = 2 beats, '.' holds, '%' repeats the bar. E.g. 'ii7 V7 Imaj7 Imaj7', 'Am F C G', '| I | vi | IV V |'. | |
generate | {bars, complexity, seed, style} | ||
key | {mode, root} | yes | |
library | string | Name of a progression from theory.library. | |
perform | {bass, centre, chords, humanise, pattern, top, velocity} |
Fields of progression.generate:
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | integer | Length in bars (default 4). Range: 1 to 64. | |
complexity | number | 0 triads .. 1 extended/altered. Range: 0 to 1. | |
seed | integer | Same seed = same progression. Range: 0 to 9223372036854775807. | |
style | string | yes | Style from theory.vocabulary. |
Fields of progression.key:
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Fields of progression.perform:
| Parameter | Type | Required | Description |
|---|---|---|---|
bass | boolean | Write a bass line (default false). | |
centre | integer | MIDI note the voicings centre on (default 60). Range: 36 to 96. | |
chords | boolean | Write the chord voicings (default true). | |
humanise | number | Timing and velocity spread (default 0). Range: 0 to 1. | |
pattern | string | Playing pattern from theory.vocabulary (default block). | |
top | boolean | Double the top voice an octave up (default false). | |
velocity | integer | Velocity 1-127 (default 100). Range: 1 to 127. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.write_progression","params":{"progression":{"chords":"i VI III VII","key":{"mode":"minor","root":"A"},"perform":{"bass":true,"pattern":"pulse8"}},"slot":0,"track":0}}
clips.write_drums
Write Drum Pattern · Effect: edit · idempotent · since 0.8.0 · MCP tool: clips_write_drums
Write a drum pattern into a session slot of a TOMNIC track (TOMNIC plays its own step pattern, not clip notes). Each lane is one voice (kick, snare, hihat, bass, tom, perc, cymbal, fx, or 0-7) with a step string: x = hit, X = accent, . = rest; '|' and spaces may mark bars. At rate 1/16 sixteen steps are one 4/4 bar, e.g. kick "x...x...x...x...", snare "....x.......x...". Lanes may differ in length (polymeters). Replaces the pattern, or with mode merge only the lanes given. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
lanes | {channel, steps, swing, velocity}[] | yes | Voices to write. Up to 8 items. |
mode | string | Replace the pattern or merge lanes. One of: replace, merge. | |
rate | string | Step length (default 1/16). One of: 1/4, 1/8, 1/8t, 1/16, 1/16t, 1/32. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of lanes[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
channel | string or integer | yes | Voice: kick, snare, hihat, bass, tom, perc, cymbal, fx, or 0-7. |
steps | string | yes | Steps: x hit, X accent, . rest (1-64). |
swing | number | Swing 0 straight .. 100 triplet. Range: 0 to 100. | |
velocity | integer | Hit velocity (default 100). Range: 1 to 127. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.write_drums","params":{"lanes":[{"channel":"kick","steps":"x...x...x...x..."},{"channel":"snare","steps":"....X.......X..."},{"channel":"hihat","steps":"x.x.x.x.x.x.x.x.","swing":30,"velocity":70}],"slot":0,"track":3}}
clips.duplicate
Duplicate Clip · Effect: edit · idempotent · since 0.2.0 · MCP tool: clips_duplicate
Copy a session clip to another slot, on the same track or another one of the same kind (MIDI to MIDI, audio to audio). Overwrites the target. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
to_slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
to_track | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.duplicate","params":{"slot":0,"to_slot":1,"track":0}}
clips.transform
Transform Clip · Effect: edit · since 0.2.0 · MCP tool: clips_transform
Edit every note of a MIDI clip at once: transpose (semitones), quantize starts to a grid in beats (0.25 = 1/16 in 4/4) with a strength, scale and offset velocities. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
quantize | number | Grid in beats. Range: 0.015625 to 4. | |
quantize_strength | number | Share of the way to the grid (default 1). Range: 0 to 1. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
transpose | integer | Semitones. Range: -48 to 48. | |
velocity_offset | integer | Added to velocity after scaling. Range: -127 to 127. | |
velocity_scale | number | Velocity multiplier. Range: 0 to 4. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.transform","params":{"quantize":0.25,"slot":0,"track":0,"transpose":-12}}
clips.set_length
Set Clip Length · Effect: edit · idempotent · since 0.3.0 · MCP tool: clips_set_length
Set the loop length of a session clip in beats (notes past the end stay but do not play). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
length_beats | number | yes | Loop length in beats. Range: 0.25 to 1024. |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.set_length","params":{"length_beats":16.0,"slot":0,"track":0}}
clips.clear
Clear Clip · Effect: destructive · idempotent · since 0.2.0 · MCP tool: clips_clear
Empty a session clip slot (notes, audio, sequencer). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.clear","params":{"slot":1,"track":0}}
clips.write_slices
Play Slices · Effect: edit · idempotent · since 0.19.0 · MCP tool: clips_write_slices
Write which slices of a sliced audio clip play when (replacing its notes): steps with a slice index, start and length in beats, velocity, and pitch in semitones, so one slice can play a melody (a vocal chop, a stab) and many slices a rearranged break. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
length_beats | number | Loop length in beats. Range: 0.25 to 1024. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
steps | {duration, pitch, slice, start, velocity}[] | yes | Slice hits. Up to 4096 items. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of steps[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
duration | number | yes | Length in beats. Range: 0.001 to 1024. |
pitch | integer | Semitones up or down. Range: -24 to 24. | |
slice | integer | yes | Slice index from sampler.get. Range: 0 to 1023. |
start | number | yes | Beats from the clip start. Range: 0 to 1024. |
velocity | integer | 1-127 (default 100). Range: 1 to 127. |
Request:
{"jsonrpc":"2.0","id":1,"method":"clips.write_slices","params":{"slot":0,"steps":[{"duration":0.5,"slice":0,"start":0},{"duration":0.5,"pitch":3,"slice":3,"start":0.5},{"duration":1,"pitch":7,"slice":3,"start":1}],"track":5}}
Music theory
Scales, chords, progressions, analysis and harmonization.
theory.scale
Scale · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_scale
The seven degrees of a key (names, pitch classes, MIDI notes in the middle-C octave) and its diatonic chords as numerals, triads and sevenths. Use it to stay in key when writing melodies and bass lines.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.scale","params":{"mode":"dorian","root":"D"}}
theory.chord
Chord · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_chord
Notes of a chord symbol (C, Am7, F#m7b5, Bbmaj9, G7/B, Dsus4, …): pitch classes, names and MIDI notes in close position from the root.
| Parameter | Type | Required | Description |
|---|---|---|---|
octave | integer | Octave of the root (4 = middle C's). Range: 0 to 8. | |
symbol | string | yes | Chord symbol. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.chord","params":{"octave":3,"symbol":"Fmaj7"}}
theory.progression
Progression · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_progression
Turn a chord progression into voiced, voice-led notes ready for clips.write_midi: from text (numerals or symbols), from the library, or generated in a style. Optional bass line and playing pattern (arpeggios, pulses, strums, …). Deterministic. To write it straight into a clip with its chord lane, use clips.write_progression.
| Parameter | Type | Required | Description |
|---|---|---|---|
chords | string | Roman numerals or chord symbols. Each chord is one bar unless bars are marked: '|' separates bars and splits one between its chords, 'I:2' = 2 beats, '.' holds, '%' repeats the bar. E.g. 'ii7 V7 Imaj7 Imaj7', 'Am F C G', '| I | vi | IV V |'. | |
generate | {bars, complexity, seed, style} | ||
key | {mode, root} | yes | |
library | string | Name of a progression from theory.library. | |
perform | {bass, centre, chords, humanise, pattern, top, velocity} |
Fields of generate:
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | integer | Length in bars (default 4). Range: 1 to 64. | |
complexity | number | 0 triads .. 1 extended/altered. Range: 0 to 1. | |
seed | integer | Same seed = same progression. Range: 0 to 9223372036854775807. | |
style | string | yes | Style from theory.vocabulary. |
Fields of key:
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Fields of perform:
| Parameter | Type | Required | Description |
|---|---|---|---|
bass | boolean | Write a bass line (default false). | |
centre | integer | MIDI note the voicings centre on (default 60). Range: 36 to 96. | |
chords | boolean | Write the chord voicings (default true). | |
humanise | number | Timing and velocity spread (default 0). Range: 0 to 1. | |
pattern | string | Playing pattern from theory.vocabulary (default block). | |
top | boolean | Double the top voice an octave up (default false). | |
velocity | integer | Velocity 1-127 (default 100). Range: 1 to 127. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.progression","params":{"chords":"i VI III VII","key":{"mode":"minor","root":"A"},"perform":{"bass":true,"pattern":"pulse8"}}}
theory.harmonize
Harmonize Melody · Effect: edit · idempotent · since 0.15.0 · MCP tool: theory_harmonize
Find chords for the melody in a MIDI slot, in a key and a generator style (theory.vocabulary): one chord per harmonic-rhythm slot, chosen so the melody's strong notes are chord tones. fit 0 follows the style's habits, 1 the melody. Returns the chords; with write_to also writes them into a slot (performed like clips.write_progression). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | integer | Bars to harmonise (default: the clip's). Range: 1 to 64. | |
fit | number | 0 = style, 1 = melody (default 0.7). Range: 0 to 1. | |
key | {mode, root} | yes | |
seed | integer | Colour seed (default 1). Range: 0 to 9223372036854775807. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
style | string | Generator style from theory.vocabulary (default pop). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
write_to | {perform, slot, track} |
Fields of key:
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Fields of write_to:
| Parameter | Type | Required | Description |
|---|---|---|---|
perform | {bass, centre, chords, humanise, pattern, top, velocity} | ||
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of write_to.perform:
| Parameter | Type | Required | Description |
|---|---|---|---|
bass | boolean | Write a bass line (default false). | |
centre | integer | MIDI note the voicings centre on (default 60). Range: 36 to 96. | |
chords | boolean | Write the chord voicings (default true). | |
humanise | number | Timing and velocity spread (default 0). Range: 0 to 1. | |
pattern | string | Playing pattern from theory.vocabulary (default block). | |
top | boolean | Double the top voice an octave up (default false). | |
velocity | integer | Velocity 1-127 (default 100). Range: 1 to 127. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.harmonize","params":{"key":{"mode":"minor","root":"F"},"slot":0,"track":4,"write_to":{"perform":{"pattern":"pad"},"slot":1,"track":2}}}
theory.analyze
Analyze Clip Harmony · Effect: read · idempotent · since 0.3.0 · MCP tool: theory_analyze
The chords a MIDI clip's notes spell, with symbols and numerals, one per resolution_beats (default a bar); the key is estimated from the notes unless given. Use it to understand a user's part before writing around it.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | {mode, root} | ||
resolution_beats | number | Shortest chord in beats. Range: 0.25 to 64. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of key:
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | string | Mode (default major): major, minor, dorian, phrygian, lydian, mixolydian, locrian, harmonic_minor, melodic_minor, phrygian_dominant. | |
root | string | yes | Tonic: C, C#, Db, D … B. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.analyze","params":{"resolution_beats":2.0,"slot":0,"track":0}}
theory.library
Progression Library · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_library
Search the 240 named progressions (pop, rock, jazz, soul, blues, gospel, classical, modal, electronic, film, world, dark…). Pass a name to theory.progression or clips.write_progression as 'library'.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | Most entries returned (default 40). Range: 1 to 240. | |
query | string | Words that must all match, e.g. 'jazz turnaround'. |
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.library","params":{"limit":10,"query":"neo soul"}}
theory.vocabulary
Theory Vocabulary · Effect: read · idempotent · since 0.2.0 · MCP tool: theory_vocabulary
Every name the theory methods accept: modes, generator styles, playing patterns, library categories.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"theory.vocabulary","params":{}}
Arrangement
The timeline: songs from scenes, clips, loop and playback.
arrangement.get
Arrangement · Effect: read · idempotent · since 0.7.0 · MCP tool: arrangement_get
The song on the timeline: its length, whether the arrangement or the session is playing, the loop region, the markers (sections) and every track's clips with start and length in beats.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.get","params":{}}
arrangement.build_song
Build Song · Effect: edit · since 0.7.0 · MCP tool: arrangement_build_song
Lay a song out on the timeline from session scenes: each section plays one scene row for a number of bars (e.g. intro 8, verse 16, drop 16, outro 8), every MIDI track's clip in that row copied and repeated to fill it, a marker per section; TOMNIC patterns go on as their notes. Audio tracks are reported as skipped. Refuses if the range already holds clips unless clear_existing. One undo step. Then arrangement.play.
| Parameter | Type | Required | Description |
|---|---|---|---|
clear_existing | boolean | Remove timeline clips from start_beat on first. | |
markers | boolean | Add a marker per section (default true). | |
sections | {bars, name, scene}[] | yes | Sections in order. Up to 64 items. |
start_beat | number | Where the song starts (default 0). Range: 0 to 1000000. |
Fields of sections[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | number | yes | Length in bars. Range: 0.25 to 1024. |
name | string | Marker name (default: the scene's). | |
scene | integer | yes | Scene row. Range: 0 to 255. |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.build_song","params":{"sections":[{"bars":8,"name":"Intro","scene":0},{"bars":16,"name":"Verse","scene":1},{"bars":16,"name":"Drop","scene":2}]}}
arrangement.place_clip
Place Clip · Effect: edit · since 0.7.0 · MCP tool: arrangement_place_clip
Copy one session clip onto its track's timeline at start_beat; length_beats longer than the clip repeats it. MIDI tracks. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
length_beats | number | Length (default one loop). Range: 0.25 to 4096. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
start_beat | number | yes | Start on the timeline. Range: 0 to 1000000. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.place_clip","params":{"length_beats":16.0,"slot":0,"start_beat":32.0,"track":0}}
arrangement.clear
Clear Timeline · Effect: destructive · idempotent · since 0.7.0 · MCP tool: arrangement_clear
Remove timeline clips starting inside a range (default: all), on one track or all. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
end_beat | number | Before (default: the end). Range: 0 to 1000000. | |
start_beat | number | From (default 0). Range: 0 to 1000000. | |
track | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.clear","params":{"start_beat":64.0}}
arrangement.edit_clip
Edit Timeline Clip · Effect: edit · idempotent · since 0.13.0 · MCP tool: arrangement_edit_clip
Change one timeline clip (index from arrangement.get): move it, change its length (MIDI grows or shrinks, audio only shrinks), mute it, rename it, set its gain. Fields left out stay. E.g. mute the bass in the second half of a drop after copying it there. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
clip | integer | yes | Timeline clip index on the track, from arrangement.get. Range: 0 to 4095. |
gain_db | number | Clip gain in dB. Range: -60 to 12. | |
length_beats | number | New length. Range: 0.25 to 16384. | |
muted | boolean | Silence the clip without removing it. | |
name | string | Clip name. | |
start_beat | number | Move the clip to start here. Range: 0 to 1000000. | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.edit_clip","params":{"clip":0,"length_beats":32.0,"muted":false,"track":1}}
arrangement.copy_clip
Copy Timeline Clip · Effect: edit · since 0.13.0 · MCP tool: arrangement_copy_clip
Copy one timeline clip to another beat, on the same track or another one (to_track; MIDI clips go to MIDI tracks). The copy is independent: edit or mute it on its own to make a variation. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
clip | integer | yes | Timeline clip index on the track, from arrangement.get. Range: 0 to 4095. |
to_beat | number | yes | Where the copy starts. Range: 0 to 1000000. |
to_track | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.copy_clip","params":{"clip":1,"to_beat":160.0,"track":0}}
arrangement.remove_clip
Remove Timeline Clip · Effect: destructive · since 0.13.0 · MCP tool: arrangement_remove_clip
Delete one timeline clip (index from arrangement.get; later clips on the track move down one index). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
clip | integer | yes | Timeline clip index on the track, from arrangement.get. Range: 0 to 4095. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.remove_clip","params":{"clip":2,"track":0}}
arrangement.set_loop
Set Loop · Effect: edit · idempotent · since 0.7.0 · MCP tool: arrangement_set_loop
Set and enable (or disable) the arrangement loop region in beats. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
enabled | boolean | Loop on (default true). | |
end_beat | number | yes | Loop end. Range: 0 to 1000000. |
start_beat | number | yes | Loop start. Range: 0 to 1000000. |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.set_loop","params":{"end_beat":32.0,"start_beat":0.0}}
arrangement.play
Play Arrangement · Effect: control · idempotent · since 0.7.0 · MCP tool: arrangement_play
Play the timeline from a beat: every track follows the arrangement again (like Back to Arrangement), the playhead moves, playback starts.
| Parameter | Type | Required | Description |
|---|---|---|---|
from_beat | number | Start (default 0). Range: 0 to 1000000. |
Request:
{"jsonrpc":"2.0","id":1,"method":"arrangement.play","params":{"from_beat":0.0}}
Markers
Markers and section regions on the timeline.
markers.add
Add Marker · Effect: edit · since 0.7.0 · MCP tool: markers_add
Add a marker (or, with end_beat, a section region) to the timeline. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
beat | number | yes | Position. Range: 0 to 1000000. |
color | string | #rrggbb. | |
end_beat | number | End of the section region. Range: 0 to 1000000. | |
name | string | yes | Label, e.g. 'Chorus'. |
Request:
{"jsonrpc":"2.0","id":1,"method":"markers.add","params":{"beat":32.0,"name":"Chorus"}}
markers.remove
Remove Marker · Effect: destructive · since 0.7.0 · MCP tool: markers_remove
Remove a marker by its index from arrangement.get. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
index | integer | yes | Marker index. Range: 0 to 1023. |
Request:
{"jsonrpc":"2.0","id":1,"method":"markers.remove","params":{"index":0}}
Automation
Automation lanes of volume, pan and any parameter.
automation.list
List Automation · Effect: read · idempotent · since 0.12.0 · MCP tool: automation_list
The automation lanes of a track on the arrangement timeline: what each drives (its key), how many segments and points, the automated span in beats.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"automation.list","params":{"track":0}}
automation.write
Write Automation · Effect: edit · idempotent · since 0.12.0 · MCP tool: automation_write
Automate a track's volume, pan or any parameter over the song: points at song beats with values in the parameter's own unit; the lane is created if needed and its automation replaced. E.g. a filter sweep through a break: {param: "instrument:16", points: [{beat: 96, value: 400}, {beat: 128, value: 8000}]}. Plays when the arrangement plays. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
curve | string | How each point moves to the next (default linear). One of: linear, smooth, step, sine. | |
param | string | yes | What to automate: "volume" (dB), "pan" (-1..1), or a params.list key (instrument:<id>, fx:<slot>:<index>) in that parameter's range. |
points | {beat, value}[] | yes | Breakpoints in time order. Up to 1024 items. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Fields of points[]:
| Parameter | Type | Required | Description |
|---|---|---|---|
beat | number | yes | Song position in beats. Range: 0 to 1000000. |
value | number | yes | Value in the parameter's unit. Range: -1000000 to 1000000. |
Request:
{"jsonrpc":"2.0","id":1,"method":"automation.write","params":{"param":"volume","points":[{"beat":0,"value":-30},{"beat":32,"value":0}],"track":0}}
automation.clear
Clear Automation · Effect: destructive · idempotent · since 0.12.0 · MCP tool: automation_clear
Remove the automation of one parameter on a track (the lane stays, empty). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
param | string | yes | What to automate: "volume" (dB), "pan" (-1..1), or a params.list key (instrument:<id>, fx:<slot>:<index>) in that parameter's range. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"automation.clear","params":{"param":"pan","track":0}}
Audio files
Importing audio, transcribing it to notes, splitting stems.
audio.import
Import Audio · Effect: edit · since 0.19.0 · MCP tool: audio_import
Load an audio file (WAV, AIFF, FLAC, MP3, OGG) into a session slot of an audio track, as dropping it from the browser does; arrangement.place_clip then puts it on the timeline. Needs file access, granted in Omni's Settings (AI Create). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | yes | Absolute path of the audio file. |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"audio.import","params":{"path":"C:/Samples/break.wav","slot":0,"track":5}}
audio.transcribe
Transcribe Audio · Effect: read · idempotent · since 0.19.0 · MCP tool: audio_transcribe
Audio to notes with Basic Pitch: a file (path) or the audio in a session slot (track + slot). mode poly (chords), melody (one line) or bass. Returns a job; its result has the notes in beats at the project tempo, ready for clips.write_midi, and the detected length. File paths need file access (Settings, AI Create).
| Parameter | Type | Required | Description |
|---|---|---|---|
min_ms | number | Shortest note in ms. Range: 20 to 500. | |
mode | string | What to hear (default poly). One of: poly, melody, bass. | |
path | string | Absolute path of an audio file. | |
sensitivity | number | How readily a note is heard. Range: 0 to 1. | |
slot | integer | 0-based clip slot (scene row) on the track. Range: 0 to 255. | |
sustain | number | How long notes hold. Range: 0 to 1. | |
track | string or integer | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"audio.transcribe","params":{"mode":"bass","slot":0,"track":5}}
audio.split_stems
Split Stems · Effect: control · since 0.19.0 · MCP tool: audio_split_stems
Split a WAV mix into vocals, drums, bass and other with Demucs (the model downloads on first use). Returns a job; its result has the four file paths, which audio.import can load. Needs file access (Settings, AI Create).
| Parameter | Type | Required | Description |
|---|---|---|---|
folder | string | yes | Absolute path of the folder for the stems. |
path | string | yes | Absolute path of the WAV to split. |
Request:
{"jsonrpc":"2.0","id":1,"method":"audio.split_stems","params":{"folder":"C:/Music/stems","path":"C:/Music/mix.wav"}}
Sampler
The sampler of an audio clip: playback and slicing.
sampler.get
Get Sampler · Effect: read · idempotent · since 0.19.0 · MCP tool: sampler_get
The sampler of an audio clip: file, length, playback mode, root note, transpose, envelope and its slices (index, the note that plays it, start and end in seconds).
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"sampler.get","params":{"slot":0,"track":5}}
sampler.set
Set Sampler · Effect: edit · idempotent · since 0.19.0 · MCP tool: sampler_set
Change how an audio clip's sampler plays (fields left out stay): playback_mode one_shot, loop, slice, gate, granular, warp; root note, transpose in semitones, reverse, envelope (attack/decay/release ms, sustain 0-1). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
attack_ms | number | Attack. Range: 0 to 10000. | |
decay_ms | number | Decay. Range: 0 to 30000. | |
playback_mode | string | How the clip plays. One of: one_shot, loop, slice, gate, granular, warp. | |
release_ms | number | Release. Range: 0 to 30000. | |
reverse | boolean | Play backwards. | |
root_note | integer | Note that plays the sample unshifted. Range: 0 to 127. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
sustain | number | Sustain level. Range: 0 to 1. | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
transpose | integer | Semitones. Range: -48 to 48. |
Request:
{"jsonrpc":"2.0","id":1,"method":"sampler.set","params":{"playback_mode":"gate","release_ms":80,"slot":0,"track":5}}
sampler.slice
Slice Sample · Effect: edit · idempotent · since 0.19.0 · MCP tool: sampler_slice
Cut an audio clip into slices, as the sample editor's slice detection does: on transients (sensitivity), into equal parts (count) or on beats (division per beat at the clip's tempo). A clip holds at most 92 slices (notes 36-127): slice a short loop, not a whole song. Switches the clip to slice mode: each slice gets a note, so clips.write_slices can play patterns and melodies from them. Returns the slices. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
count | integer | equal: number of slices. Range: 1 to 128. | |
division | integer | beats: slices per beat, 1 = quarters, 2 = eighths, 4 = sixteenths. Range: 1 to 64. | |
mode | string | How to cut (default transients). One of: transients, equal, beats. | |
sensitivity | number | transients: how readily a hit starts a slice. Range: 0 to 1. | |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"sampler.slice","params":{"mode":"transients","sensitivity":0.6,"slot":0,"track":5}}
Effects
Effect chains on tracks, return buses and the master.
devices.types
Device Types · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_types
Omni's builtin effects that devices.add can insert, with their family: EQ, Filter, Compressor, Limiter, MultibandDynamics, Noise Gate, Transient Shaper, Saturator, Delay, Reverb, Chorus, Phaser and creative ones.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.types","params":{}}
devices.list
List Devices · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_list
The effects of a chain in signal order: a track's inserts ({"track": id}), a return bus ({"return_bus": n}) or "master". Each with slot, name, kind (builtin/plugin/script), bypass and parameter count.
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.list","params":{"chain":{"track":0}}}
devices.get
Read Device · Effect: read · idempotent · since 0.4.0 · MCP tool: devices_get
Every parameter of a builtin effect with its current value, range, default, unit (dB, Hz, ms, %) and group; a choice lists its options (index = value, e.g. Shape 4 = HighPass). Values are in those units, not 0..1.
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
slot | integer | yes | 0-based position in the chain (signal order). Range: 0 to 63. |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.get","params":{"chain":"master","slot":0}}
devices.add
Add Device · Effect: edit · since 0.4.0 · MCP tool: devices_add
Insert a builtin effect (a name from devices.types) into a chain, at the end or at 'position'. It starts at its default settings; shape it with devices.set_params. Returns the chain. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
device | string | yes | Effect name from devices.types, e.g. Compressor. |
position | integer | 0-based position in the chain (signal order). Range: 0 to 63. |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.add","params":{"chain":{"track":0},"device":"EQ"}}
devices.remove
Remove Device · Effect: destructive · since 0.4.0 · MCP tool: devices_remove
Remove an effect from a chain; later slots move up. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
slot | integer | yes | 0-based position in the chain (signal order). Range: 0 to 63. |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.remove","params":{"chain":{"track":0},"slot":1}}
devices.set_bypass
Bypass Device · Effect: edit · idempotent · since 0.4.0 · MCP tool: devices_set_bypass
Bypass (true) or enable an effect; the switch crossfades, no click. Useful to compare before / after with mix.meters. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bypassed | boolean | yes | Bypass the effect. |
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
slot | integer | yes | 0-based position in the chain (signal order). Range: 0 to 63. |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.set_bypass","params":{"bypassed":true,"chain":"master","slot":0}}
devices.set_params
Set Device Parameters · Effect: edit · idempotent · since 0.4.0 · MCP tool: devices_set_params
Set several parameters of a builtin effect at once, by name (as devices.get lists them, case-insensitive) or index, in the parameter's own unit. All are checked against their ranges before any changes. One undo step. Returns the device with its new values.
| Parameter | Type | Required | Description |
|---|---|---|---|
chain | "master" or {track} or {return_bus} | yes | Effect chain: {"track": <id or index>}, {"return_bus": <index>} or "master". |
slot | integer | yes | 0-based position in the chain (signal order). Range: 0 to 63. |
values | object | yes | Parameter name or index → value. |
Request:
{"jsonrpc":"2.0","id":1,"method":"devices.set_params","params":{"chain":{"track":0},"slot":0,"values":{"Ratio":3.0,"Threshold":-18.0}}}
MIDI effects
MIDI effects and generators in front of an instrument.
midi_fx.types
List MIDI FX Types · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_types
MIDI effects a track can put in front of its instrument: transforms (Arpeggiator, Chord, Scale, Velocity, Note Length, Note Echo, Random, Ornaments, Tuplets) change the notes going through; generators (Marbles, Markov, L-System, Cellular, Thue-Morse, Recaman, Sequence, Shepard, Walks) play their own, locked to the song while a clip plays.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.types","params":{}}
midi_fx.list
List MIDI FX · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_list
The MIDI FX chain of a track, in processing order.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.list","params":{"track":3}}
midi_fx.get
Get MIDI FX · Effect: read · idempotent · since 0.16.0 · MCP tool: midi_fx_get
Every parameter of one MIDI FX slot: name, value, range, default.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.get","params":{"slot":0,"track":3}}
midi_fx.add
Add MIDI FX · Effect: edit · since 0.16.0 · MCP tool: midi_fx_add
Append a MIDI effect from midi_fx.types to a track's MIDI FX chain, with its default settings. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
device | string | yes | A name from midi_fx.types, e.g. Arpeggiator. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.add","params":{"device":"Arpeggiator","track":3}}
midi_fx.remove
Remove MIDI FX · Effect: destructive · since 0.16.0 · MCP tool: midi_fx_remove
Remove one MIDI FX slot; later slots move down. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.remove","params":{"slot":0,"track":3}}
midi_fx.set_params
Set MIDI FX Parameters · Effect: edit · idempotent · since 0.16.0 · MCP tool: midi_fx_set_params
Set parameters of one MIDI FX slot by name (or index), values in each parameter's range from midi_fx.get. Undoable, one step per call.
| Parameter | Type | Required | Description |
|---|---|---|---|
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
values | object | yes | Parameter name or index -> value. |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.set_params","params":{"slot":0,"track":3,"values":{"Rate":4.0}}}
midi_fx.render
Render MIDI FX · Effect: edit · idempotent · since 0.21.0 · MCP tool: midi_fx_render
Play one MIDI FX slot offline over some bars and write what it played into a session slot as notes: a Markov / L-System / Marbles line becomes an editable clip, an Arpeggiator over the chord in input_slot becomes the arpeggio. The effect is bypassed afterwards (bypass false keeps it on). Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bars | integer | Bars to render (default 4). Range: 1 to 64. | |
bypass | boolean | Bypass the effect afterwards (default true). | |
input_slot | integer | 0-based clip slot (scene row) on the track. Range: 0 to 255. | |
slot | integer | yes | The MIDI FX slot. Range: 0 to 63. |
to_slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.render","params":{"bars":8,"input_slot":0,"slot":0,"to_slot":1,"track":3}}
midi_fx.set_bypass
Bypass MIDI FX · Effect: edit · idempotent · since 0.16.0 · MCP tool: midi_fx_set_bypass
Bypass (or re-enable) one MIDI FX slot. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bypassed | boolean | yes | true = notes pass unchanged. |
slot | integer | yes | 0-based clip slot (scene row) on the track. Range: 0 to 255. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"midi_fx.set_bypass","params":{"bypassed":true,"slot":0,"track":3}}
Mixer
The master fader, return buses and sends.
mixer.add_return
Add Return Bus · Effect: edit · since 0.11.0 · MCP tool: mixer_add_return
Add a return bus (e.g. 'Reverb', 'Delay'): put an effect on it with devices.add ({"return_bus": n}, usually at 100% mix) and feed it from tracks with mixer.set_send. Returns the mixer. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Name (default 'Return N'). |
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.add_return","params":{"name":"Reverb"}}
mixer.remove_return
Remove Return Bus · Effect: destructive · since 0.11.0 · MCP tool: mixer_remove_return
Delete a return bus with its effects and every track's send to it. Later buses move down one index. Undoable (the sends come back too).
| Parameter | Type | Required | Description |
|---|---|---|---|
bus | integer | yes | Return bus index. Range: 0 to 255. |
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.remove_return","params":{"bus":0}}
mixer.get
Mixer State · Effect: read · idempotent · since 0.4.0 · MCP tool: mixer_get
Master fader (dB) and balance, and the return buses (index, name, fader, insert count). Track faders and sends are in tracks.list.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.get","params":{}}
mixer.set_send
Set Send · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_send
Send level from a track to a return bus in dB (up to +6; -120 or lower = off), e.g. to put a part into the reverb on a return. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bus | integer | yes | Return bus index from mixer.get. Range: 0 to 255. |
level_db | number | yes | Send level in dB. Range: -200 to 6. |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.set_send","params":{"bus":0,"level_db":-12.0,"track":0}}
mixer.set_master
Set Master · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_master
Master fader in dB (up to about +6) and balance (-1..1). Prefer leaving the master at 0 dB and balancing the tracks. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
pan | number | Balance -1 left .. +1 right. Range: -1 to 1. | |
volume_db | number | Master fader in dB. Range: -200 to 6. |
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.set_master","params":{"volume_db":0.0}}
mixer.set_return
Set Return Level · Effect: edit · idempotent · since 0.4.0 · MCP tool: mixer_set_return
Fader of a return bus in dB. Undoable.
| Parameter | Type | Required | Description |
|---|---|---|---|
bus | integer | yes | Return bus index. Range: 0 to 255. |
volume_db | number | yes | Fader in dB. Range: -200 to 6. |
Request:
{"jsonrpc":"2.0","id":1,"method":"mixer.set_return","params":{"bus":0,"volume_db":-3.0}}
Parameters
Every parameter of a track's instrument and effects.
params.list
List Parameters · Effect: read · idempotent · since 0.9.0 · MCP tool: params_list
Every parameter of a track: its instrument (builtin synth or VST3 / CLAP plugin) and every insert effect, plugins included, with key, name, device, group, range, default and current value. Plugins have hundreds: narrow with filter (words that must all appear, e.g. 'filter cutoff') and page with offset / limit (default 100).
| Parameter | Type | Required | Description |
|---|---|---|---|
filter | string | Words that must all match name, group or device. | |
limit | integer | Most returned (default 100). Range: 1 to 500. | |
offset | integer | Skip this many matches. Range: 0 to 100000. | |
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
Request:
{"jsonrpc":"2.0","id":1,"method":"params.list","params":{"filter":"cutoff","limit":20,"track":0}}
params.set
Set Parameters · Effect: edit · idempotent · since 0.9.0 · MCP tool: params_set
Set parameters of a track by their params.list keys (instrument:<id>, fx:<slot>:<index>), each in its own range (plugins are usually 0-1). All are checked before any changes; one undo step. For builtin effects devices.set_params by name is simpler.
| Parameter | Type | Required | Description |
|---|---|---|---|
track | string or integer | yes | Track id (UUID string from tracks.list, stable) or 0-based index (shifts when tracks are added or moved). |
values | object | yes | Parameter key → value. |
Request:
{"jsonrpc":"2.0","id":1,"method":"params.set","params":{"track":0,"values":{"fx:0:3":0.75,"instrument:12":0.4}}}
Meters
Live level meters.
mix.meters
Read Meters · Effect: read · idempotent · since 0.1.0 · MCP tool: mix_meters
Live levels, as the mixer meters show them: per track peak/RMS (dBFS) and EBU R128 loudness (momentary, short-term, integrated LUFS, true peak dBTP); on the master also stereo correlation and loudness range (LU). Meters only move while audio plays: start the transport, wait a few seconds, then read. null = silence or not measured yet.
| Parameter | Type | Required | Description |
|---|---|---|---|
tracks | string or integer[] | Only these tracks (default: all). Up to 1024 items. |
Request:
{"jsonrpc":"2.0","id":1,"method":"mix.meters","params":{"tracks":[0,1]}}
Analysis
Listening: capture and analyse the master or a track, analyse files, compare.
analysis.capture
Listen · Effect: control · since 0.5.0 · MCP tool: analysis_capture
Record what the master or one track plays for a few seconds (default 8, 1-30) and analyse it in the background: peak, true peak, RMS, crest factor, clipping, DC; LUFS integrated / short-term / momentary and loudness range, short-term per second; stereo correlation, width and mono loss; tonal balance (sub, bass, low-mid, mid, high-mid, high, air) and a 1/3-octave spectrum with per-band width. Starts playback if stopped. Returns a job id at once: call jobs.wait with it. One capture at a time.
| Parameter | Type | Required | Description |
|---|---|---|---|
seconds | number | Length to capture. Range: 1 to 30. | |
source | "master" or {track} | yes | What to listen to: "master" or {"track": <id or index>}. |
start_transport | boolean | Start playback if stopped (default true). |
Request:
{"jsonrpc":"2.0","id":1,"method":"analysis.capture","params":{"seconds":8,"source":"master"}}
analysis.file
Analyse File · Effect: read · idempotent · since 0.6.0 · MCP tool: analysis_file
Analyse an audio file (WAV, FLAC, MP3, OGG, AIFF) the same way as analysis.capture: a reference track to compare the mix with (analysis.compare), or an exported master to master.check. Reads at most the first 10 minutes. Returns a job: jobs.wait for it.
| Parameter | Type | Required | Description |
|---|---|---|---|
path | string | yes | Absolute path of the file. |
Request:
{"jsonrpc":"2.0","id":1,"method":"analysis.file","params":{"path":"C:/Music/reference.wav"}}
analysis.compare
Compare Captures · Effect: read · idempotent · since 0.5.0 · MCP tool: analysis_compare
Where two finished captures (e.g. kick and bass, vocal and guitars) compete: band by band levels and the bands where both carry energy within a few dB of each other, strongest first. The usual cure is an EQ cut on one of them there (devices.add EQ + devices.set_params).
| Parameter | Type | Required | Description |
|---|---|---|---|
a | integer | yes | Job id from the call that started it. Range: 1 to 9223372036854775807. |
b | integer | yes | Job id from the call that started it. Range: 1 to 9223372036854775807. |
Request:
{"jsonrpc":"2.0","id":1,"method":"analysis.compare","params":{"a":1,"b":2}}
Jobs
Long-running work: progress and results.
jobs.get
Job Status · Effect: read · idempotent · since 0.5.0 · MCP tool: jobs_get
State (running / done / failed), progress and, once done, the result of a job started by another call.
| Parameter | Type | Required | Description |
|---|---|---|---|
job | integer | yes | Job id from the call that started it. Range: 1 to 9223372036854775807. |
Request:
{"jsonrpc":"2.0","id":1,"method":"jobs.get","params":{"job":1}}
jobs.wait
Wait for Job · Effect: read · idempotent · since 0.5.0 · MCP tool: jobs_wait
Wait until a job finishes (at most timeout_seconds, default and limit 9) and return it as jobs.get does; call again while it is still running.
| Parameter | Type | Required | Description |
|---|---|---|---|
job | integer | yes | Job id from the call that started it. Range: 1 to 9223372036854775807. |
timeout_seconds | number | Longest wait. Range: 0 to 9. |
Request:
{"jsonrpc":"2.0","id":1,"method":"jobs.wait","params":{"job":1,"timeout_seconds":9}}
Mastering
Delivery targets, verdicts and the mastering chain.
master.targets
Loudness Targets · Effect: read · idempotent · since 0.6.0 · MCP tool: master_targets
Delivery targets: streaming platforms (Spotify, Apple Music, YouTube, Tidal, Amazon Music, Deezer), podcast, broadcast (EBU R128, ATSC A/85) and a club convention, each with integrated LUFS, tolerance and true-peak ceiling.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"master.targets","params":{}}
master.check
Check Against Target · Effect: read · idempotent · since 0.6.0 · MCP tool: master_check
Pass / fail of a finished master capture (analysis.capture of "master", or analysis.file of an exported mix) against a target: loudness gap in LU, true peak against the ceiling, the gain that would hit the target, and notes (short capture, clipping, over-limiting, phase).
| Parameter | Type | Required | Description |
|---|---|---|---|
job | integer | yes | Finished capture job. Range: 1 to 9223372036854775807. |
target | string | yes | Target id from master.targets, e.g. spotify, apple_music, ebu_r128, club. |
Request:
{"jsonrpc":"2.0","id":1,"method":"master.check","params":{"job":1,"target":"spotify"}}
master.build_chain
Build Master Chain · Effect: edit · since 0.6.0 · MCP tool: master_build_chain
Put a mastering chain at the end of the master: an optional glue Compressor (2:1, slow attack, soft knee) and a true-peak Limiter with its ceiling at the target's. With a capture job of the master, the compressor threshold and the limiter's input gain are set from it to approach the target loudness. Refuses if the master already has a Limiter (adjust that one with devices.set_params). One undo step. Then capture again and master.check.
| Parameter | Type | Required | Description |
|---|---|---|---|
glue | boolean | Add the glue compressor (default true). | |
job | integer | Finished capture of the master. Range: 1 to 9223372036854775807. | |
target | string | yes | Target id from master.targets, e.g. spotify, apple_music, ebu_r128, club. |
Request:
{"jsonrpc":"2.0","id":1,"method":"master.build_chain","params":{"job":1,"target":"spotify"}}
Export
Render the mix or stems to WAV.
export.render
Export Mix · Effect: control · since 0.6.0 · MCP tool: export_render
Render the arrangement (start_beat to end_beat, default the whole song) to a WAV file, as the Export dialog does: in real time through the audio device, or with fast offline (faster than real time, the same mix), optionally normalised to a loudness target. Returns a job: jobs.wait until done; the result has the path and an analysis of the written file. Writes only absolute .wav paths and does not overwrite unless asked. Session clips play only if recorded into the arrangement.
| Parameter | Type | Required | Description |
|---|---|---|---|
bit_depth | integer | 16, 24 (default) or 32 (float). Range: 16 to 32. | |
dither | string | Dither when writing 16/24 bit (default: the export dialog's). One of: off, tpdf, pow_r1, pow_r2, pow_r3. | |
end_beat | number | End in beats (default: the song's end). Range: 0 to 1000000. | |
fast | boolean | Render offline, faster than real time (default false). | |
overwrite | boolean | Replace existing files (default false). | |
path | string | yes | Absolute path of the .wav file to write. |
start_beat | number | Start in beats (default 0). Range: 0 to 1000000. | |
target | string | Normalise to this target from master.targets while writing. |
Request:
{"jsonrpc":"2.0","id":1,"method":"export.render","params":{"fast":true,"path":"C:/Music/mix.wav","target":"spotify"}}
export.stems
Export Stems · Effect: control · since 0.17.0 · MCP tool: export_stems
Render one WAV per track (all audible tracks, or the ones listed) into a folder, offline and faster than real time: each stem is its track soloed, with its sends' returns, without the master chain unless through_master. Files are named '<NN> <track>.wav'. Returns a job whose result lists the files.
| Parameter | Type | Required | Description |
|---|---|---|---|
bit_depth | integer | 16, 24 (default) or 32 (float). Range: 16 to 32. | |
dither | string | Dither when writing 16/24 bit (default: the export dialog's). One of: off, tpdf, pow_r1, pow_r2, pow_r3. | |
end_beat | number | End in beats (default: the song's end). Range: 0 to 1000000. | |
folder | string | yes | Absolute path of an existing folder for the stems. |
overwrite | boolean | Replace existing files (default false). | |
start_beat | number | Start in beats (default 0). Range: 0 to 1000000. | |
through_master | boolean | Keep the master chain on each stem (default false). | |
tracks | string or integer[] | Tracks to render (default: every non-group track). Up to 256 items. |
Request:
{"jsonrpc":"2.0","id":1,"method":"export.stems","params":{"folder":"C:/Music/stems","tracks":[0,1,2]}}
Undo and redo
Take back or redo the newest edit.
edit.undo
Undo · Effect: history · since 0.1.0 · MCP tool: edit_undo
Undo the newest step in Omni's history (the user's or yours; every edit call of this API is one step labelled 'API: ...'). Returns what was undone.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"edit.undo","params":{}}
edit.redo
Redo · Effect: history · since 0.1.0 · MCP tool: edit_redo
Redo the step undone last. Returns what was redone.
This method takes no parameters.
Request:
{"jsonrpc":"2.0","id":1,"method":"edit.redo","params":{}}
The OmniDAW API on the wire: discovery, handshake, requests and errors, units, references, effects and undo, jobs, limits and versioning.
Write your own Model Context Protocol server for Omni, in any language: how the catalog becomes tools, a complete working server in Python, and how to test and ship it.
