beat-twin
This server provides read-only inspection of a Bitwig Studio session via an MCP bridge — no writes or mutations are exposed.
Session Overview: Full read-only session inspection covering transport, tracks, scenes, selected device, and remote controls.
Arrangement Planning: Generate plan-only arrangement suggestions based on the current Bitwig snapshot, with optional creative goal, style, and target length in bars.
Transport State: Get current tempo (BPM), playhead position in beats, and whether the transport is playing.
Track Inspection: Get volume, pan, mute, and solo status for all 8 tracks in the current bank window, or the currently selected track.
Scene & Clip Inspection: List available scenes in the current scene bank; get loop and playing-step info for the focused cursor clip.
Device Inspection: Get the status and 8 remote control parameters of the currently selected device, or list devices on a specific visible track (index 0–7).
Browser Inspection: Get the status of Bitwig's popup browser and list its visible results.
Provides tools for inspecting and controlling Bitwig Studio sessions, including transport, tracks, scenes, devices, and remote controls, with a read-only mode by default and optional write policies for transport, mixer, clips, scenes, devices, and application actions.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@beat-twinwhat's the current project tempo and time signature?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Beat Twin
Beat Twin is an experimental, local-first orchestration layer between musical agents and DAWs.
Its current repo contains three working musical surfaces:
a Bitwig Studio MCP bridge with explicit write-policy gates;
a standalone browser NanoDAW built on the canonical Beat Twin song and command models;
a NanoDAW MCP planning surface that prepares instrument-track and MIDI-clip plans for explicit review and confirmation in the browser, without Bitwig.
The DAW/agent contracts, transactional NanoDAW memory adapter, LiteRT-LM provider, Gateway security core, and loopback HTTP API are implemented. The authenticated browser WebSocket proxy and Bitwig adapter remain gated follow-up work.
What Works
Read-only session inspection for transport, tracks, scenes, selected device, and remote controls.
Plan-only arrangement suggestions based on the current read-only Bitwig snapshot.
A short read-only live smoke that separates TCP/controller setup failures from session-inspection failures.
Transport, mixer, clip, scene, device, and application write tools, hidden and blocked by default.
A Bitwig controller script that speaks JSON-RPC over a local TCP connection.
Offline protocol and policy tests that run without launching Bitwig.
A browser NanoDAW for command-first song sketches, Tone.js audition, note editing, pattern tools, keyboard shortcuts, local undo/redo, JSON save/load, visible timeline feedback, a local command palette, and deterministic command drafts.
Atomic
ExecutableBeatTwinCommand[]batches with monotonic revisions, stable errors, and idempotent request IDs.A versioned
DawAdaptercontract with fake-adapter conformance tests.Strict
SongPatchV1validation, deterministic compilation, and mutation-free preview.A
NanoDawAdaptermemory port plus an abstract browser-owned proxy boundary.A real S25 LiteRT-LM capture of the exact three-tool runtime request, plus a strict provider loop bounded to four steps; G1 passed with
gemma4-e2bon 2026-07-14.A fail-closed Gateway core for hashed pairing tokens, quotas, immutable plans, short-lived single-use confirmations, and redacted audit events.
A loopback-only Gateway HTTP API with strict pairing, target-fixed preview/confirmation/execution, and durable uncertain-outcome readback.
Related MCP server: ableton-mcp-server
Architecture
The current Bitwig MCP path is:
MCP client
-> Node.js MCP server (index.js)
-> local TCP JSON-RPC bridge on 127.0.0.1:8888
-> Bitwig controller script
-> Bitwig StudioThe Node process is the MCP server. It connects to the Bitwig controller on demand through BITWIG_HOST and BITWIG_PORT.
The browser NanoDAW foundation now lives alongside the MCP bridge:
apps/playground
-> @beat-twin/commands
-> @beat-twin/core
-> @beat-twin/audio-tone browser audition
-> localStorage JSON save/loadThe current Bitwig bridge still lives in index.js; adapter extraction is intentionally left for a later compatibility-focused slice. Browser audition is local Web Audio preview, not a Bitwig mutation or MCP write.
Browser save/load is also local NanoDAW state, not a Bitwig mutation.
Browser pattern tools are local document edits for duplicate, quantize, and transpose.
Browser undo/redo restores local NanoDAW command snapshots only.
Browser keyboard shortcuts invoke existing local NanoDAW actions only.
Browser timeline feedback is derived from local song state and does not call Bitwig.
Browser command palette actions reuse the same local NanoDAW action boundary.
Browser command drafts parse known local phrases only; they are not an AI chat path.
The standalone NanoDAW MCP path is separate from the historical Bitwig MCP:
MCP client -> NanoDAW MCP -> immutable plan -> browser review -> human confirmIt exposes catalog, inspection, and plan-preparation tools only. It never owns
song state and has no confirmation or execution tool. See
docs/NANODAW_MCP.md.
The Agent architecture keeps the browser as the only owner of NanoDAW song state and puts Beat Twin on the laptop between the UI, the phone-hosted model, and the selected DAW adapter:
NanoDAW Agent mode
-> Beat Twin Gateway on the laptop
-> LiteRT-LM OpenAI-compatible API on the S25
-> validated SongPatch
-> ExecutableBeatTwinCommand[]
-> side-effect-free preview
-> explicit human confirmation
-> NanoDawAdapter | BitwigAdapter
-> verifiable execution reportGemma may only list targets, inspect the selected session, and propose a
bounded SongPatchV1. Confirmation and execution are gateway/UI operations;
they are never model tools. The existing TOOL_SPECS registry remains the
historical 57-tool Bitwig MCP surface, not the portable agent language. See
docs/LOCAL-LLM-TOOL-ORCHESTRATION.md.
The provider, security core, and loopback HTTP API are implemented; the authenticated WebSocket session proxy and browser connected-mode wiring remain follow-up work.
Requirements
Node.js 24 for local development; Node.js 22 and 24 are covered by CI
pnpm 11.10.0 through Corepack
Bitwig Studio for live/manual verification
Install
pnpm installRun
node index.jsConfigure your MCP client to run that command from this repository. A portable example lives in llm-mcp/mcp.example.json.
Codex example:
codex mcp add beat-twin --env BITWIG_HOST=127.0.0.1 --env BITWIG_PORT=8888 -- node /absolute/path/to/beat-twin/index.jsInstall The Bitwig Controller
Copy the controller script into your Bitwig controller scripts directory.
Linux example:
mkdir -p "$HOME/Bitwig Studio/Controller Scripts/BeatTwin"
cp bitwig-controller/BeatTwin/BeatTwin.control.js "$HOME/Bitwig Studio/Controller Scripts/BeatTwin/BeatTwin.control.js"macOS users commonly use:
$HOME/Documents/Bitwig Studio/Controller Scripts/Windows users can copy bitwig-controller/BeatTwin into:
%USERPROFILE%\Documents\Bitwig Studio\Controller Scripts\Then open Bitwig Studio and add the controller manually:
Beat Twin -> Beat TwinIf Bitwig was already open before installing the file, restart Bitwig or reload
the controller settings before testing the bridge. See docs/LOCAL_MCP_SETUP.md
for local verification commands and troubleshooting.
Safety Model
Beat Twin is read-only by default. At the MCP entry point, write tools are not listed by MCP clients and are blocked without an enabling policy. The Bitwig controller also requires per-connection authentication for every non-read RPC. Configure its Bridge secret preference and pass the same value as BITWIG_BRIDGE_SECRET; keep the default bridge on loopback and never expose it to untrusted networks.
The future Agent Gateway does not expose these Bitwig MCP write tools to Gemma.
It validates a constrained SongPatch, materializes executable IDs, previews the
exact plan without mutation, and requires a short-lived human confirmation.
The bitwig-launcher-v1 adapter now authenticates, validates one bounded empty
launcher target, binds every mutation to its confirmed identity, and requires
tempo/clip/note readback. Its first live write belongs to the separately
confirmed BT-213 disposable-project proof.
To enable a narrow write class:
BITWIG_MCP_WRITE_POLICY=transport node index.jsTo enable multiple write classes:
BITWIG_MCP_WRITE_POLICY=transport,mixer_write node index.jsTo enable every write class for disposable test sessions only:
BITWIG_MCP_ENABLE_WRITES=1 node index.jsUse write mode only in a disposable Bitwig project or a copy of real work.
Tests
Run the offline checks:
pnpm testRun a syntax check:
node --check index.jsRun the short read-only live smoke after Bitwig has loaded the controller:
pnpm smoke:read-onlyThis checks TCP connectivity first, then returns a compact read-only session summary. It does not enable write tools or mutate Bitwig.
Run the browser NanoDAW checks:
pnpm nanodaw:test
pnpm test:playground
pnpm --filter @beat-twin/playground buildLive tests require Bitwig Studio, the controller script, and explicit write permissions. They are intentionally separate from the default test suite.
Useful Docs
Status
Beat Twin is an experimental local integration, not a hardened production tool. It is published as an open-source foundation for safe, inspectable, DAW-agnostic music-agent experiments.
License
MIT
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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/LaurentHuzard/beat-twin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server