MCP server for Bitwig Studio integration, providing tools for controlling and interacting with Bitwig Studio via OSC
Server has 20 tools with basic schemas and descriptions present for all tools. Naming follows verb-first convention (search_, recommend_, get_, set_, toggle_, navigate_, enter_, exit_, browse_, commit_, cancel_). However, descriptions are often generic or under-specified. Several critical gaps: (1) parameters lack type information in many cases (e.g., device_name parameter in get_device_info has no type constraint), (2) descriptions lack clarity on side effects and context (e.g., set_device_parameter doesn't explain which device, how to select it, or what param_index means), (3) output schemas are not documented anywhere in visible code, (4) error handling is absent, no guidance on recovery steps, (5) no tool annotations (readOnlyHint/destructiveHint) despite clear WRITE vs READ_ONLY distinction in metadata, (6) parameter constraints are minimal (no enums where appropriate, e.g., direction in navigate_device uses enum but most parameters don't). Tool definitions are visible in source code (bitwig_mcp_server/mcp/tools.py), confirming registration. Per-tool analysis shows inconsistency: discovery tools (search_device_browser, recommend_devices) have reasonable descriptions (~100-150 chars), but control tools (set_tempo, set_track_volume) lack detail on acceptable ranges, units, and side effects.
Open browser to browse presets for the selected device
Open browser to insert a device after the selected device
Cancel the current browser session
Commit the current selection in the browser
Enter a device layer/chain
Exit current device layer (go to parent)
Get a list of all device categories
Output schemas not documented. No visible tool response schemas in code. LLMs cannot plan downstream calls or extract necessary IDs/fields without documented return structures.
Missing tool annotations. write tools (set_tempo, set_track_volume, toggle_track_mute, etc.) lack destructiveHint/idempotentHint annotations. READ_ONLY tools lack readOnlyHint. Agents cannot determine which operations are safe to retry or have side effects.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Get detailed information about a specific device
Navigate to next/previous device
Recommend devices based on a natural language description of the desired sound or effect
Search for devices in the Bitwig browser using semantic search
Select a sibling device (in the same chain as current device)
Set value of a device parameter
Set the tempo of the Bitwig project
Set the pan of a track
Set the volume of a track
Toggle bypass state of the currently selected device
Toggle device window visibility
Toggle mute state of a track
Toggle play/pause state of Bitwig
Parameter type constraints missing or vague. set_device_parameter uses param_index (integer) and value (0-128) but lacks documentation on which device is targeted, how to discover param_index values, or what the 0-128 range represents (MIDI scale? percentage?). Similar issues in set_tempo (bpm 0-666 is unexplained; unusual upper bound suggests domain-specific but lacks context).
No error handling or recovery guidance. Tools lack descriptions of failure modes (e.g., 'If device not found, call search_device_browser first'). No actionable error messages visible in code. Agents have no way to recover from failures.
Device selection context undefined. Multiple tools (set_device_parameter, toggle_device_bypass, navigate_device, etc.) operate on 'the currently selected device' but there is no documented way for the agent to know which device is selected or how to select a specific device by name/ID. Forces agents to guess or requires manual UI interaction.
Inconsistent parameter descriptions. Some parameters have detailed descriptions (navigate_device.direction: 'Navigation direction'), others are minimal or missing context. set_track_volume and set_track_pan lack explanation of the 64-unit center baseline and whether values are dB-scaled, linear, or MIDI-range.
No confirmation/dry-run for destructive operations. irreversible operations (set_tempo, set_track_volume, set_device_parameter, etc.) lack confirmation or preview capabilities. Agents can accidentally alter entire projects without safeguards.
Parameter naming lacks type suffixes. Parameters like device_name, category, type, creator are inconsistent, some are strings, others are enums. No suffix (e.g., _name, _id) to guide LLM on expected format. Ambiguous whether 'type' means device type class or instance type.