quinnjr/fruityloops-mcp
If you are the rightful owner of fruityloops-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The FL Studio MCP Server is a Model Context Protocol server designed to enable AI assistants to interact with FL Studio's Python API and MIDI interfaces.
🎹 FL Studio MCP Server
A Model Context Protocol (MCP) server for FL Studio (Fruity Loops), enabling AI assistants like Claude to compose music and control FL Studio through natural language.
✨ Features
- FL Studio API Integration via Flapi: Control transport, mixer, channels, patterns, and more
- MIDI Interface: Send MIDI notes and messages to FL Studio via loopMIDI
- MCP Protocol: Standard interface for AI assistants (Claude, etc.)
- Dual Communication: Uses both Flapi (for API calls) and MIDI (for notes/CC)
- Type Safe: Full type hints and validation
🏗️ Architecture
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude Desktop │────▶│ MCP Server │────▶│ FL Studio │
│ (AI Assistant) │ │ (External) │ │ (Internal) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ ▲
│ │
┌──────┴──────┐ │
│ │ │
▼ ▼ │
┌──────────┐ ┌────────────┐ │
│ Flapi │ │ MIDI │ │
│ Bridge │ │ Interface │ │
└────┬─────┘ └─────┬──────┘ │
│ │ │
│ MIDI │ │
└─────────────┴──────────────────┘
- Flapi Bridge: Forwards FL Studio API calls (transport, mixer, channels) via MIDI to FL Studio's internal Python
- MIDI Interface: Sends MIDI notes, CC, program changes directly to FL Studio
📦 Installation
Prerequisites
- Python 3.10+
- FL Studio (version 20.7+ for MIDI scripting support)
- loopMIDI (Windows) - Download
Quick Start
# Install the MCP server
pip install fruityloops-mcp
# Install Flapi for FL Studio API access
pip install flapi
flapi install
Virtual MIDI Port Setup (Windows)
- Install loopMIDI
- Create these virtual MIDI ports:
FLStudio_MIDI- For sending MIDI notes/CC to FL StudioFlapi Request- For Flapi API requestsFlapi Response- For Flapi API responses
FL Studio Configuration
For MIDI Control:
- Open FL Studio → Options → MIDI Settings
- Enable the
FLStudio_MIDIport as an input - Route the MIDI input to your desired channel/instrument
For Flapi (API Access):
- Run
flapi installto install the Flapi script - Restart FL Studio
- Go to Options → MIDI Settings
- In the Output section, assign unique port numbers to
Flapi RequestandFlapi Response - In the Input section, set the same port numbers for the corresponding inputs
- Assign
Flapi Requestinput to the "Flapi Request" script - Assign
Flapi Responseinput to the "Flapi Response" script
🚀 Usage
With Claude Desktop
Add to your Claude Desktop configuration (%APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"fruityloops": {
"command": "uvx",
"args": ["fruityloops-mcp"]
}
}
}
Or using pip:
{
"mcpServers": {
"fruityloops": {
"command": "fruityloops-mcp"
}
}
}
First Steps in Claude
-
Connect to FL Studio:
"Connect to FL Studio via Flapi" -
Check connection:
"What's the Flapi connection status?" -
Start composing:
"Start playback in FL Studio" "Set the tempo to 120 BPM" "Play a C major chord"
🎛️ Available Tools
Flapi Connection
flapi_connect- Connect to FL Studio via Flapiflapi_disconnect- Disconnect from Flapiflapi_status- Check connection status
MIDI Tools
midi_connect- Connect to MIDI portmidi_disconnect- Disconnect from MIDI portmidi_list_ports- List available MIDI portsmidi_send_note- Send note with durationmidi_send_note_on/midi_send_note_off- Note messagesmidi_send_cc- Control change messagesmidi_send_program_change- Program changemidi_send_pitch_bend- Pitch bend
Transport Controls
transport_start/transport_stop- Playback controltransport_record- Toggle recordingtransport_get_bpm/transport_set_bpm- Tempo controltransport_get_song_pos/transport_set_song_pos- Position control
Mixer Controls
mixer_get_track_volume/mixer_set_track_volumemixer_get_track_name/mixer_set_track_namemixer_get_track_pan/mixer_set_track_panmixer_mute_track/mixer_solo_track
Channel Controls
channels_channel_count- Get number of channelschannels_get_channel_name- Get channel namechannels_set_channel_volume- Set volumechannels_mute_channel- Mute/unmutechannels_get_channel_color/channels_set_channel_color
Pattern Controls
patterns_pattern_count- Get number of patternspatterns_get_pattern_name/patterns_set_pattern_namepatterns_get_pattern_lengthpatterns_jump_to_pattern
Playlist Controls
playlist_get_track_name/playlist_set_track_name
General Controls
general_get_version- FL Studio versiongeneral_get_project_titlegeneral_save_projectgeneral_undo
UI Controls
ui_show_window- Show FL Studio windows (Mixer, Channel Rack, Piano Roll, etc.)ui_get_visible- Check window visibility
🛠️ Development
Setup
# Clone repository
git clone https://github.com/quinnjr/fruityloops-mcp.git
cd fruityloops-mcp
# Install dependencies
uv sync --all-extras
# Install git hooks
./install-hooks.ps1 # On Windows
./install-hooks.sh # On Unix/macOS
Testing
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov
# Run linting
uv run ruff check .
# Run formatting
uv run ruff format .
🐛 Troubleshooting
Flapi Connection Issues
- "Flapi not available": Run
pip install flapi - "Failed to connect":
- Ensure loopMIDI ports
Flapi RequestandFlapi Responseexist - Restart FL Studio after installing Flapi
- Check FL Studio MIDI settings are configured correctly
- Ensure loopMIDI ports
- "FL Studio connection test failed":
- Verify FL Studio is running
- Check the Flapi script is loaded (look for it in the MIDI scripts panel)
MIDI Issues
- "MIDI port not found": Create
FLStudio_MIDIport in loopMIDI - "Failed to send MIDI": Ensure MIDI port is connected first using
midi_connect - No sound: Check FL Studio has the MIDI port enabled and routed to an instrument
📖 Documentation
- - Detailed installation instructions
- - How to contribute
- - Practical examples
- API Documentation - Auto-generated API docs
🤝 Contributing
We welcome contributions! Please see for guidelines.
📜 License
This project is licensed under the MIT License - see the file for details.
Copyright (c) 2025 Joseph Quinn
🙏 Acknowledgments
- Flapi by Maddy Guthridge - FL Studio remote control
- FL Studio Python API
- Model Context Protocol
- loopMIDI by Tobias Erichsen
Made with ❤️ for the FL Studio and AI community