Skip to content

Orchestration Tools

14 high-level composers that combine multiple low-level operations into a single call. Designed for agents — reduce token usage and round-trips when building musical structures.

Orchestration Tools (14)

Tool Description
create_notes_batch Create multiple MIDI notes from a JSON array in one call
create_drum_pattern Create a drum beat from compact step-sequencer notation
create_chord_progression Create chords from names (Cm, Fm7, Gdom7) — auto-voiced
create_melody Create a melody from scale + rhythmic pattern using scale degrees (1-7)
create_bassline Create a bassline from root + rhythmic pattern with low octave and high velocity
create_arpeggio Create an arpeggio from chord name — 6 patterns (up/down/updown/downup/random/chord)
humanize_notes Add human-like velocity/timing/duration variation and swing to existing notes
create_harmony Generate harmony parts from existing notes — diatonic & chromatic intervals
create_counterpoint Generate counter-melody in contrary motion — mirrors melody around center pitch
add_mastering_chain Add EQ + Compressor + Maximizer to output bus with genre presets
create_genre_track Create a full genre starting point in one call
create_song_structure Create arrangement markers from JSON section list
automation_sweep Create smooth automation ramps with linear/exp/log curves
apply_mix_preset Apply volume/pan/mute/solo to all units from JSON or named preset

create_notes_batch

Replaces 10-50 create_note calls with one:

await server.mcp_opendaw_create_notes_batch(
    notes=[
        {"pitch": 60, "position": 0,    "duration": 480},
        {"pitch": 64, "position": 480,  "duration": 480},
        {"pitch": 67, "position": 960,  "duration": 480},
        {"pitch": 72, "position": 1440, "duration": 960},
    ],
    unit_index=0,
    track_index=0
)
# Returns: {"notes_created": 4}

create_drum_pattern

Compact step-sequencer notation. One call = full beat.

Notation:

Symbol Meaning
x Hit (normal velocity)
o Accent (high velocity)
. Rest
X Ghost (low velocity)

Lanes separated by |:

await server.mcp_opendaw_create_drum_pattern(
    pattern="x...x...x...x...|o.......o.....o.|..x...x...x...x.",
    unit_index=0
)
# Returns: {"total_notes": 10, "lanes": ["kick", "snare", "hihat"]}

Each lane is 16 steps (one bar of 16th notes). First lane = kick, second = snare, third = hihat.

create_chord_progression

Create chords from names — auto-voiced, positioned, batched:

await server.mcp_opendaw_create_chord_progression(
    chords=["Cm", "Fm7", "Gdom7", "Cm"],
    unit_index=1,
    track_index=0,
    duration=1920  # 2 bars per chord
)

Supported chord types: maj, min, dim, aug, sus2, sus4, dom7, maj7, min7, m7b5, etc.

create_melody

Create a melody from a scale + rhythmic pattern using scale degrees:

await server.mcp_opendaw_create_melody(
    scale="minor",
    root="A",
    pattern="1 0 3 0 5 - 4 3 2 0 1 + 1",
    unit_index=1,
    track_index=0,
    start_beat=0,
    octave=4,
    velocity=0.75
)

Pattern syntax (space-separated, each step = one 16th note):

Symbol Meaning
1-7 Scale degree (1 = root)
0 Rest
- Sustain previous note (extend by one step)
+ Octave up (applies to next note only)

Supports 14 scales: major, minor, harmonic_minor, melodic_minor, dorian, phrygian, lydian, mixolydian, locrian, pentatonic_major, pentatonic_minor, blues, chromatic.

create_bassline

Create a bassline from root + rhythmic pattern with low octave and high velocity:

await server.mcp_opendaw_create_bassline(
    root="A",
    pattern="1 - - - 5 - - - 1 - - - 4 - - -",
    unit_index=2,
    track_index=0,
    octave=2,       # A2 = 45
    velocity=0.9,
    scale="minor"
)

Same pattern syntax as create_melody, plus:

Symbol Meaning
_ Octave down (applies to next note only)

Default octave is 2 (C2=36) for bass range. Default velocity is 0.9 for strong bass.

create_arpeggio

Create an arpeggio from a chord name with 6 patterns and 6 rates:

await server.mcp_opendaw_create_arpeggio(
    chord="Cmin7",
    pattern="up",       # up, down, updown, downup, random, chord
    rate="16",          # 32, 16, 8, 4, 16t, 32t
    steps=16,           # number of steps (16 = one bar of 16ths)
    unit_index=1,
    track_index=0,
    octave=4,
    velocity=0.65
)
Pattern Description
up Bottom to top, repeat
down Top to bottom, repeat
updown Up then down (ping-pong)
downup Down then up
random Random chord tones
chord Full chord on each step (block chords)

