262 MCP tools for agent-native control of openDAW, a browser-based DAW
io.github.AMEOBIUS/opendaw-mcp — openDAW MCP Server
This MCP server provides agent-native control of openDAW, a browser-based DAW, exposing tools count data as “262 MCP tools”. It is associated with topics including audio production, MIDI, DSP, mixing, stem separation, and browser automation technologies.
🛠️ Key Features
262 MCP tools for controlling openDAW
Agent tools integration context (topics include agent-tools)
Covers areas such as MIDI, DSP, mixing, and stem separation
🚀 Use Cases
Audio production and music production workflows
Programmatic control of a browser-based DAW
Agent-driven tasks involving synthesis, mixing, and stem separation
⚡ Developer Benefits
Developer-oriented tool catalog alignment (topics include mcp, mcp-server)
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.
Why opendaw-mcp?
The only MCP server that gives an AI agent full DAW control — not just file conversion or playback.
Feature
opendaw-mcp
Other audio MCPs
Full DAW control (263 tools)
✅
❌ (1-10 tools)
Scriptable DSP (write custom JS effects)
✅
❌
SOTA stem separation (7 models, GPU local)
✅
❌
Suno → DAW E2E pipeline
✅
❌
Genre templates (8 genres)
✅
❌
Agent skills with decision points
✅ (8 skills)
❌
Offline render with LUFS targeting
✅
❌
Preset save/load (.opb)
✅
❌
dawproject interchange (Ableton/Bitwig)
✅
❌
Unique workflow: Suno generates → SOTA stem split → openDAW import → mix/master → export. No other tool does this.
How It Works
text
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.
Features
Track & Region CRUD — create/delete/move audio, note, and automation tracks with regions
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
adaptive-mix-mastering
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 references/decision-tree.md.
suno-to-opendaw
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.
dsp-script-authoring
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.
opendaw-automation
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.
opendaw-track-architecture
Track structure
Tracks, regions, clips, notes, tempo, time signature, markers, groove, song form. 50+ tools for building the skeleton of a track.
opendaw-sound-design
Instruments + DSP
Built-in instruments (Vaporisateur, Playfield, Nano, Tape, Soundfont) + 26 scriptable DSP scripts (Werkstatt/Apparat/Spielwerk) with full API reference and choosing guide.
opendaw-genres
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.
opendaw-effect-routing
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
bash
# 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.
git clone https://github.com/andremichelle/openDAW.git
cd openDAW
npm install
npm run build # or: npx turbo run build
Create a headless host page (see headless-daw/ for reference implementation).
Run
bash
# Terminal 1: Start openDAW dev servercd 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.py
SSE Transport
For remote deployments and registry introspection (e.g. Glama):
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 tools
Docker
bash
# Pull pre-built image from GitHub Container Registry
docker pull ghcr.io/ameobius/opendaw-mcp:1.14.1
docker run -p 8080:8080 ghcr.io/ameobius/opendaw-mcp:1.14.1
# MCP server available at http://localhost:8080/sse# Or build from source
docker build -t opendaw-mcp .
docker run -p 8080:8080 opendaw-mcp
The 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):
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_darksat.js
Werkstatt
Tape saturation with drive, bias, tone, mix, output gain
werkstatt_coldfold.js
Werkstatt
Wavefolding + bitcrush + slew rate reduction
werkstatt_paulstretch.js
Werkstatt
Extreme time-stretch via FFT/ISTFT overlap-add
werkstatt_envfollower.js
Werkstatt
Envelope follower with sidechain ducking
werkstatt_chorus.js
Werkstatt
Stereo chorus with LFO-modulated delay lines
werkstatt_reverb.js
Werkstatt
Algorithmic reverb with comb + allpass filters
werkstatt_shimmer.js
Werkstatt
Pitch-shimmer reverb with granular pitch shift
werkstatt_phaser.js
Werkstatt
Phaser with LFO-swept allpass filter chain
werkstatt_subcrusher.js
Werkstatt
Sub-bass enhancement with glide and distortion
werkstatt_lookahead.js
Werkstatt
Lookahead limiter with gain reduction metering
werkstatt_adsr_trim.js
Werkstatt
ADSR envelope trim for sustained samples (#241)
werkstatt_granular_stretch.js
Werkstatt
Granular time-stretch with Hann window + pitch shift (#201)
werkstatt_pitch_shift.js
Werkstatt
Real-time pitch shifter via delay-line sweep with crossfade (#188)
werkstatt_dcremover.js
Werkstatt
DC offset remover + M/S stereo width tool (#91)
werkstatt_allpass.js
Werkstatt
Allpass filter with invert + cascade stages (#133)
werkstatt_ringmod_env.js
Werkstatt
Ring modulator with envelope-followed frequency modulation (#277)
apparat_darkbass.js
Apparat
Bass synth with sub oscillator and filter envelope
apparat_coldlead.js
Apparat
Lead synth with detune and vibrato
apparat_subcrusher.js
Apparat
Sub-bass synth with glide and distortion
apparat_ringmod.js
Apparat
Ring modulator synth with ADSR and sub-oscillator (#277)
apparat_fm.js
Apparat
2-operator FM synth with carrier/modulator ratio and ADSR (#138)
spielwerk_powerchord.js
Spielwerk
MIDI effect that generates power chord harmonies
spielwerk_arpeggiator.js
Spielwerk
MIDI arpeggiator with swing and octave range
spielwerk_chordmemory.js
Spielwerk
Chord memory — holds last chord shape (major/minor/7/dim/aug)
spielwerk_strum.js
Spielwerk
Strummer with up/down/random direction and spread
spielwerk_velocity.js
Spielwerk
Velocity scaler with curve, offset, and min/max clamp
spielwerk_mididelay.js
Spielwerk
MIDI delay with feedback, transpose per repeat, and decay
Examples
The examples/ directory contains 30 Python scripts demonstrating the full workflow:
Final 2 genre examples (E2E verified): genre_lofi.py (82 BPM, swung drums, jazzy ii-V-I, warm) and genre_trap.py (145 BPM, fast hi-hat rolls, gliding 808, dark minor). All 8 genres from the skill now covered with E2E examples. 30 examples total.
opendaw-genres skill — 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) and dsp-script-authoring (custom Werkstatt/Apparat/Spielwerk DSP script writing guide with patterns, validation, pitfalls). 7 skills total.
set_marker_repeat MCP 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_preset encodes any audio effect chain into a shareable .opb bundle via PresetEncoder.encodeEffects. load_effect_preset decodes .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_stems runs 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 scores
New Werkstatt script: ring modulator with envelope-followed frequency modulation (#277) — workaround for MIDI input limitation in Werkstatt audio effects
Scriptable device mapping info — list_script_params now returns full @param mapping metadata (min, max, mapping type, unit) via ScriptDeclaration.parseParams()
Range validation — set_script_param now validates values against @param declarations: bool snaps to 0/1, int rounds+clamps, linear/exp clamps to [min, max]. Returns clamped flag and range info
+23 new unit tests (54 total) — fraction maps, waveshaper funcs, revamp sections, safe_filename edge cases
Official ScriptCompiler migration — set_script_device_code now uses the real ScriptCompiler from @opendaw/studio-adapters instead of custom @param/@sample parser. Benefits: declaration caching (WeakMap), proper sample file cleanup, label parsing, correct worklet wrapping
Stems export fix — useInstrumentOutput changed from True→False. Stems now route through channel strip (effects, sends, volume/pan) as documented by naomiaro/opendaw-test
export_dry_stem — new tool for freeze/flatten/re-amp workflows: captures raw instrument output before effects
set_waveshaper_equation — 6 transfer functions (hardclip/cubicSoft/tanh/sigmoid/arctan/asymmetric)
set_crusher_crush — sample-rate reduction with documented crush inversion semantics
set_revamp_filter — 7 EQ sections (highpass/lowshelf/lowbell/midbell/highbell/highshelf/lowpass) with enabled/freq/gain/q/order
All pointerHub.incoming() enumeration patterns replaced across 245 tools
CONTRIBUTING.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() helpers
Replaced 133 occurrences of raw [...rootBox.audioUnits.pointerHub.incoming()].map(({box}) => box).sort(...) boilerplate with h.allAUBoxes() across 113+ MCP tools
Box-level helpers eliminate ~3000 lines of duplicated AU enumeration code
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 pointer
set_vocoder_modulator_source(unit_index, effect_index, source) — Set Vocoder modulator source: noise-white, noise-pink, noise-brown, self, or external
set_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)
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_StudioPreferences global 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_info
Mixer 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.DAW migrated to const h = window.DAW_HELPERS pattern
Eliminated boilerplate: AU list enumeration, sort, editing.modify wrapping