fl-mcp
fl-mcp
Local MCP server for FL Studio 2026 on macOS. Requires Node 22+.
Setup
git clone https://github.com/ae5n/fl-mcp.git
cd fl-mcp
npm install
npm run setupOn macOS, open Audio MIDI Setup → Window → Show MIDI Studio → IAC Driver,
enable Device is online, and ensure Bus 1 and Bus 2 exist.
Then open FL Studio → Options → MIDI settings:
Bus 1output: Port11Bus 2output: enable, Port10Bus 1input: selectfl-mcp, enable, Port10Bus 2input: disable
Add the config printed by setup, or register the server with your client:
# Claude Code
claude mcp add fl-mcp -- node /absolute/path/to/fl-mcp/dist/mcp/main.js
# Codex
codex mcp add fl-mcp -- node /absolute/path/to/fl-mcp/dist/mcp/main.jsIn System Settings → Privacy & Security → Accessibility, allow the app that launches fl-mcp (Codex, Claude, or Terminal), then restart that app.
Open the target Piano Roll and run Tools → Scripts → fl-mcp bridge once. Keep that Piano Roll open for exact note operations.
Tools
Area | MCP tools | Operations |
Session |
| Capabilities and stale-write revision |
Project |
| Project context and tempo |
Transport |
| Play, stop, record, and seek |
Channels |
| Routing, levels, pan, mute, and selection |
Patterns |
| List and select patterns |
Mixer |
| Levels, pan, mute, and names |
Playlist |
| Read track names |
Plugins |
| List, search, read, and set parameters |
Automation |
| Send resolved parameter events |
Piano Roll |
| Page, add, edit, delete, or replace notes and markers |
Requests are typed and serialized; tools cannot execute arbitrary Python or FL event IDs. Mutations use stale-state checks and readback.
Automation storage requires FL to record Notes and automation; the first record command may open FL's recording prompt. Playlist tracks are read-only; FL does not expose Automation Clip or Playlist clip CRUD.
Transport
MCP stdio → user-only local socket → resident companion
├─ SysEx → FL controller
└─ atomic files → Piano Roll bridgeThe companion owns the MIDI ports and serializes writes. Piano Roll exchange stays inside FL's script directory and does not use the clipboard.
Development
npm run build
npm test
npm run typecheckAfter changing source code, run npm run build and restart Codex or Claude.
Run npm run setup instead when a script under fl/ changes.
License: MIT