opendaw-mcp
openDAW MCP
263 MCP tools for agent-native control of openDAW — a browser-based digital audio workstation.
This project wraps openDAW's internal box system and project API behind a Model Context Protocol server, allowing AI agents (Claude, GPT, Hermes, etc.) to create and manipulate music projects programmatically — tracks, instruments, effects, MIDI, automation, audio regions, rendering, and more.
How It Works
AI Agent ──MCP──▶ Python Server ──Playwright──▶ Headless Chromium ──▶ openDAW (Vite dev server)The MCP server launches a headless Chromium instance loaded with openDAW, then communicates via page.evaluate() calls into the DAW's V8 context. Every tool performs real operations on the live project — no stubs, no mocks.
Related MCP server: ableton-mcp-server
Features
Track & Region CRUD — create/delete/move audio, note, and automation tracks with regions
Instrument Control — Vaporisateur ( polysynth), Nano, Tape, Soundfont, Playfield (drum machine), MIDI output
Effects — Delay, Reverb, Compressor, Equalizer, Saturation, Waveshaper, Stereo, Vocoder, NeuralAmp, Maximizer
MIDI Effects — Arpeggio, Pitch, Velocity, Zeitgeist, Spielwerk (scriptable)
Scriptable Devices — Apparat (instrument), Werkstatt (audio effect), Spielwerk (MIDI effect) with JS code compilation, full
@parammapping metadata, and range-validated parameter settingAutomation — event creation, interpolation modes, tempo/signature changes
Audio Operations — region fades, gain, time/pitch stretch, warp markers, play modes
Mixing — send/return routing, buses, volume, solo/mute, mixer state inspection
Rendering — offline stem export with LUFS targeting, full mix render
Clips — session view clip CRUD, clone, consolidate, playback settings
Groove — groove shuffle amount and duration control
Presets — export/import audio unit presets, effect chain presets
Transfer — move regions and audio units between projects
Project Info — tempo map conversion (PPQN↔seconds), duration, validation, sample listing
Notes — pitch range, overlapping detection, advanced properties (chance, cent, playCount, playCurve)
Modular System — voltage modules (Gain, Delay, Multiplier, AudioInput, AudioOutput), patch cable connections
Piano Mode — global transpose, keyboard type, note scale, time range
Project & Bus Metadata — creation date, signature, AU/track count, bus labels and colors
Debugging & Control — screenshots, condition polling, raw JS evaluation
Agent Skills
The skills/ directory contains structured skill files for AI agents (Hermes, Claude, etc.) that describe how to use the 263 MCP tools effectively. Each skill covers a specific domain and includes decision points so the agent can adapt to any genre or workflow.
Skill | Domain | Description |
| Mix → Master pipeline | Universal pipeline with decision points: genre detection, stem strategy, effect chain selection, LUFS targeting, mastering approach. Adapts to coldwave, techno, hip-hop, ambient, rock, pop. Includes |
| Suno → openDAW E2E | Killer workflow: Suno AI generation → SOTA stem separation (7 modes) → openDAW import → arrange → mix → master → export. 6-stage pipeline from prompt to finished track. Unique value prop — no other MCP server offers this. |
| Custom DSP writing | How to author custom Werkstatt/Apparat/Spielwerk DSP scripts. Processor API, @param/@sample declarations, DSP patterns (filters, saturation, reverb, LFO, envelope), validation workflow, 8 critical pitfalls. For writing new DSP, not using existing. |
| API reference | 263 MCP tools full reference, bridge architecture, pitfalls, DSP script library (26 scripts), CodeRabbit review patterns, PyPI publishing workflow. The base skill — others cross-reference it. 146 reference files. |
| Track structure | Tracks, regions, clips, notes, tempo, time signature, markers, groove, song form. 50+ tools for building the skeleton of a track. |
| Instruments + DSP | Built-in instruments (Vaporisateur, Playfield, Nano, Tape, Soundfont) + 26 scriptable DSP scripts (Werkstatt/Apparat/Spielwerk) with full API reference and choosing guide. |
| Genre templates | Concrete parameters per genre — BPM, track layout, drum patterns, bass lines, chords, effect chains, pan, LUFS targets. 8 genres: techno, coldwave, hip-hop, ambient, DnB, house, lofi, trap. Not theory — actual tool calls and values. |
| Effects + routing | Effect chains, sends/returns, sidechain, buses, mixing, mastering chain, render/export. How to route audio and deliver final output. |
Using skills with Hermes
# Skills are auto-discovered from ~/.hermes/profiles/*/skills/
# Copy to your profile:
cp -r skills/adaptive-mix-mastering ~/.hermes/profiles/your-profile/skills/creative/Using skills with other agents
The SKILL.md files are standard markdown with YAML frontmatter. Any agent that supports skill loading can use them. The decision points and tool references are agent-agnostic.
Quick Start
Prerequisites
Python 3.11+
Node.js 20+ (for openDAW dev server)
Chromium (Playwright will install it)
Install
From PyPI:
pip install opendaw-mcp
playwright install chromiumFrom source:
git clone https://github.com/ameobius/opendaw-mcp.git
cd opendaw-mcp
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install chromiumSet Up openDAW
Clone and build openDAW separately:
git clone https://github.com/andremichelle/openDAW.git
cd openDAW
npm install
npm run build # or: npx turbo run buildCreate a headless host page (see headless-daw/ for reference implementation).
Run
# Terminal 1: Start openDAW dev server
cd openDAW
npm run dev # typically serves on http://localhost:5174
# Terminal 2: Start MCP server (stdio transport, default)
cd opendaw-mcp
source venv/bin/activate
python server.pySSE Transport
For remote deployments and registry introspection (e.g. Glama):
MCP_TRANSPORT=sse FASTMCP_HOST=0.0.0.0 FASTMCP_PORT=8080 python server.pyCLI
python server.py --help # show usage and env vars
python server.py --version # print version and tool count
python server.py --list-tools # list all 258 registered MCP toolsDocker
# Pull pre-built image from GitHub Container Registry
docker pull ghcr.io/ameobius/opendaw-mcp:1.10.0
docker run -p 8080:8080 ghcr.io/ameobius/opendaw-mcp:1.9.6
# MCP server available at http://localhost:8080/sse
# Or build from source
docker build -t opendaw-mcp .
docker run -p 8080:8080 opendaw-mcpThe Docker image bundles openDAW (built from source), Vite dev server, Chromium, and the MCP server. The entrypoint starts Vite, waits for it to be ready, then launches the MCP server in SSE mode.
Claude Desktop / MCP Client Config
Add to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"opendaw": {
"command": "python",
"args": ["path/to/opendaw-mcp/server.py"],
"env": {
"OPENDAW_HOST_DIR": "path/to/headless-daw",
"OPENDAW_URL": "http://localhost:5174",
"OPENDAW_EXPORT_DIR": "path/to/exports"
}
}
}
}See mcp.json in the repo for a reference config.
Environment Variables
Variable | Default | Description |
|
| Path to the headless openDAW host directory |
|
| URL of the running openDAW instance |
|
| Directory for rendered audio exports |
| (from PATH) | Path to Node.js binary directory (if not on PATH) |
|
| Transport protocol: |
|
| SSE server bind host |
|
| SSE server bind port |
Architecture
HeadlessDawBridge
The HeadlessDawBridge class manages the Playwright lifecycle:
Launches headless Chromium with audio autoplay enabled
Navigates to the openDAW URL
Waits for
window.DAWand factory globals to loadInjects
DAW_HELPERS— JS utility functions that eliminate boilerplate across tools
DAW_HELPERS
JavaScript helpers injected into the DAW context:
au(i)— get audio unit adapter by indextrack(auIdx, trackIdx)— get track adapterregion(au, track, reg)— get region adapterinstrumentAU()— get the first instrument audio unitmodify(fn)— wrapper aroundediting.modify()for box mutationsallAUs()— list all audio unit adapters
Tool Structure
Each MCP tool follows the pattern:
@mcp.tool()
async def tool_name(param: str) -> str:
"""Description."""
async def _run():
result = await bridge.page.evaluate("""...JS...""")
return json.dumps(result)
return await bridge.run(_run)The bridge is a singleton — state persists within a single Python process. All box mutations go through editing.modify() as required by openDAW's transactional model.
Input Sanitization
All string parameters that are interpolated into JavaScript template literals are sanitized before evaluation — quotes, backslashes, and braces are stripped to prevent JS injection. Numeric parameters use proper int/float type annotations for FastMCP type coercion.
DSP Scripts
The scripts/ directory contains 26 example DSP scripts (15 Werkstatt + 5 Apparat + 6 Spielwerk):
Script | Device | Description |
| Werkstatt | Tape saturation with drive, bias, tone, mix, output gain |
| Werkstatt | Wavefolding + bitcrush + slew rate reduction |
| Werkstatt | Extreme time-stretch via FFT/ISTFT overlap-add |
| Werkstatt | Envelope follower with sidechain ducking |
| Werkstatt | Stereo chorus with LFO-modulated delay lines |
| Werkstatt | Algorithmic reverb with comb + allpass filters |
| Werkstatt | Pitch-shimmer reverb with granular pitch shift |
| Werkstatt | Phaser with LFO-swept allpass filter chain |
| Werkstatt | Sub-bass enhancement with glide and distortion |
| Werkstatt | Lookahead limiter with gain reduction metering |
| Werkstatt | ADSR envelope trim for sustained samples (#241) |
| Werkstatt | Granular time-stretch with Hann window + pitch shift (#201) |
| Werkstatt | Real-time pitch shifter via delay-line sweep with crossfade (#188) |
| Werkstatt | DC offset remover + M/S stereo width tool (#91) |
| Werkstatt | Allpass filter with invert + cascade stages (#133) |
| Werkstatt | Ring modulator with envelope-followed frequency modulation (#277) |
| Apparat | Bass synth with sub oscillator and filter envelope |
| Apparat | Lead synth with detune and vibrato |
| Apparat | Sub-bass synth with glide and distortion |
| Apparat | Ring modulator synth with ADSR and sub-oscillator (#277) |
| Apparat | 2-operator FM synth with carrier/modulator ratio and ADSR (#138) |
| Spielwerk | MIDI effect that generates power chord harmonies |
| Spielwerk | MIDI arpeggiator with swing and octave range |
| Spielwerk | Chord memory — holds last chord shape (major/minor/7/dim/aug) |
| Spielwerk | Strummer with up/down/random direction and spread |
| Spielwerk | Velocity scaler with curve, offset, and min/max clamp |
| Spielwerk | MIDI delay with feedback, transpose per repeat, and decay |
Examples
The examples/ directory contains 23 Python scripts demonstrating the full workflow:
Example | Description |
| Drum beat with Playfield |
| Chord progression with Vaporisateur |
| Mixing: levels, effects, sends |
| Stem export with LUFS targeting |
| Filter cutoff automation |
| Modular system with patch cables |
| Complete track: synth + drums + DSP + automation + render |
| Enhanced pipeline with orchestration tools |
| All 3 scriptable device types: Apparat synth + Werkstatt DSP + Spielwerk MIDI |
| Effect parameters: Compressor, Reverb, Delay, etc. |
| Automating instrument parameters over time |
| Mastering chain: EQ, compression, limiting |
| Metronome configuration and tempo changes |
| High-level orchestration tools in action |
| Song structure with markers and sections |
| Render and convert audio formats |
| Export to Bitwig .dawproject format |
| Warp markers for tempo-matched audio regions |
| Suno→openDAW pipeline: import AI track, add mastering chain, reverb send, arp layer, render+stems |
| Full E2E: stem split (7 SOTA modes, local GPU) → import stems → per-stem mix (vol/pan/effects) → MIDI arp layer → render+export |
| Save/load Werkstatt effect presets (.opb) — compile DSP script, tweak params, export preset, import back |
| Genre template: techno skeleton (130 BPM, 4-on-floor drums, rolling bass, Vaporisateur+Playfield, Compressor+Waveshaper chain) |
| DSP authoring: custom Werkstatt analog saturation script (tanh + DC blocker + tone filter), compile via ScriptCompiler, set params, verify |
Tool Catalog
See TOOL_CATALOG.md for the complete list of 263 tools with parameters and descriptions.
Orchestration Tools
High-level composers that combine multiple low-level operations into a single call — designed for agents to reduce token usage and round-trips:
Tool | Replaces | Example |
| 10-50 × |
|
| 10-20 × |
|
| 15-50 × |
|
| 3 × |
|
| 20-40 low-level calls |
|
Mastering
The MCP server includes a full mastering chain for streaming-ready output:
Render —
render_full(full mixdown) orexport_stems(per-track stems)Measure LUFS —
measure_lufs(ITU-R BS.1770-4 K-weighting, gated mean squares)Auto-gain —
auto_gain(iterative: render → measure → adjust Maximizer threshold + output volume → re-render, converges ±1 LUFS)
# Render full mix
await server.mcp_opendaw_render_full("my_mix", 48000)
# Measure loudness
lufs = json.loads(await server.mcp_opendaw_measure_lufs("my_mix"))
# → {"lufs_integrated": -18.3, "true_peak_db": -3.71, ...}
# Auto-gain to Spotify target (-14 LUFS)
result = json.loads(await server.mcp_opendaw_auto_gain("-14", "mastered", 48000, "3"))
# → converges to -13.7 LUFS in 3 iterationsPlatform targets: Spotify/YouTube -14 LUFS, Apple Music -16 LUFS, Tidal -14 LUFS.
Limitations
Headless only — some UI-dependent features (file dialogs, popup-based model loading) are not available
Single process — bridge state doesn't persist across Python process restarts
Upstream coupling — tools depend on openDAW's internal box system, which can change between versions
AU rename — requires adapter context not available in headless mode
Acknowledgments
andremichelle — creator of openDAW, an incredible browser-based DAW
Model Context Protocol — the protocol that makes agent-native tools possible
License
Apache-2.0 — see LICENSE
Changelog
v1.14.1 (2026-07-04)
opendaw-genresskill — 8 genre templates with concrete parameters: techno, coldwave, hip-hop, ambient, DnB, house, lofi, trap. BPM, track layout, drum patterns, bass lines, chord progressions, effect chains, pan, LUFS targets. Not theory — actual tool calls and values. 8 skills total.
v1.14.0 (2026-07-04)
2 new agent skills:
suno-to-opendaw(6-stage Suno→stems→openDAW→mix→master→export pipeline) anddsp-script-authoring(custom Werkstatt/Apparat/Spielwerk DSP script writing guide with patterns, validation, pitfalls). 7 skills total.set_marker_repeatMCP tool (v1.13.1) — marker repeat count control (0=infinite)263 MCP tools (254 low-level + 8 orchestration)
v1.13.0 (2026-07-04)
Preset Management: 2 new MCP tools for openDAW preset format (.opb).
save_effect_presetencodes any audio effect chain into a shareable .opb bundle via PresetEncoder.encodeEffects.load_effect_presetdecodes .opb and applies it to a project. Enables agent-driven preset creation and reuse.5 Werkstatt presets published to upstream (PR #284): Dark Saturation, Plate Reverb, Cold Fold Distortion, Stereo Phaser, Stereo Chorus.
263 MCP tools (254 low-level + 8 orchestration)
v1.12.1 (2026-07-04)
Stem Splitter: 2 new MCP tools for SOTA open-source source separation.
split_stemsruns 7 modes locally on GPU (ensemble, scnet, bs6, polarformer, dereverb, drumsep, denoise). Optional auto-import into DAW. Uses BS-Roformer, HTDemucs FT, SCNet XL, MelBand Roformer models.list_split_modes— list all separation modes with SDR scores263 MCP tools (254 low-level + 8 orchestration)
v1.12.0 (2026-07-04)
Agent Skills: 8 structured skill files in
skills/directory — adaptive mix→master, suno-to-opendaw (Suno→stems→mix→master E2E), dsp-script-authoring (custom DSP), opendaw-genres (8 genre templates), opendaw-automation (263 tools, 146 ref files), track architecture, sound design, effect routing. Decision points for genre-adaptive workflows. Agent-agnostic.26 DSP scripts total (15 Werkstatt + 5 Apparat + 6 Spielwerk)
v1.11.9 (2026-07-04)
CodeRabbit fixes: reverb stereo width (separate L/R comb banks with decorrelated delay times, M/S width on reverb tail), paulstretch cursor split (independent read/write cursors, proper frame emission gating)
26 DSP scripts total (15 Werkstatt + 5 Apparat + 6 Spielwerk)
v1.11.8 (2026-07-04)
New Werkstatt script: ring modulator with envelope-followed frequency modulation (#277) — workaround for MIDI input limitation in Werkstatt audio effects
26 DSP scripts total (15 Werkstatt + 5 Apparat + 6 Spielwerk)
v1.11.7 (2026-07-04)
Suno→openDAW pipeline example: import AI-generated track, add mastering chain (tape sat + lookahead comp), reverb send bus, MIDI arp layer, render + stems + LUFS
v1.11.6 (2026-07-04)
4 new Spielwerk MIDI effect scripts: chord memory, strummer, velocity scaler, MIDI delay
1 new Python example: Suno→openDAW pipeline (import AI track, mastering chain, reverb send, arp layer, render+stems)
26 DSP scripts total (15 Werkstatt + 5 Apparat + 6 Spielwerk)
v1.11.5 (2026-07-04)
7 new DSP scripts: DC remover + stereo width (#91), allpass filter (#133), 2-operator FM synth (#138), chord memory, strummer, velocity scaler, MIDI delay
Coldfold fix: removed unused
rangevariable (CodeRabbit review)26 DSP scripts total (15 Werkstatt + 5 Apparat + 6 Spielwerk)
v1.11.4 (2026-07-04)
1 new Apparat script: ring modulator synth with ADSR and sub-oscillator (#277)
18 DSP scripts total (12 Werkstatt + 4 Apparat + 2 Spielwerk)
v1.11.3 (2026-07-04)
1 new Werkstatt script: real-time pitch shifter via delay-line sweep (#188)
Ruff lint fixes: removed unused imports/variables in examples and midi_parser
17 DSP scripts total (12 Werkstatt + 3 Apparat + 2 Spielwerk)
v1.11.2 (2026-07-04)
10 DSP bug fixes synced from upstream PR #283 CodeRabbit review:
darksat: undefined
outRvariable fix, DC blocker signal path correctedchorus: delay buffer 2× for depth modulation, safe modulo for negative indices
coldfold: slew parameter
/100scaling removed (was disabling the parameter)lookahead: gain reduction now applied to delayed signal (true lookahead)
reverb: comb filter indices advancing, per-comb damping state, M/S stereo width decode
shimmer: per-channel pitch shifter state (eliminates stereo crosstalk)
phaser: stable 1st-order allpass topology (2nd-order was unstable)
subcrusher: bidirectional glide (was diverging on upward glides)
arpeggiator: swing notes no longer dropped at block boundaries
14 DSP scripts total (9 Werkstatt + 3 Apparat + 2 Spielwerk) — all CodeRabbit issues addressed
2 new Werkstatt scripts: ADSR trim (sustained sample trimming, #241) + granular time-stretch (Hann window overlap + pitch shift, #201)
1 new Werkstatt script: real-time pitch shifter via delay-line sweep (#188)
1 new Apparat script: ring modulator synth with ADSR and sub-oscillator (#277)
18 DSP scripts total (12 Werkstatt + 4 Apparat + 2 Spielwerk)
v1.11.1 (2026-07-04)
Scriptable device mapping info —
list_script_paramsnow returns full@parammapping metadata (min, max, mapping type, unit) viaScriptDeclaration.parseParams()Range validation —
set_script_paramnow validates values against@paramdeclarations: bool snaps to 0/1, int rounds+clamps, linear/exp clamps to [min, max]. Returnsclampedflag andrangeinfo_clamp_script_paramPython helper mirrors JS-side clamping logic+15 unit tests (93 total) — TestScriptParamClamping: linear/exp/int/bool/unipolar clamping, rounding, snapping
+6 integration E2E tests — bridge startup, globals, track ops, scriptable compile, param clamping, latency benchmark (avg 4ms round-trip)
5 new Werkstatt DSP scripts — reverb (Schroeder plate), chorus (stereo dual-LFO), phaser (allpass cascade), lookahead compressor (soft knee), shimmer delay (granular pitch shift). Total: 12 scripts
DAW_ScriptDeclarationadded to headless-daw globals
v1.11.0 (2026-07-04)
apply_mix_preset— 8th orchestration tool: batch volume/pan/mute/solo across all tracks. Named presets (lofi, house, balanced, wide) or custom JSON258 MCP tools (252 low-level + 8 orchestration)
v1.10.2 (2026-07-04)
24 new unit tests for orchestration tools (78 total) — curve interpolation, chord theory, drum pattern parsing, song structure parsing
TOOL_CATALOG fully synchronized — 0 discrepancies with server.py
v1.10.1 (2026-07-04)
258 MCP tools (253 low-level + 7 orchestration)
create_song_structure— arrangement markers (intro/verse/chorus/bridge/outro) from JSON section listautomation_sweep— smooth automation ramps with linear/exp/log curves. Replaces 10-30create_automation_eventcallsPyPI v1.10.1 published —
pip install opendaw-mcpBoth orchestration tools tested end-to-end via Playwright bridge
54 tests, ruff clean, CI green
v1.10.0 (2026-07-04)
7 orchestration tools — high-level composers for agents:
create_notes_batch— batch MIDI note creation (JSON array, one round-trip)create_drum_pattern— step-sequencer notation (x...x...→ drum beat)create_chord_progression— chord names → auto-voiced notes ([["C","min7"]])add_mastering_chain— EQ + Compressor + Maximizer with style presetscreate_genre_track— full genre starting point (house/techno/lofi/dnb/trap/ambient)create_song_structure— arrangement markers from JSONautomation_sweep— smooth parameter ramps with linear/exp/log curves
258 total tools (250 low-level + 7 orchestration + 1 internal)
set_metronome— dedicated metronome control (enabled, gain, beat_subdivision)Module-level lookup tables — TIDAL_RATE_MAP, DELAY_SYNC_MAP, WAVESHAPER_FUNCS, REVAMP_SECTIONS extracted for testability
+23 new unit tests (54 total) — fraction maps, waveshaper funcs, revamp sections, safe_filename edge cases
Official ScriptCompiler migration —
set_script_device_codenow uses the realScriptCompilerfrom@opendaw/studio-adaptersinstead of custom @param/@sample parser. Benefits: declaration caching (WeakMap), proper sample file cleanup, label parsing, correct worklet wrappingStems export fix —
useInstrumentOutputchanged from True→False. Stems now route through channel strip (effects, sends, volume/pan) as documented by naomiaro/opendaw-testexport_dry_stem— new tool for freeze/flatten/re-amp workflows: captures raw instrument output before effectsset_waveshaper_equation— 6 transfer functions (hardclip/cubicSoft/tanh/sigmoid/arctan/asymmetric)set_crusher_crush— sample-rate reduction with documented crush inversion semanticsset_revamp_filter— 7 EQ sections (highpass/lowshelf/lowbell/midbell/highbell/highshelf/lowpass) with enabled/freq/gain/q/orderset_tidal_rate— musical fraction string → Tidal LFO rate index (17 entries)set_delay_sync— musical fraction string → Delay synced time index (21 entries, includes "off")Effect lookup case-insensitive —
add_effect("werkstatt")now works alongsideWerkstattnaomiaro/opendaw-test research — 543 commits, 17 SDK doc chapters used as authoritative reference for effect parameters and box field names
54 tests, ruff clean, CI green
v1.9.6 (2026-07-03)
measure_lufsrefactored — 223 lines → 20 lines. Extracted_parse_wav()and_compute_lufs()helpersDRY: K-weighting coefficients — duplicated if/else branches (48kHz vs else) were identical, merged into single computation
9 new unit tests — WAV parsing (float32/mono/stereo/PCM16/invalid/no-data) + LUFS computation (silence/full-scale/low-level/stereo)
Social preview banner — custom OpenGraph image for GitHub link previews
awesome-mcp PR updated — title and body synced to 255 tools
GitHub topics — 18 topics for discoverability
31 total tests, ruff clean, CI green
v1.9.5 (2026-07-03)
CLI commands —
--version,--list-tools,--helpwith full env var reference31 unit tests — pytest covering
_ok,_err,_wrap_eval,_unwrap_eval,_safe_filename,_safe_path,_parse_wav,_compute_lufs3 bug fixes found by tests:
_ok()—{"success": False}in data overwrote theTrueflag (security fix)_safe_filename()— case-sensitive extension stripping (.MP3not stripped)_safe_filename()— Windows backslash path traversal not handled on Linux
CI enhanced — now runs pytest (54 tests) alongside syntax/AST/smoke/ruff checks
PEP 561 —
py.typedmarker for type checker supportMastering pipeline example — full chain: render → measure LUFS → auto-gain → stems → MP3
23 examples total — all syntax-validated
255 total tools (added
export_dry_stemfor freeze/flatten workflows)
v1.9.4 (2026-07-03)
Removed 2 duplicate tools (245 → 243)
delete_signature_event— superseded bydelete_signature_change(richer: position match + index, returns updated event list)list_aux_sends— superseded bylist_sends(richer: target_bus_name, send_level_db, routing, send_pan via box-level access)
TOOL_CATALOG.md regenerated from AST — all 255 tools with descriptions, 32 categories
server.json Docker tag fixed — was stale
1.0.0, now matches release version255 total tools
v1.9.3 (2026-07-03)
DRY refactoring complete: 17 DAW_HELPERS, ~295 replacements, 0 raw enumeration patterns
New helpers:
markerBoxes,sendBoxes,busBoxes,sampleBoxes,noteTrackBoxes,clipBoxes,rootClipBoxes,scriptParams,scriptSamples,chainBoxesAll
pointerHub.incoming()enumeration patterns replaced across 245 toolsCONTRIBUTING.md updated with full 17-helper reference table
6 DRY commits, 0 regressions, CI green
v1.9.2 (2026-07-03)
DRY refactoring: 113+ tools migrated to
h.allAUBoxes()/h.auBox()helpersReplaced 133 occurrences of raw
[...rootBox.audioUnits.pointerHub.incoming()].map(({box}) => box).sort(...)boilerplate withh.allAUBoxes()across 113+ MCP toolsBox-level helpers eliminate ~3000 lines of duplicated AU enumeration code
E2E verified: allAUBoxes returns sorted array, auBox(i) returns box by index, count matches raw, box identity matches
Security hardening
Transport action enum validation (
play,stop,toggle) — prevents JS injectionduplicate_effectchain_type enum validation (audio,midi)_safe_filename()+_safe_path()helpers —os.path.basename()sanitization + path traversal protection on 6 render/export locations_unwrap_evalbare except →json.JSONDecodeError
245 total tools (no tool count change — refactoring only)
v1.9.1 (2026-07-03)
2 new generic tools: Boolean & Integer effect parameter setters
set_effect_parameter_bool(unit_index, effect_index, parameter_name, value)— Generic boolean field setter. Covers Compressor (lookahead, automakeup, autoattack, autorelease), Gate (inverse), Maximizer (lookahead), StereoTool (invertL, invertR, swap), NeuralAmp (mono)set_effect_parameter_int(unit_index, effect_index, parameter_name, value)— Generic integer field setter. Covers Vocoder (bandCount), StereoTool (panningMixing), Fold (overSampling), Crusher (bits), Delay (version). Device-specific tools are preferred when available.
245 total tools
v1.9.0 (2026-07-03)
6 new tools: Device-Specific Parameters & NeuralAmp Model Loading
set_neuralamp_model(unit_index, effect_index, model_json, label, pack_id)— Load NAM/Tone3000 model JSON directly into a NeuralAmp effect, bypassing the popup-based Select Flow. Creates NeuralAmpModelBox and links it via pointerset_vocoder_modulator_source(unit_index, effect_index, source)— Set Vocoder modulator source: noise-white, noise-pink, noise-brown, self, or externalset_vocoder_band_count(unit_index, effect_index, band_count)— Set Vocoder filter band count (8-32)set_stereo_tool_panning(unit_index, effect_index, panning_mixing)— Set StereoTool panning law (linear, equal-power)set_fold_oversampling(unit_index, effect_index, oversampling)— Set Fold wavefolder oversampling (0=off, 1=2x, 2=4x)set_crusher_bits(unit_index, effect_index, bits)— Set Crusher bit depth (1-16)
255 total tools
v1.8.2 (2026-07-03)
2 new tools: Audio Region Time Base & Waveform Offset
set_audio_region_time_base(unit_index, track_index, region_index, time_base)— Switch duration interpretation between 'musical' (PPQN, tempo-following) and 'seconds' (fixed wall-clock)set_audio_region_waveform_offset(unit_index, track_index, region_index, offset)— Set waveform display offset for visual alignment
PR #280 closed — andremichelle confirmed it's our bundler setup issue, not upstream. Closing as requested.
237 total tools
v1.8.1 (2026-07-03)
3 new tools: Warp Marker CRUD —
create_warp_marker,delete_warp_marker,update_warp_markercreate_warp_marker(unit_index, track_index, region_index, position_beats, seconds)— Add warp marker to stretched audio regionsdelete_warp_marker(unit_index, track_index, region_index, marker_index)— Delete non-anchor warp markerupdate_warp_marker(unit_index, track_index, region_index, marker_index, position_beats, seconds)— Update warp marker position/seconds (-1 = unchanged)Enables agent-driven tempo matching: programmatically pin audio regions to musical positions
235 total tools
v1.8.0 (2026-07-03)
3 new tools: MP3/FLAC Audio Conversion —
convert_audio,render_full_format,export_stems_formatconvert_audio(filename, format, bitrate, quality)— WAV→MP3/FLAC via system ffmpegrender_full_format(filename, format, bitrate)— render + convert in one stepexport_stems_format(filename_prefix, format, bitrate)— stems + convert eachUses system ffmpeg (4.4.2), not browser WASM — more reliable in headless mode
E2E: WAV 1.01MB → MP3 0.11MB (ratio 0.106) → FLAC 0.19MB (ratio 0.194) ✅
Bugfix: operator precedence in 14 division+nullish coalescing expressions
X / Quarter ?? 0→(X ?? 0) / Quarter— prevents NaN→null for position/duration fields
Improvement:
get_track_infonow includesexclude_piano_modefield232 total tools
v1.7.4 (2026-07-03)
3 new tools: Engine Sleep/Wake + Loading Check —
engine_sleep,engine_wake,query_loading_completeengine_sleep()— suspend audio processing to save CPU during non-audio operationsengine_wake()— resume audio processingquery_loading_complete()— check if all audio samples are loaded and readyE2E: sleep ✅, wake ✅, loading (loaded=false, is_ready=true) ✅
Improvement:
get_effect_chain+get_midi_effect_chain— now return short type names (Delayinstead ofDelayDeviceBox), plusclass,minimizedfields
v1.7.3 (2026-07-03)
2 new tools: Instrument Automation —
add_instrument_automation,list_automatable_fieldsAutomate any instrument parameter: Vaporisateur cutoff/volume/ADSR, Tape flutter/wow, Playfield sample mute
Per-sample targeting via
sample_indexfor Playfieldlist_automatable_fieldsintrospects Pointers.Automation support (18/23 on Vaporisateur)Addresses upstream #269 (playfield mute automation) via MCP
E2E: Vaporisateur cutoff automated (3 events) ✅, 18 automatable fields ✅
v1.7.2 (2026-07-03)
3 new tools: Effect Duplication + Instrument Automation —
duplicate_effect,add_instrument_automation,list_automatable_fieldsduplicate_effect— duplicate single effect in-place with all params copied (audio or MIDI chain)add_instrument_automation— automate any instrument parameter (Vaporisateur cutoff/volume, Tape flutter, Playfield sample mute, etc). Supports per-sample targeting via sample_indexlist_automatable_fields— introspect which fields support Pointers.Automation (18/23 on Vaporisateur)Addresses upstream issue #273 (Ctrl+D for audio effects) and #269 (playfield mute automation) via MCP
E2E tested: Delay duplicated with params ✅, Vaporisateur cutoff automated (3 events) ✅, 18 automatable fields detected ✅
Bugfix:
transport(action)now respects action parameter — was always toggling, now correctly handles "play", "stop", "toggle"Cleanup: removed unused
region_typeparam fromset_region_durationandset_region_mute
v1.7.1 (2026-07-03)
4 new tools: Engine Control —
engine_panic(),get_engine_status(),schedule_clip_play(clip_ids),schedule_clip_stop(track_ids)Panic button for stuck audio, real-time engine monitoring (CPU load, position, BPM, playing state), session view clip triggering
E2E tested: get_engine_status ✅, engine_panic ✅
v1.7.0 (2026-07-03)
2 new tools: DawProject Interop —
export_dawproject(filename),import_dawproject(filename)Export/import projects in .dawproject format (Bitwig, Ableton, rePitch compatible)
ZIP containing project.xml, metadata.xml, and audio samples
Enables cross-DAW workflow: create in openDAW → export to Bitwig, or import Bitwig project → render in openDAW
DawProject + DawProjectImport exposed as globals in headless-daw
E2E tested: export (2442 bytes, valid ZIP) → import (7 boxes, round-trip OK)
v1.6.2 (2026-07-03)
2 new tools: Studio Settings —
get_studio_settings(),set_studio_setting(category, key, value)Read/write StudioPreferences: engine, visibility, editing, debug, storage, time-display, pointer
Control auto-create-output-maximizer, overlapping-regions-behaviour, enable-beta-features, auto-delete-orphaned-samples, note-audition-while-editing, and more
StudioPreferences exposed as
DAW_StudioPreferencesglobal in headless-daw
v1.6.1 (2026-07-03)
4 new tools from DAW globals research —
set_unit_minimized,list_aux_sends,capture_realtime,get_sample_infoMixer minimize, aux send listing, realtime audio capture, sample metadata
v1.6.0 (2026-07-03)
DAW_HELPERS refactoring — all 180 tools with
const p = window.DAWmigrated toconst h = window.DAW_HELPERSpatternEliminated boilerplate: AU list enumeration, sort, editing.modify wrapping
Fixed 19+ pre-existing bugs:
setPosition(api→engine), 8x missing.sort()on AU lists, 9xQuarter=960hardcode →h.ppqn.Quarter, 2x Python/JS scope leaksDAW_HELPERS provides:
h.au(i),h.track(),h.region(),h.modify(),h.allAUs(),h.ppqn,h.uuid,h.rootBox,h.api,h.editing,h.boxGraph,h.tempoMap,h.rootBoxAdapter,h.project
E2E verified: 23/23 tests passing
v1.5.2 (2026-07-02)
Sanitization: all string parameters sanitized against JS injection
Documentation: README badges, Docker, SSE, examples, mastering
CI: GitHub Actions with AST tool count verification
v1.5.0 (2026-07-01)
Modular system: 6 MCP tools for patchable modular synthesizer
PianoMode: 6 MCP tools for piano roll view control
Freeze/unfreeze: pre-render AU to save CPU
Preset save/load: export/import AU as base64 preset
Transfer regions/AUs: deep-copy with dependency tracking
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AMEOBIUS/opendaw-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server