How the connection works
The core request path is a three-layer stack:vibrai.amxd— a Max for Live device you load on any track. Inside it, a Node.js script runs an Express HTTP server onlocalhost:3333and translates REST calls into Live’s LOM via the Maxjsobject.Vibrai.Mcp— a C# process that communicates with your MCP client over stdio using JSON-RPC. Every tool call is proxied to the M4L device via HTTP.- Your MCP client — Claude Desktop, Claude Code, Cursor, or any other MCP-capable host. It sees the tools via the standard
tools/list/tools/callprotocol.
localhost:3334, installed separately via install_vibrai_remote_script / vibrai install remote-script. get_version reports it as the python_bridge field. See Installation and Troubleshooting.
Connecting Claude Desktop
Edit~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
How tools map to engine operations
Each MCP tool corresponds directly to a method on the underlying engine or bridge. Tools are grouped by domain: transport, tracks, clips, notes, drum maps, automation, devices, instruments, scenes, arrangement, scales, project, genre, generation, capture, sessions, license, install, update, uninstall, and version. See the Reference section for every tool, its parameters, and the matching CLI command.snake_case parameter convention
All MCP tool parameters usesnake_case. This is enforced at the wire level:
track_id,scene_index,start_beat,source_scene_index,part_type
trackId instead of track_id), the server’s binding filter catches the failure and returns a clear error message pointing at the correct snake_case form.
First-song wizard
The fastest way to hear Vibrai in action through MCP is the first-song wizard:start_first_song(vibe="lofi-house"). A full arrangement appears in Live in about 30–60 seconds.
Supported vibes: ambient-techno, lofi-house, deep-house, ambient-downtempo, minimal-techno. Each maps to a verified genre and preset pair.
The wizard executes; it does not hand back a script. It drives the engine directly and returns one structured result — mint the project, render it, start playback — not a recipe for the assistant to replay as further tool calls. If a step comes back with
action: "load_device_failed", that track has no instrument and will play silently, even though the run still reports completed.outcome: "needs_input" with the valid choices listed. That is not an error: present the choices and call the tool again with the value filled in.
Things you can ask for
You don’t need any special syntax. Describe what you want. These are copy-and-paste starting points.Start a new idea
Start a new idea
Demo it without any of your own instrument packs
Demo it without any of your own instrument packs
defaults.instruments overrides in the file. Useful for demos, testing, or any machine without extra sound packs.Under the hood that is apply_genre with confirm: true, then generate with with_instruments: true and stock_only: true. Every one of the 14 built-in genres ships its own stock-instrument picks — see Concepts for the resolution order.Add or change a part
Add or change a part
Shape an arrangement
Shape an arrangement
Understand what's there
Understand what's there
Save your work
Save your work
Turn a set you like into a reusable genre
Turn a set you like into a reusable genre
Getting better results
Name the section you mean. Instead of “change the second part,” say “in the breakdown” or “in the chorus.” The assistant works better with named sections. Name the instrument. “Bass,” “drums,” “lead,” and “pads” are all clear. “The thing on track 3” is harder to act on — if you’re not sure what’s there, ask it to list the tracks. Say keys and scales the way you’d say them out loud. “F minor,” “C major,” and “D Dorian” all work. You don’t need numbers. Undo is always available. Everything Vibrai writes to Live is a normal edit, the same as dragging MIDI notes in by hand. PressCmd+Z in Live to undo anything you don’t like.
If the assistant keeps picking the wrong track, give it a map before it starts: