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.

Listed on mcpservers.org Listed on awesome-mcp-servers GitHub stars License: MIT Python 3.10+


Tabla de Contenidos


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:

Claude composing a dark bell melody in FL Studio via MCP

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:

  1. Instalar uv si no está presente
  2. Instalar dependencias de Python
  3. Guiarte para habilitar los puertos MIDI virtuales (IAC Driver en Mac, loopMIDI en Windows)
  4. Instalar el script de controlador MIDI de FL Studio
  5. Instalar el script de Piano Roll (ComposeWithLLM)
  6. 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 como fl_send_notes se 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)

  1. Abre Audio MIDI Setup (búscalo en Spotlight)
  2. Presiona Cmd+2 o ve a Window > Show MIDI Studio
  3. Haz doble clic en IAC Driver
  4. Marca "Device is online"
  5. Haz clic en Apply

Windows (loopMIDI)

  1. Descarga e instala loopMIDI
  2. Crea un puerto virtual (cualquier nombre sirve)
  3. 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

  1. Reinicia FL Studio (si está ejecutándose)
  2. Ve a Options > MIDI Settings
  3. En Input, encuentra tu puerto MIDI virtual (por ejemplo, "IAC Driver Bus 1")
  4. Establece el Controller type como FLStudioMCP
  5. 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

  1. Abre FL Studio y selecciona un canal
  2. Abre el Piano Roll (F7 o doble clic en el canal)
  3. La primera vez, ejecuta el script manualmente: Tools > Scripting > ComposeWithLLM
  4. Después de eso, las herramientas MCP dispararán el script automáticamente

Herramientas Disponibles

Conexión

HerramientaDescripción
fl_connectConectar/reconectar a FL Studio
fl_connection_statusObtener estado de la conexión

Transporte

HerramientaDescripción
fl_playIniciar/pausar reproducción
fl_stopDetener reproducción
fl_recordAlternar grabación
fl_get_transport_statusObtener estado de reproducción/grabación
fl_set_song_positionEstablecer posición de reproducción
fl_get_song_lengthObtener duración de la canción
fl_set_loop_modeCambiar entre modo patrón/canción
fl_set_playback_speedAjustar velocidad de reproducción (0.25x–4x)

Mezclador

HerramientaDescripción
fl_get_mixer_track_countObtener número de pistas del mezclador
fl_get_mixer_track_infoObtener detalles de una pista
fl_get_all_mixer_tracksListar todas las pistas
fl_set_track_volumeEstablecer volumen de pista
fl_set_track_panEstablecer paneo de pista
fl_mute_trackSilenciar/activar pista
fl_solo_trackSolo/quitar solo de pista
fl_arm_trackArmar pista para grabación
fl_set_track_nameRenombrar pista
fl_set_track_colorEstablecer color de pista
fl_set_stereo_separationAjustar ancho estéreo

Canales

HerramientaDescripción
fl_get_channel_countObtener número de canales
fl_get_channel_infoObtener detalles de un canal
fl_get_all_channelsListar todos los canales
fl_get_selected_channelObtener canal seleccionado
fl_select_channelSeleccionar/deseleccionar canal
fl_select_one_channelSeleccionar canal exclusivamente
fl_trigger_noteDisparar nota MIDI (tiempo real)
fl_set_channel_volumeEstablecer volumen de canal
fl_set_channel_panEstablecer paneo de canal
fl_mute_channelSilenciar/activar canal
fl_solo_channelSolo/quitar solo de canal
fl_set_channel_nameRenombrar canal
fl_set_channel_colorEstablecer color de canal
fl_route_channel_to_mixerEnrutar a pista del mezclador
fl_get_grid_bitObtener paso del secuenciador
fl_set_grid_bitEstablecer paso del secuenciador
fl_get_step_sequenceObtener patrón completo
fl_set_step_sequenceEstablecer patrón completo

Plugins

HerramientaDescripción
fl_is_plugin_validVerificar si existe un plugin
fl_get_plugin_nameObtener nombre del plugin
fl_get_plugin_param_countObtener número de parámetros
fl_get_plugin_paramsListar todos los parámetros
fl_get_plugin_param_valueObtener valor de parámetro
fl_set_plugin_param_valueEstablecer valor de parámetro
fl_get_preset_countObtener número de presets
fl_next_presetSiguiente preset
fl_prev_presetPreset anterior
fl_get_plugin_colorObtener color del plugin

Piano Roll

HerramientaDescripción
fl_send_notesAgregar notas al piano roll
fl_send_chordAgregar un acorde (varias notas al mismo tiempo)
fl_delete_notesEliminar notas específicas
fl_clear_piano_rollBorrar todas las notas
fl_get_piano_roll_stateLeer notas actuales del piano roll
fl_trigger_scriptDisparar manualmente el script de FL Studio
fl_get_piano_roll_infoObtener información del sistema del piano roll
fl_clear_request_queueCancelar 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"

  1. Asegúrate de que FL Studio esté ejecutándose
  2. Verifica que el controlador FLStudioMCP esté habilitado en MIDI Settings
  3. En Mac, verifica que IAC Driver esté habilitado en Audio MIDI Setup
  4. En Windows, verifica que loopMIDI esté ejecutándose
  5. Reinicia FL Studio después de habilitar el controlador

"Tiempo de espera agotado esperando respuesta de FL Studio"

  1. Asegúrate de que FL Studio tenga el foco
  2. Revisa la ventana de salida de scripts en FL Studio (View > Script output)
  3. Verifica que el controlador esté recibiendo MIDI (busca actividad en MIDI Settings)

El script de Piano Roll no se dispara

  1. Primera vez: ejecuta manualmente Tools > Scripting > ComposeWithLLM en FL Studio
  2. En macOS: concede permisos de Accesibilidad cuando se soliciten
  3. 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
  4. Intenta presionar Cmd+Opt+Y (macOS) o Ctrl+Alt+Y (Windows) manualmente para confirmar que el atajo está vinculado al script en FL Studio
  5. 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:

  1. El servidor MCP escribe el comando en un archivo JSON
  2. Envía una nota MIDI de disparo a FL Studio
  3. El script del controlador de FL Studio lee el JSON, ejecuta la API, escribe la respuesta
  4. El servidor MCP lee la respuesta

Piano Roll:

  1. El servidor MCP escribe las solicitudes de notas en un archivo JSON
  2. 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
  3. 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

ComandoDescripción
uv run fl-studio-mcpEjecutar el servidor MCP
uv run ruff check .Revisar el código fuente
uv run ruff check --fix .Revisar y corregir automáticamente
uv run pytestEjecutar 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

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