humanize_notes

Add human-like variation to existing notes — velocity, timing, duration, and swing:

await server.mcp_opendaw_humanize_notes(
    unit_index=0,           # -1 = all AUs
    velocity_amount=0.15,   # ±15% velocity variation
    timing_amount=0.12,     # ±12% of 16th note timing drift
    duration_amount=0.10,   # ±10% duration variation
    swing=0.35,             # 0=straight, 0.5=light swing, 1.0=triplet feel
    seed=42                 # reproducible results
)

Uses a seeded mulberry32 PRNG so the same seed always produces the same humanization. Works on all notes in the specified track(s)/unit(s), or globally with unit_index=-1.

Parameter Range Default Description
velocity_amount 0-1 0.15 Velocity deviation depth (0.05=subtle, 0.25=loose)
timing_amount 0-1 0.15 Timing offset depth in 16th note fractions
duration_amount 0-1 0.10 Duration deviation depth
swing 0-1 0.0 Swing amount (shifts odd 16th notes later)
seed int 42 PRNG seed for reproducibility

create_harmony

Generate harmony parts from existing notes — diatonic and chromatic intervals:

await server.mcp_opendaw_create_harmony(
    unit_index=0,           # source AU
    track_index=0,          # source note track
    region_index=0,         # source region
    interval="thirds",      # diatonic: thirds, fifths, sixths
    direction="up",         # up or down
    # new_unit_index=-1,    # -1 = auto-create new synth track
    # velocity=0.65,        # slightly quieter than melody
)
Interval Type Description
thirds diatonic 3rd scale degree (scale-aware)
fifths diatonic 5th scale degree (scale-aware)
sixths diatonic 6th scale degree (scale-aware)
octave chromatic 12 semitones
fifth_chromatic chromatic 7 semitones (perfect fifth)
fourth_chromatic chromatic 5 semitones (perfect fourth)
third_major chromatic 4 semitones
third_minor chromatic 3 semitones

When new_unit_index=-1, a new Vaporisateur synth track is automatically created for the harmony.

add_mastering_chain

Add EQ + Compressor + Maximizer to the output bus:

await server.mcp_opendaw_add_mastering_chain(style="balanced")
# Styles: balanced, warm, loud, transparent
Style EQ Compressor Maximizer
balanced gentle tilt 2:1, -18 dB threshold -0.3 dB ceiling
warm low shelf boost 3:1, softer attack -1 dB ceiling
loud aggressive tilt 4:1, -14 dB threshold -0.1 dB ceiling
transparent subtle correction 1.5:1, -20 dB -0.5 dB ceiling

create_genre_track

Create a full genre starting point — synth, drums, bass, chords, BPM in one call:

await server.mcp_opendaw_create_genre_track(genre="house")
# Genres: house, techno, lofi, dnb, trap, ambient

Each genre template sets appropriate BPM, instrument types, and initial patterns. See the Examples page for full genre templates.

create_song_structure

Create arrangement markers from a JSON section list:

await server.mcp_opendaw_create_song_structure(
    sections=[
        {"name": "Intro",   "length": 8},
        {"name": "Verse 1", "length": 16},
        {"name": "Chorus",  "length": 16},
        {"name": "Bridge",  "length": 8},
        {"name": "Outro",   "length": 8},
    ]
)

Enables agents to reason about song form — sections become navigable landmarks.

automation_sweep

Create smooth automation ramps in one call:

await server.mcp_opendaw_automation_sweep(
    unit_index=0, effect_index=0, param_name="frequency",
    start_position=0, end_position=3840,
    start_value=0.1, end_value=0.9,
    curve="log"  # or: linear, exp
)

Replaces 10-30 create_automation_event calls with a single smooth ramp.

apply_mix_preset

Apply volume/pan/mute/solo to all units from JSON or named preset:

# Named preset
await server.mcp_opendaw_apply_mix_preset(preset="lofi")

# Custom JSON
await server.mcp_opendaw_apply_mix_preset(
    preset_json={
        "0": {"volume": -3, "pan": -0.3},
        "1": {"volume": -6, "pan": 0.0},
        "2": {"volume": -8, "pan": 0.3, "mute": True},
    }
)

Named presets: lofi, house, balanced, wide.