FL Studio MCP
Conecta asistentes de IA con FL Studio, permitiendo a los productores controlar la reproducción, la configuración del mezclador, los plugins y las notas del piano roll mediante comandos en lenguaje natural.
Documentación
Servidor FL Studio MCP
Controla FL Studio con lenguaje natural. Un servidor MCP (Model Context Protocol) que permite a los asistentes de IA manejar FL Studio mediante comunicación MIDI y scripts de Piano Roll: compón melodías, ajusta mezclas y automatiza plugins sin tocar el mouse.
Tabla de Contenidos
- Demo
- Características
- Limitaciones
- Requisitos
- Instalación Rápida
- Instalación Manual
- ¿Qué Clientes de IA Funcionan con Esto?
- Uso
- Herramientas Disponibles
- Ejemplos de Flujos de Trabajo
- Solución de Problemas
- Arquitectura
- Desarrollo
- Créditos
Demo
Pídele a Claude que analice tu proyecto y componga una melodía: las notas aparecerán en el Piano Roll en tiempo real:

No le hagas caso al audio de mala calidad, tuve que grabar con el micrófono porque Apple no me dejaba grabar el audio del escritorio jaja
https://github.com/user-attachments/assets/d4fc668f-9fe5-4ab4-9f18-76cd661029c6
Escucha el audio original si quieres
https://github.com/user-attachments/assets/c2b1a5e7-1640-41fa-82bc-18ca7cbae9e8
Características
Control de Transporte
- Reproducir, pausar, detener la reproducción
- Alternar la grabación
- Establecer la posición de reproducción
- Obtener la duración y posición de la canción
- Controlar el modo de bucle (patrón/canción)
- Ajustar la velocidad de reproducción
Control del Mezclador
- Obtener/establecer volumen y paneo de pistas
- Silenciar/solo pistas
- Armar pistas para grabación
- Establecer nombres y colores de pistas
- Control de separación estéreo
Control del Channel Rack
- Listar todos los canales
- Obtener/establecer propiedades de canales (volumen, paneo, nombre, color)
- Silenciar/solo canales
- Enrutar canales a pistas del mezclador
- Disparar notas MIDI en tiempo real
- Control del secuenciador de pasos (obtener/establecer bits de la cuadrícula)
Control de Plugins
- Listar parámetros de plugins
- Obtener/establecer valores de parámetros
- Navegar por presets (siguiente/anterior)
- Consultar información del plugin
Control del Piano Roll
- Agregar notas al piano roll con sincronización precisa
- Agregar acordes con un solo comando
- Eliminar notas específicas por número MIDI y tiempo
- Borrar todas las notas del piano roll
- Leer el estado del piano roll para ver todas las notas existentes
- Disparo automático mediante atajo de teclado (Cmd+Opt+Y en macOS, Ctrl+Alt+Y en Windows)
Limitaciones
No puede cargar plugins — La API de scripting de FL Studio no admite cargar nuevos plugins VST/AU. Solo puedes controlar parámetros de plugins que ya estén cargados en tu proyecto.
Sin gestión de patrones (por ahora) — El servidor puede escribir notas y pasos del secuenciador en un patrón, pero no tiene herramientas para crear, cambiar, renombrar o clonar patrones. Todo se escribe en el patrón que esté seleccionado actualmente en FL Studio, así que elige o crea el patrón tú mismo antes de pedir notas. (La API de scripting de FL Studio sí admite esto mediante el módulo
patterns, por lo que podría agregarse.)
Requisitos
- FL Studio 20.7+ (API de Scripting de Controladores MIDI)
- Python 3.10+
- macOS o Windows
- macOS: IAC Driver (integrado, debe habilitarse)
- Windows: loopMIDI
Instalación Rápida
macOS / Linux
git clone https://github.com/karl-andres/fl-studio-mcp.git
cd fl-studio-mcp
./install.sh
Windows
git clone https://github.com/karl-andres/fl-studio-mcp.git
cd fl-studio-mcp
# Allow running local scripts for this user (one-time)
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force
.\install.ps1
install.ps1 es el equivalente en Windows de install.sh: los mismos pasos, PowerShell en lugar de bash. Instala Python 3.12 específicamente (requerido para los wheels precompilados de python-rtmidi en Windows).
Ambos instaladores harán lo siguiente:
- Instalar uv si no está presente
- Instalar dependencias de Python
- Guiarte para habilitar los puertos MIDI virtuales (IAC Driver en Mac, loopMIDI en Windows)
- Instalar el script de controlador MIDI de FL Studio
- Instalar el script de Piano Roll (ComposeWithLLM)
- Configurar Claude Desktop o Claude Code automáticamente (
scripts/install_mcp_for_claude.sh/scripts/install_mcp_for_claude.ps1)
Nota sobre el piano roll en Windows: El script de Piano Roll se lanza enviando a FL Studio un atajo de teclado (
Ctrl+Alt+Y). En Windows esto trae la ventana de FL Studio al frente brevemente, así que FL Studio aparecerá al frente por un momento cada vez que una herramienta comofl_send_notesse ejecute. Esto es esperado. Consulta El script de Piano Roll no se dispara si no se activa en absoluto.
Instalación Manual
1. Instalar Dependencias de Python
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .
2. Habilitar Puertos MIDI Virtuales
macOS (IAC Driver)
- Abre Audio MIDI Setup (búscalo en Spotlight)
- Presiona Cmd+2 o ve a Window > Show MIDI Studio
- Haz doble clic en IAC Driver
- Marca "Device is online"
- Haz clic en Apply
Windows (loopMIDI)
- Descarga e instala loopMIDI
- Crea un puerto virtual (cualquier nombre sirve)
- Mantén loopMIDI ejecutándose mientras usas FL Studio
3. Instalar Scripts de FL Studio
Copia el script del controlador a la carpeta Hardware de FL Studio:
# macOS
mkdir -p ~/Documents/Image-Line/FL\ Studio/Settings/Hardware/FLStudioMCP
cp fl_controller/device_FLStudioMCP.py ~/Documents/Image-Line/FL\ Studio/Settings/Hardware/FLStudioMCP/
# Windows
mkdir "%USERPROFILE%\Documents\Image-Line\FL Studio\Settings\Hardware\FLStudioMCP"
copy fl_controller\device_FLStudioMCP.py "%USERPROFILE%\Documents\Image-Line\FL Studio\Settings\Hardware\FLStudioMCP\"
Copia el script de Piano Roll:
# macOS
cp scripts/ComposeWithLLM.pyscript ~/Documents/Image-Line/FL\ Studio/Settings/Piano\ roll\ scripts/
# Windows
copy scripts\ComposeWithLLM.pyscript "%USERPROFILE%\Documents\Image-Line\FL Studio\Settings\Piano roll scripts\"
4. Configurar FL Studio
- Reinicia FL Studio (si está ejecutándose)
- Ve a Options > MIDI Settings
- En Input, encuentra tu puerto MIDI virtual (por ejemplo, "IAC Driver Bus 1")
- Establece el Controller type como FLStudioMCP
- Habilita el puerto (haz clic para resaltarlo)
5. Configurar Tu Cliente MCP
Agrega a tu configuración de Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"fl-studio": {
"command": "uv",
"args": ["run", "--directory", "/path/to/fl-studio-mcp", "fl-studio-mcp"]
}
}
}
Para Claude Code, agrégalo a tu configuración de MCP (~/.claude.json, o ejecuta claude mcp add).
¿Qué Clientes de IA Funcionan con Esto?
Este es un servidor MCP estándar que se comunica con clientes a través de stdio: no está vinculado a ningún proveedor de IA específico. En principio, cualquier cliente compatible con MCP puede conectarse: Claude Desktop, Claude Code, Cursor, Windsurf, Gemini CLI, Codex CLI/Agents SDK de OpenAI, etc.
Lo que está realmente probado y auto-configurado: solo Claude Desktop y Claude Code, mediante scripts/install_mcp_for_claude.sh (macOS/Linux) y scripts/install_mcp_for_claude.ps1 (Windows). Otros clientes no tienen soporte de instalador: tendrías que agregar manualmente la siguiente entrada de servidor MCP a la configuración de ese cliente:
{
"command": "uv",
"args": ["run", "--directory", "/path/to/fl-studio-mcp", "fl-studio-mcp"]
}
Reemplaza /path/to/fl-studio-mcp con la ruta de tu clon local. Si pruebas esto con un cliente que no sea de Claude, abre un issue con lo que funcionó o no: el protocolo debería soportarlo, pero no se ha verificado aquí.
Uso
Ejecutar el Servidor Manualmente
# Using uv
uv run fl-studio-mcp
# Or after installation
fl-studio-mcp
Flujo de Trabajo con Piano Roll
- Abre FL Studio y selecciona un canal
- Abre el Piano Roll (F7 o doble clic en el canal)
- La primera vez, ejecuta el script manualmente: Tools > Scripting > ComposeWithLLM
- Después de eso, las herramientas MCP dispararán el script automáticamente
Herramientas Disponibles
Conexión
| Herramienta | Descripción |
|---|---|
fl_connect | Conectar/reconectar a FL Studio |
fl_connection_status | Obtener estado de la conexión |
Transporte
| Herramienta | Descripción |
|---|---|
fl_play | Iniciar/pausar reproducción |
fl_stop | Detener reproducción |
fl_record | Alternar grabación |
fl_get_transport_status | Obtener estado de reproducción/grabación |
fl_set_song_position | Establecer posición de reproducción |
fl_get_song_length | Obtener duración de la canción |
fl_set_loop_mode | Cambiar entre modo patrón/canción |
fl_set_playback_speed | Ajustar velocidad de reproducción (0.25x–4x) |
Mezclador
| Herramienta | Descripción |
|---|---|
fl_get_mixer_track_count | Obtener número de pistas del mezclador |
fl_get_mixer_track_info | Obtener detalles de una pista |
fl_get_all_mixer_tracks | Listar todas las pistas |
fl_set_track_volume | Establecer volumen de pista |
fl_set_track_pan | Establecer paneo de pista |
fl_mute_track | Silenciar/activar pista |
fl_solo_track | Solo/quitar solo de pista |
fl_arm_track | Armar pista para grabación |
fl_set_track_name | Renombrar pista |
fl_set_track_color | Establecer color de pista |
fl_set_stereo_separation | Ajustar ancho estéreo |
Canales
| Herramienta | Descripción |
|---|---|
fl_get_channel_count | Obtener número de canales |
fl_get_channel_info | Obtener detalles de un canal |
fl_get_all_channels | Listar todos los canales |
fl_get_selected_channel | Obtener canal seleccionado |
fl_select_channel | Seleccionar/deseleccionar canal |
fl_select_one_channel | Seleccionar canal exclusivamente |
fl_trigger_note | Disparar nota MIDI (tiempo real) |
fl_set_channel_volume | Establecer volumen de canal |
fl_set_channel_pan | Establecer paneo de canal |
fl_mute_channel | Silenciar/activar canal |
fl_solo_channel | Solo/quitar solo de canal |
fl_set_channel_name | Renombrar canal |
fl_set_channel_color | Establecer color de canal |
fl_route_channel_to_mixer | Enrutar a pista del mezclador |
fl_get_grid_bit | Obtener paso del secuenciador |
fl_set_grid_bit | Establecer paso del secuenciador |
fl_get_step_sequence | Obtener patrón completo |
fl_set_step_sequence | Establecer patrón completo |
Plugins
| Herramienta | Descripción |
|---|---|
fl_is_plugin_valid | Verificar si existe un plugin |
fl_get_plugin_name | Obtener nombre del plugin |
fl_get_plugin_param_count | Obtener número de parámetros |
fl_get_plugin_params | Listar todos los parámetros |
fl_get_plugin_param_value | Obtener valor de parámetro |
fl_set_plugin_param_value | Establecer valor de parámetro |
fl_get_preset_count | Obtener número de presets |
fl_next_preset | Siguiente preset |
fl_prev_preset | Preset anterior |
fl_get_plugin_color | Obtener color del plugin |
Piano Roll
| Herramienta | Descripción |
|---|---|
fl_send_notes | Agregar notas al piano roll |
fl_send_chord | Agregar un acorde (varias notas al mismo tiempo) |
fl_delete_notes | Eliminar notas específicas |
fl_clear_piano_roll | Borrar todas las notas |
fl_get_piano_roll_state | Leer notas actuales del piano roll |
fl_trigger_script | Disparar manualmente el script de FL Studio |
fl_get_piano_roll_info | Obtener información del sistema del piano roll |
fl_clear_request_queue | Cancelar cambios pendientes en cola |
Ejemplos de Flujos de Trabajo
Ajustar una Mezcla
"Set the volume of mixer track 1 to 80% and pan it slightly left"
Crear un Patrón de Batería
"Create a basic kick pattern on channel 0 with kicks on steps 0, 4, 8, and 12"
Agregar una Melodía al Piano Roll
"Add a C major arpeggio starting at beat 0: C4, E4, G4, C5 - each note quarter duration"
Agregar Acordes
"Add a C major chord at beat 0, then F major at beat 2, then G major at beat 4"
Automatizar Parámetros de Plugins
"List the parameters of the plugin on channel 0 and set the filter cutoff to 50%"
Solución de Problemas
"No conectado a FL Studio"
- Asegúrate de que FL Studio esté ejecutándose
- Verifica que el controlador FLStudioMCP esté habilitado en MIDI Settings
- En Mac, verifica que IAC Driver esté habilitado en Audio MIDI Setup
- En Windows, verifica que loopMIDI esté ejecutándose
- Reinicia FL Studio después de habilitar el controlador
"Tiempo de espera agotado esperando respuesta de FL Studio"
- Asegúrate de que FL Studio tenga el foco
- Revisa la ventana de salida de scripts en FL Studio (View > Script output)
- Verifica que el controlador esté recibiendo MIDI (busca actividad en MIDI Settings)
El script de Piano Roll no se dispara
- Primera vez: ejecuta manualmente Tools > Scripting > ComposeWithLLM en FL Studio
- En macOS: concede permisos de Accesibilidad cuando se soliciten
- En Windows: el servidor MCP trae la ventana de FL Studio al frente automáticamente antes de enviar el atajo — si FL Studio no está ejecutándose o está minimizado en la bandeja del sistema, el disparador no puede encontrarlo y mostrará una advertencia indicándote que presiones el atajo manualmente
- Intenta presionar Cmd+Opt+Y (macOS) o Ctrl+Alt+Y (Windows) manualmente para confirmar que el atajo está vinculado al script en FL Studio
- Si acabas de actualizar el código del servidor (por ejemplo, aplicaste una corrección), reinicia completamente tu cliente MCP (Claude Desktop/Code) — reconectar el servidor MCP solo no reinicia el proceso subyacente
No hay puertos MIDI disponibles
- macOS: Habilita IAC Driver en Audio MIDI Setup
- Windows: Instala y ejecuta loopMIDI
Arquitectura
Este servidor MCP utiliza un enfoque híbrido:
┌─────────────────┐ ┌─────────────────────────────────────────┐
│ MCP Client │────▶│ FastMCP Server │
│ (Claude, etc) │ │ │
└─────────────────┘ │ ┌─────────────────┐ ┌──────────────┐ │
│ │ MIDI + JSON │ │ Piano Roll │ │
│ │ Tools │ │ Tools (JSON) │ │
│ └────────┬────────┘ └──────┬───────┘ │
└───────────┼──────────────────┼──────────┘
│ │
MIDI + JSON JSON Files +
│ Keystroke
▼ ▼
┌─────────────────────────────────────────┐
│ FL Studio │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │FLStudioMCP │ │ Piano Roll Script│ │
│ │(MIDI Ctrl) │ │ (ComposeWithLLM) │ │
│ └──────────────┘ └──────────────────┘ │
└─────────────────────────────────────────┘
Cómo Funciona
Transporte / Mezclador / Canales / Plugins:
- El servidor MCP escribe el comando en un archivo JSON
- Envía una nota MIDI de disparo a FL Studio
- El script del controlador de FL Studio lee el JSON, ejecuta la API, escribe la respuesta
- El servidor MCP lee la respuesta
Piano Roll:
- El servidor MCP escribe las solicitudes de notas en un archivo JSON
- Envía un atajo de teclado (Cmd+Opt+Y en macOS, Ctrl+Alt+Y en Windows) para disparar el script de FL Studio — en Windows, la ventana de FL Studio se trae al frente primero para que el atajo realmente llegue
- El script de Piano Roll lee el JSON y modifica las notas
Desarrollo
Prerrequisitos
- Python 3.10+
- uv (recomendado)
Configuración
# Install all dependencies including dev extras
uv sync --dev
# Or with pip
pip install -e ".[dev]"
Comandos disponibles
| Comando | Descripción |
|---|---|
uv run fl-studio-mcp | Ejecutar el servidor MCP |
uv run ruff check . | Revisar el código fuente |
uv run ruff check --fix . | Revisar y corregir automáticamente |
uv run pytest | Ejecutar pruebas |
Estructura del proyecto
fl-studio-mcp/
├── fl_controller/
│ └── device_FLStudioMCP.py # FL Studio MIDI controller script (runs inside FL Studio)
├── scripts/
│ ├── setup.sh # FL Studio script installer
│ ├── install_mcp_for_claude.sh # Claude config installer (macOS/Linux)
│ ├── install_mcp_for_claude.ps1# Claude config installer (Windows)
│ └── ComposeWithLLM.pyscript # Piano Roll script (runs inside FL Studio)
├── src/fl_studio_mcp/
│ ├── server.py # FastMCP server entry point
│ ├── tools/ # MCP tool implementations
│ │ ├── channels.py
│ │ ├── mixer.py
│ │ ├── piano_roll.py
│ │ ├── plugins.py
│ │ └── transport.py
│ └── utils/
│ ├── connection.py # FL Studio connection wrapper
│ ├── fl_trigger.py # Piano roll keystroke trigger
│ └── midi_connection.py # MIDI + JSON communication layer
├── install.sh # One-command installer (macOS/Linux)
└── install.ps1 # One-command installer (Windows)
Créditos
- FL Studio API Stubs — Documentación de la API
- FastMCP — Marco de trabajo del servidor MCP
- mido — Biblioteca MIDI para Python
- calvinw/fl-studio-mcp — Enfoque de integración del Piano Roll
- Image-Line — FL Studio
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en abrir un problema o una solicitud de extracción.
Solo un aviso: este proyecto aún no cuenta con un conjunto de pruebas adecuado, integración continua ni un proceso de revisión para solicitudes de extracción. Soy un estudiante que mantiene esto en mi tiempo libre, por lo que los cambios se prueban principalmente a mano en FL Studio. Si deseas ayudar a configurar pruebas o un flujo de trabajo de contribución más fluido, esa ayuda es especialmente bienvenida.
Licencia
MIT