Droplets
Droplets β an MCP server that lets any LLM jam with you inside your DAW. MIDI in, MIDI out. A co-producer, not a replacement.
Ask AI about Droplets
Powered by Claude Β· Grounded in docs
I know everything about Droplets. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
πΉ Droplets
Let AI make music in your DAW β Connect Claude, GPT, or any AI to Ableton, Bitwig, Logic, and more!
Droplets is a VST3/CLAP plugin that bridges AI assistants and your DAW. Ask Claude to play a melody, create a drum pattern, or automate your synth β and hear it instantly in your project.
Built by Christophe Poucet (Simply Chris).
β¨ What Can It Do?
- π΅ Real-time MIDI β AI sends notes and CC messages directly to your instruments
- π Looping Patterns β Create "fugues" that sync to your DAW's transport
- ποΈ Parameter Control β Automate any plugin via MIDI CC or parameter slots
- π€ MIDI Export β Drag AI-created patterns into your arrangement as clips
- ποΈ MIDI 2.0 β Per-note pitch bend, pressure, and 16-bit velocity
ποΈ Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β YOUR DAW β
β βββββββββββββββββββ MIDI βββββββββββββββββββββββββββ β
β β ββββββββββββββΊβ Your Instruments β β
β β Droplets β β β β
β β Plugin β β πΉ Synths β β
β β β β π₯ Drums β β
β ββββββββββ¬βββββββββ β πΈ Samplers β β
β β βββββββββββββββββββββββββββ β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MCP (HTTP)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI ASSISTANT β
β β
β π€ Claude, GPT, or any MCP-compatible AI β
β β
β "Play a jazz chord progression" β
β "Create a 4-bar drum loop" β
β "Sweep the filter cutoff from 20% to 80%" β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π Quick Start
1οΈβ£ Install the Plugin
Build from source (see Building from Source below) and run cargo xtask install β it copies the plugin to the right location automatically.
| Platform | VST3 Location | CLAP Location |
|---|---|---|
| π macOS | ~/Library/Audio/Plug-Ins/VST3/ | ~/Library/Audio/Plug-Ins/CLAP/ |
| πͺ Windows | C:\Program Files\Common Files\VST3\ | C:\Program Files\Common Files\CLAP\ |
| π§ Linux | ~/.vst3/ | ~/.clap/ |
2οΈβ£ Load in Your DAW
Add Droplets as a MIDI effect and route its output to your instruments.
Bitwig: drop Droplets on a Note Effects chain before any instrument; MIDI flows downstream automatically.
Ableton Live: the VST3 build is classified as an instrument (a clap-wrapper limitation β the wrapper can't emit a MIDI-effect-only VST3 category today). Use Ableton's two-track MIDI-routing pattern:
- Put Droplets on its own MIDI track.
- Create a second MIDI track with your real instrument (drum rack, synth, sampler, etc.).
- On the second track, set MIDI From to the Droplets track and select Droplets in the plugin dropdown below it.
- Arm the second track (or set monitor to
In) so it hears the incoming MIDI.
Droplets still appears in the Plug-Ins browser under the Instruments list. Proper MIDI-effect classification is tracked as a post-demo fix.
3οΈβ£ Connect Your AI
Droplets speaks MCP over streamable HTTP on http://localhost:9999/mcp. MCP clients that speak HTTP directly (e.g. Claude Code, Cursor) can use that URL as-is:
{
"mcpServers": {
"droplets": {
"url": "http://localhost:9999/mcp"
}
}
}
Claude Desktop is stdio-only and does not support streamable HTTP. Bridge through mcp-remote, passing --allow-http so it accepts the non-TLS loopback URL:
{
"mcpServers": {
"droplets": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:9999/mcp",
"--allow-http"
]
}
}
}
4οΈβ£ Make Music! π
Ask Claude:
"Play middle C for 2 beats, then E and G together"
Or get fancy:
"Create a chill lo-fi beat with swing"
πΌ The Fugue System
Fugues are musical sequences that sync perfectly with your DAW's transport. Think of them as AI-generated MIDI clips that play in real-time.
Features
| Feature | Description |
|---|---|
| π― Quantized Start | Begin on the next beat, bar, or 4-bar phrase |
| π Looping | Play once, N times, or forever |
| πΉ Layering | Stack multiple patterns simultaneously |
| π·οΈ Tags | Group patterns (e.g., cancel all "drums" at once) |
| π CC Automation | Smooth parameter sweeps with interpolation |
Compact Format
Fugues use a compact JSON schema designed for LLM token efficiency. Each fugue is a typed block β notes, cc, per_note_pitch_bend, per_note_pressure, or a composite that bundles several together:
{
"fugues": [
{
"type": "notes",
"tag": "melody",
"notes": [
{ "beat": 0, "note": "C4", "duration": 1, "velocity": 100 },
{ "beat": 1, "note": "E4", "duration": 1 },
{ "beat": 2, "note": "G4", "duration": 2 }
]
},
{
"type": "cc",
"cc": 74,
"points": [[0, 20], [4, 100]],
"interpolation": "exp"
}
],
"quantize": "bar",
"loop_mode": "forever"
}
Notes auto-generate their own note-offs at beat + duration. CC points interpolate smoothly on the audio thread.
π οΈ MCP Tools
MIDI is fugue-only by design. LLM round-trip latency (~1β10s) is too high for musically-timed one-shot events β notes, CC, and MIDI 2.0 per-note expression all go through
queue_fugue, which schedules events on the audio thread with sample-accurate timing. Use acompositefugue to bundle notes + CC automation + per-note pitch bend + pressure into one atomic musical moment.
πΌ Fugues
| Tool | Description |
|---|---|
queue_fugue | Schedule one or more fugues (notes / cc / pitch_bends / pressures / composite) with tempo-quantized start |
list_fugues | List active + pending fugues with timing and loop progress |
get_fugue | Read a single fugue's full content back in the same compact shape queue_fugue accepts β enables read-modify-write |
import_fugue | Import a base64-encoded .mid as one or more fugues (the return leg of drag-out β edit-in-DAW β hand back) |
cancel_fugue | Stop a specific fugue by id |
cancel_fugues_by_tag | Stop every fugue sharing a tag (e.g. "melody") |
clear_fugues | Emergency stop β cancel every fugue on an instance |
ποΈ Transport & context
| Tool | Description |
|---|---|
get_transport | Current {beat, tempo, playing, time_sig, loop bounds} for reasoning about scheduling |
get_project_state | Call first when composing. Summary of connected Droplets instances, each track's primary device, and drum-pad maps (pitch notation + sample names) so the LLM writes correct notes instead of GM conventions |
π·οΈ Instances & slots
| Tool | Description |
|---|---|
list_instances | Every connected Droplets plugin process |
set_instance_name | Rename an instance (bass, pad, lead) for clearer targeting |
list_slots | Parameter slots with their CC mappings and current values |
π₯οΈ Plugin UI
Four tabs in the plugin window:
πΌ Sequencer
- Every active fugue renders its own piano-roll grid with a live playhead.
- Drag a row (or the
β£ Drag allbutton) onto your DAW to drop a.midclip of the fugue(s). - Drop a
.midback onto the sequencer panel to re-queue it as fugues (drag-round-trip). - Cancel, export, or export-all via the row controls.
ποΈ MIDI Mapping
- Per-instance list of CC slot parameters with their names and mapped CC numbers.
- Wiggle a slot to test the mapping; use MIDI-learn to bind a hardware controller.
πΉ DAW
- Live view of what the host controller extension (Bitwig today) has pushed: tracks, primary devices, drum-pad maps with sample names, per-track Remote Controls.
- Empty state shown when no extension is running (Ableton, Logic, older Bitwig).
βοΈ Settings
- MCP server URL (copy for your AI's config).
- Export folder for manually-saved
.midfiles. - Custom instructions appended to the MCP system prompt.
π€ MIDI Export
Turn AI compositions into DAW clips:
- Click β on any fugue in the list
- File saves to your exports folder
- Finder/Explorer opens automatically
- Drag the
.midfile into your DAW!
π§ Building from Source
Prerequisites
- π¦ Rust 1.70+
- π¦ Node.js 18+
- ποΈ For VST3: a VST3 SDK checkout, with
CLAP_WRAPPER_VST3_SDKpointing at it
Build + Install (macOS, Linux, Windows)
git clone https://github.com/poucet/droplets.git
cd droplets
# Build bundles for your platform into target/bundle/
cargo xtask build
# β¦or build AND copy into your DAW's user plugin folders in one step
cargo xtask install
cargo xtask install detects your OS and copies the CLAP/VST3 bundles to the
right per-user location:
| Platform | CLAP | VST3 |
|---|---|---|
| π macOS | ~/Library/Audio/Plug-Ins/CLAP/ | ~/Library/Audio/Plug-Ins/VST3/ |
| π§ Linux | ~/.clap/ | ~/.vst3/ |
| πͺ Windows | %LOCALAPPDATA%\Programs\Common\CLAP\ | %LOCALAPPDATA%\Programs\Common\VST3\ |
Useful flags:
cargo xtask build --format clap # skip VST3 if you don't have the SDK
cargo xtask build --profile debug --dev-gui # dev build with WebView devtools
cargo xtask install --skip-build # just copy existing bundles
π Project Structure
droplets/
βββ π¦ src/
β βββ lib.rs # Plugin entry point
β βββ fugue/ # πΌ Fugue sequencer
β β βββ sequencer.rs # Transport-synced playback
β β βββ export.rs # MIDI file export
β β βββ settings.rs # Persistent settings
β βββ mcp/ # π€ AI communication
β β βββ server.rs # MCP tool definitions
β β βββ bridge.rs # Plugin β server bridge
β βββ gui/ # π₯οΈ UI backend
β β βββ api.rs # REST endpoints
β β βββ routes.rs # Request routing
β βββ midi/ # πΉ MIDI processing
β
βββ βοΈ frontend/ # React UI
β βββ src/
β β βββ App.tsx # Main app
β β βββ components/ # UI components
β βββ package.json
β
βββ π¨ xtask/ # Build tools
βοΈ Configuration
Ports
| Service | Port |
|---|---|
| MCP Server | 9999 |
| GUI Server | 9998 |
Settings Location
| Platform | Path |
|---|---|
| π macOS | ~/.droplets/settings.json |
| πͺ Windows | %APPDATA%\Droplets\settings.json |
| π§ Linux | ~/.config/droplets/settings.json |
Export Folder
| Platform | Default Path |
|---|---|
| π macOS | ~/Music/Droplets/Exports/ |
| πͺ Windows | Documents\Droplets\Exports\ |
| π§ Linux | ~/Music/Droplets/Exports/ |
π€ Contributing
Contributions welcome! Feel free to:
- π Report bugs
- π‘ Suggest features
- π§ Submit pull requests
π License
MIT License β see LICENSE for details.
π Credits
Built with love using:
- clack-plugin β Rust CLAP framework
- rmcp β MCP server
- wry β WebView
- midly β MIDI files
- React β UI
Made with π΅ by Christophe Poucet (Simply Chris)
