fl-bridge-mcp
Click on "Deploy 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., "@fl-bridge-mcpset the tempo to 120 BPM, then play a Dm7 G7 Cmaj7 progression"
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.
fl-bridge-mcp
An unofficial MCP (Model Context Protocol) bridge for FL Studio. Not affiliated with or endorsed by Image-Line. FL Studio is a trademark of Image-Line Software.
Talk to FL Studio from Claude (or any MCP client): transport, tempo, pattern jumps, step-sequencer programming, mixer moves, live notes, chord progressions — and, unlike a fire-and-forget MIDI blaster, it is built to read FL's state back over a return port.
Status (v0.2.0): the command path — tempo, transport, notes — is
verified live by ear on FL Studio 2026 / macOS. The return port connects
(FL handshakes on it), but status reports have not yet been confirmed end
to end, so treat get_status and list_channels as beta. Reports welcome.
How it works
MCP client ── stdio ──> server.py ── virtual MIDI "M5 FL Bridge" ──> FL Studio
^ │
└── virtual MIDI "M5 FL Bridge Return" <───┘server.pyopens two virtual CoreMIDI ports and exposes 18 MCP tools.device_M5FLBridge.py(an FL MIDI controller script) decodes commands and drives FL's scripting API; it reports state back via SysEx.Commands ride in SysEx under manufacturer id
0x7D(the dev/educational id) so they can never collide with note traffic. Notes ride as plainnote_on/note_offthat the script deliberately leaves unhandled — FL routes them to the selected channel exactly like a hardware keyboard, which is what makes them audible and recordable.
Related MCP server: FL Studio MCP
Install
python3 -m venv venv && ./venv/bin/pip install -r requirements.txt(pin matters:mcp<2— the 2.x SDK renamed FastMCP)Copy the
M5 FL Bridgefolder into FL's controller-script directory:macOS:
~/Documents/Image-Line/FL Studio/Settings/Hardware/Windows:
%USERPROFILE%\Documents\Image-Line\FL Studio\Settings\Hardware\
Register the server with your MCP client, e.g. for Claude Code (
~/.claude.json→mcpServers):"flstudio": {"type": "stdio", "command": "/path/to/venv/bin/python", "args": ["/path/to/server.py"]}
Wire it up in FL (once)
With the MCP server running (the ports only exist while it lives):
Options → MIDI settings
Input list → M5 FL Bridge → Enable, controller type M5 FL Bridge (user)
(for state read-back) Output list → M5 FL Bridge Return → Enable, and give it the same port number as the input — that links it to the controller so the script's replies have somewhere to go
View → Script output should greet you:
M5 FL Bridge v0.2 online
Skipping step 3 costs you get_status and list_channels; everything else
still works.
Tools
Tool | Does |
| play / stop / record |
| 10–522 BPM, 0.1 resolution, undo-able |
| jump to pattern (creates it if missing) |
| playing? tempo? pattern? channel? — from FL's own report |
| channel-rack names by index |
| step-sequencer programming |
| mixer track control |
| channel-rack control |
| timed notes/chords into the selected channel |
| chord symbols ( |
| any mode/pentatonic/blues run |
| all notes off |
| are the ports up, has FL ever answered |
Wire protocol
F0 7D <cmd> <payload> F7 — multi-byte values are two 7-bit bytes, MSB first.
cmd | direction | payload |
0x01 | →FL | transport: 0 stop · 1 play · 2 record |
0x02 | →FL | tempo×10 (14-bit) |
0x03 | →FL | pattern number (14-bit) |
0x04 | →FL | grid: channel (14-bit), step, value |
0x05 | →FL | mixer: sub (0 vol · 1 pan · 2 mute), track (14-bit), value |
0x06 | →FL | channel: sub (0 mute · 1 solo · 2 select), channel (14-bit) |
0x10 | both | →FL: status poll · FL→: playing, tempo×10, pattern, channel |
0x11 | both | →FL: name request (channel) · FL→: channel + ASCII name |
Limits (honest ones)
The FL MIDI-scripting API is a controller surface, not a project editor: no playlist arrangement, no plugin-parameter surgery, no piano-roll writing. Recording
play_noteswhile transport records is the way to get notes into a pattern.Notes land on the selected channel;
list_channelsthenchannel_selectis the aiming sequence.Built and tested on macOS (CoreMIDI). Windows needs a virtual-MIDI driver (loopMIDI) instead of
virtual=Trueports — untested.
MIT licensed (see LICENSE); scratches my itch, PRs welcome, no SLA.
This server cannot be deployed
Maintenance
Related MCP Connectors
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
MCP server for Producer/Riffusion AI music generation
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Drive WhatsApp from any MCP client: pair devices, send text and media, manage contacts and groups.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude to FL Studio, allowing the AI to compose music, control instruments, and live record melodies, chords, and drums to the piano roll.107-
- FlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude to FL Studio, allowing the AI to send melodies, chords, and drum patterns directly to the DAW via virtual MIDI ports.54-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects Claude to FL Studio, enabling natural language control of transport, mixer, channel rack, and piano roll operations.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables controlling FL Studio on macOS via MCP, including transport, mixer, channel, MIDI export, and Piano Roll note insertion.19 PyPIMIT