MCP server for AI-powered control of Droplets VST/CLAP plugin. Provides tools for managing plugin instances, MIDI CC slots, and fugue (musical sequence) queuing/playback with transport synchronization.
Droplets MCP server has solid naming conventions (verb_noun pattern: list_*, queue_*, cancel_*, etc.) and comprehensive descriptions (avg 180 chars, well above 10-char minimum). However, critical gaps exist: (1) complex tools like queue_fugue and import_fugue have vague input schemas with generic 'object' types lacking nested field documentation; (2) parameter descriptions are present but inconsistent in detail, some lack format/constraint guidance; (3) no documented output schemas for any tool; (4) error handling descriptions are absent. The server demonstrates domain expertise but falls short of production-grade LLM-tool integration standards.
Cancel a fugue by ID. Omit `instance` to search every connected instance for the id (fugue ids are globally unique); pass a name or id to scope. Sends note-offs for any active notes and stops playback.
Cancel all fugues matching a tag pattern on an instance or across all instances.
Clear all fugues on an instance or across all instances.
Fetch a single fugue's full content by ID. Returns the fugue in the same compact lane-grouped form the LLM writes to queue_fugue (notes + cc + pitch_bends + pressures), with the `id` included — read a fugue, mutate one lane, and re-queue with the same tag + cancel_mode:'tag:...' to replace it.
Import a Standard MIDI File as fugues on an instance. The body must be base64-encoded SMF bytes. Each MIDI track becomes one fugue (format 0 files produce one fugue). Track names become fugue tags (with optional `tag_prefix` prepended); tracks without names get synthetic `imported-N` tags. Notes + CC are preserved exactly; per-note pitch bend and polyphonic aftertouch are dropped because MIDI 1.0 can't represent them per-note (set `strict: true` to error instead). Returns the queued fugue IDs. Typical workflow: user drags a .mid out of a DAW, edits it in the piano roll, and hands it back to the LLM who imports it as the new canonical version of a part.
queue_fugue and import_fugue accept generic 'object' type for 'data' parameter with no nested schema documentation. LLMs cannot infer the required structure (fugues array, defaults object, base64_mid field, etc.). This violates the constrained-input pattern and forces agents to guess at payload structure.
No tool returns a documented output schema. LLMs cannot plan downstream calls or extract required fields (e.g., fugue IDs from queue_fugue, instance_id from list_fugues). This violates the response-shaper pattern and forces agents to reason about unstructured responses.
Error handling guidance is absent. Tools like cancel_fugue and clear_fugues (destructive operations) provide no recovery hints. If a fugue ID is invalid or an instance is offline, the LLM has no guidance on what to do next (retry, list instances, ask user).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | <=2025-11-25 | v2 |
List active and pending fugues. Returns `{ fugues: [...] }`. Omit `instance` to list across every connected Droplets instance; pass a name or id to scope to one. Each row carries its own `instance_id` + `instance_name`, so follow-up calls (cancel_fugue, get_fugue) don't need a second list_instances hop.
List all connected Droplets plugin instances. Returns `{ instances: [{ id, name }, …] }`. Use the names or ids to target a specific instance when queueing fugues.
List all parameter slots for an instance with their names, CC mappings, and values. Returns `{ slots: [...] }`. Shows which slots are mapped to MIDI CC and can output CC when set.
Queue fugues for transport-synced playback. See tool description for the full spec (content types, points shape, curves, worked examples).
Rename a Droplets instance for easier reference. Use names like 'bass', 'pad', 'lead' to make targeting clearer.
import_fugue description mentions 'strict: true' and 'loop_mode'/'quantize' parameters but does not document their valid values or defaults. LLMs cannot determine when to use these options or what values are accepted.
Destructive tools (clear_fugues, cancel_fugue) lack confirmation or dry-run support. An agent could accidentally clear all fugues across all instances with a single call. No confirmation-request pattern implemented.