Skip to main content
Glama
PampaPilot MCP Server

PampaPilot MCP Server

by LeoLisena

PampaPilot

Agente de producción musical con IA para controlar REAPER desde lenguaje natural sin acoplar la automatización a un proveedor de IA específico.

PampaPilot — Your AI music production agent.

El principio central es separar responsabilidades:

  • el cerebro propone un plan;

  • el servidor MCP expone operaciones musicales tipadas;

  • el puente de REAPER ejecuta una lista permitida de acciones;

  • el verificador vuelve a leer el estado y distingue ejecución de resultado;

  • los analizadores pesados trabajan fuera del hilo de interfaz de REAPER.

Estado

La etapa 0 y la primera integración están terminadas. En REAPER 7.78/x64 se verificó el recorrido crear pista -> leer GUID -> ajustar paneo -> volver a leer -> deshacer ambas transacciones. El proyecto terminó con su estructura inicial. También se verificó en vivo la importación y lectura posterior de un WAV estéreo de 48 kHz, el cambio de 120 a 85 BPM sin alterar el audio y el guardado de la sesión con nombre propio. La primera sesión real contiene 12 stems importados y guardados; el lote completo es una única transacción reversible. El puente también aplica volumen, paneo y mute de varias pistas en una sola transacción. La primera mezcla estática real fue releída desde REAPER y su suma se verificó sin clipping antes de guardarla. El puente 0.5.1 agrega ReaComp y ReaEQ por GUID. El compresor se configura en unidades musicales y ReaEQ permite controlar bandas existentes por tipo e índice, con frecuencia, ganancia, Q y estado habilitado. Los valores se vuelven a leer dentro de una única transacción reversible. Desde el puente 0.7.0 se separan además instrumentos de efectos: add_instrument admite inicialmente ReaSynth y comprueba que REAPER lo registre realmente como VSTi de la pista, sin acoplar la interfaz a nombres arbitrarios de plugins. El puente 0.12.2 aplica una propuesta aprobada completa en una sola transacción, reutiliza FX mediante GUID explícitos y rechaza duplicaciones implícitas. La acción persistente publica on en la columna State de REAPER mientras el puente está activo y limpia el indicador al terminar. También lee de forma no destructiva los ajustes de render y la cadena FX del master para vincularlos con el control técnico del archivo final. También genera propuestas conservadoras de ReaLimit desde el análisis del archivo, exige el ID exacto aprobado, aplica parámetros en unidades legibles, vuelve a leerlos y conserva una transacción de deshacer segura. El mismo puente puede renderizar un candidato WAV de 24 bits a un destino nuevo dentro de sessions/, verificar que REAPER lo creó y enlazar inmediatamente su identidad SHA-256 con el análisis técnico del archivo. El puente 0.15.0 descubre FX instalados y usados, y agrega un flujo supervisado de ReaGate. Mide pasajes silenciosos sin clasificarlos automáticamente como ruido, rechaza la puerta por rutina en stems de Suno y exige aprobación por ID antes de crear o configurar una instancia identificada por GUID. También analiza picos sibilantes de voces orgánicas y propone un de-esser con ReaXcomp que comprime únicamente la banda superior. Los stems vocales de Suno se diagnostican, pero no reciben este procesamiento automáticamente. El puente 0.16.0 incorpora buses 100 % wet de ReaVerbate y ReaDelay, con envíos post-fader identificados por GUID. Los retardos musicales se convierten a milisegundos usando el BPM vigente y cada routing desactiva el transporte MIDI. Suno usa perfiles de ambiente deliberadamente más sutiles que las fuentes orgánicas, pero no queda excluido de la audición. El puente 0.17.0 agrega edición verificable de fades por GUID e inspección de envolventes de volumen. El puente 0.18.0 incorpora ReaTune mediante presets propios: identifica la instancia por GUID, carga un nombre exacto y comprueba que REAPER lo conservó, sin depender de parámetros internos no expuestos. El puente 0.19.0 habilita el alta y retirada verificable de ReaFIR y el descubrimiento de dominios públicos sin escribirlos. La reducción de ruido no se habilita todavía: el modo Subtract y el perfil son estado privado del plugin. El puente 0.20.0 incorpora saturación mediante JS: Multi Waveshaper: controla Drive, Muffle y Output, fija estéreo y sobremuestreo x2, desactiva el limitador interno y diferencia puntos de partida para Suno, fuentes orgánicas y desconocidas. El puente 0.21.0 agrega vocal riding por regiones para voces orgánicas: liga la propuesta al WAV y al ítem exactos, escribe sólo sobre una envolvente libre y relee cada punto. Los stems vocales de Suno se analizan pero no se automatizan. El puente 0.22.0 amplía la lectura de ítems con fuente, offset y playrate. El motor puede así revisar límites duros, impulsos, silencios internos, clipping y colas activas exactamente en el tramo usado por REAPER. Sólo propone revisión; no corta ni repara audio automáticamente. El puente 0.23.0 incorpora control dinámico de una resonancia amplia con ReaXcomp: propone una única banda de audición, mantiene las otras tres transparentes y usa un perfil especialmente suave para Suno. El puente 0.24.0 puede aplicar una cadena FX correctiva completa y ordenada en una única transacción: Gate, EQ, resonancia, compresión, de-esser y saturación. El plan cruza los FX existentes, conserva los ajenos y bloquea ambigüedades. El puente 0.25.0 agrega la preparación A/B: renderiza el mix antes y después de la cadena, restaura los ajustes de render tras cada archivo y crea copias WAV igualadas por LUFS mediante atenuación. La decisión sonora sigue siendo humana. El puente 0.27.0 interpreta letras estructuradas y muestra regiones reversibles. El motor 0.2 fusiona downbeats/modelo especialista, análisis por compás de todos los stems, consenso por rol y repetición musical; esas métricas quedan separadas para reutilizarlas en otras decisiones de productor. El puente 0.28.1 agrega carga atómica de presets ReaTune y acepta volumen, paneo, mute o solo como campos independientes dentro de una misma operación. La web traduce órdenes simples o complejas del chat a un catálogo tipado, exige aprobación según una política configurable, verifica el estado y permite deshacer el plan completo. El texto libre del LLM nunca se ejecuta directamente. El puente 0.29.2 agrega materialización de canciones desde la web: crea o abre un RPP propio en una pestaña de REAPER, configura el BPM e importa únicamente los WAV cuyas rutas todavía no están presentes. La pantalla principal permite crear borradores vacíos, agregar o quitar stems y definir su orden antes de importar; las sincronizaciones posteriores evitan duplicar fuentes y actualizan el orden de las pistas existentes sin recrearlas.

Related MCP server: ReaMCP

Decisiones iniciales

  • Windows y REAPER 7 como primera plataforma.

  • Python 3.12.13 para MCP, análisis de audio/MIDI y orquestación.

  • Lua/ReaScript para el adaptador que vive dentro de REAPER.

  • MCP oficial v2, con el servidor local conectado por stdio al principio.

  • Intercambio local por archivos atómicos y versionados entre Python y Lua.

  • Efectos nativos de REAPER en el primer MVP.

  • Un solo componente puede escribir en el proyecto; los especialistas sólo recomiendan acciones.

La arquitectura y sus límites están en docs/architecture.md. El estado completo de filtros y funciones pendientes se mantiene en docs/implementation-backlog.md. El primer recorrido verificable está en docs/mvp.md. La limpieza reutilizable de MIDI contra un stem está en docs/midi-cleanup.md. La gatera y el manifiesto de sesión están en docs/song-preparation.md. La materialización MIDI verificable está en docs/midi-import.md. La estrategia híbrida de procesamiento por stem está en docs/song-processing-strategy.md. El diagnóstico ahora enlaza cada problema observado con el siguiente analizador o filtro candidato, conservando una política especialmente cauta para Suno. La compatibilidad mono se verifica por bloques y bandas antes de sugerir cambios de ancho; una correlación negativa aislada no autoriza procesamiento. Véase docs/mono-compatibility.md. El análisis temporal reutilizable está en docs/timeline-analysis.md y su aplicación a secciones en docs/song-structure.md.

La automatización opcional por secciones se previsualiza antes de tocar REAPER. Los stems de Suno reciben movimientos de media intensidad (normalmente décimas de dB), las pistas orgánicas admiten un margen algo mayor y ninguna propuesta se activa por defecto. La aplicación exige el identificador exacto de la propuesta, no sobrescribe envolventes existentes y relee todos los puntos escritos. Véase docs/section-volume-automation.md. El fine-tuning lingüístico y su backend automático GPU/CPU están en docs/vocal-lyric-alignment.md. El control offline del master para distribución está en docs/master-delivery-qc.md. El limitador de mastering supervisado está en docs/mastering-proposals.md. El render con procedencia verificable está en docs/rendered-master-candidates.md. Las propuestas auditables de procesamiento están en docs/processing-proposals.md. El diagnóstico híbrido de stems está en docs/song-diagnosis.md. El cruce con el estado real de REAPER está en docs/production-plan.md. El detector conservador de clics, silencios y bordes está en docs/research/audio-integrity-adapter.md. La orquestación de una cadena por pista está en docs/research/producer-chain.md.

Entorno Python reproducible

En Windows x64, un único comando descarga una copia verificada de uv 0.12.1, instala Python 3.12.13 y sincroniza exactamente las dependencias del proyecto:

.\scripts\bootstrap.ps1

Las herramientas, Python y el entorno se guardan localmente en .tools/, .runtime/ y .venv-pampapilot/; no se versionan. El repositorio sí conserva .python-version, pyproject.toml y uv.lock, por lo que otra máquina puede reconstruir el mismo entorno sin depender del Python instalado en Windows.

Interfaz web

La primera interfaz de PampaPilot se inicia con:

.\scripts\run-web.ps1

Abra http://127.0.0.1:8765. Desde Nueva canción se cargan título, BPM, origen, letra, stems, MIDI y referencia sin manipular la estructura interna de carpetas. La configuración del cerebro admite LM Studio con token requerido de forma predeterminada y un modo sin autenticación para una red confiable. El botón Modo compacto abre la misma interfaz como ventana web always-on-top abajo a la derecha, conserva la canción activa y permite operar el chat mientras REAPER permanece visible. El historial visible y el modo de razonamiento se guardan en el servidor local y se comparten por canción entre la ventana completa y la compacta, incluso si usan perfiles de navegador distintos. El selector de razonamiento permite usar modo automático (razona ante órdenes que modifican REAPER), rápido sin razonamiento o profundo; una respuesta de acción con JSON incompleto se solicita nuevamente al modelo y nunca se ejecuta parcialmente. Esta elección sólo configura al proveedor activo y no forma parte del contrato de acciones de REAPER.

Para abrir la interfaz desde otro equipo de la LAN use .\scripts\run-web.ps1 -ServeOnLocalNetwork. Consulte docs/web-interface.md para límites de seguridad y alcance de la versión actual.

Pruebas locales

.\scripts\validate.ps1

El desarrollo asistido con Codex y un modelo local se prepara con scripts/install-codex-cli.ps1 y se inicia con scripts/start-local-codex.ps1. El flujo seguro de branches, worktrees, revisión y operación remota está en docs/hybrid-development-workflow.md.

El servidor local se inicia por stdio con:

.\scripts\run-mcp.ps1

No imprime nada mientras espera un cliente MCP; ese silencio es normal. El lanzador toma ipc_root de reaper/bridge_config.local.json, de modo que Python y Lua conservan el mismo transporte local después de un reinicio.

La evaluación de proyectos relacionados, commits revisados, licencias y decisiones de implementación se conserva en docs/research/reaper-ecosystem-audit.md.

Para conectarlo a Codex, copie .codex/config.toml.example como .codex/config.toml, reemplace las rutas absolutas y reinicie Codex. El archivo real es local y no se versiona.

El puente de REAPER usa además reaper/bridge_config.local.json, copiado desde reaper/bridge_config.example.json. Sólo permite importar medios ubicados bajo allowed_media_roots y guardar proyectos bajo allowed_project_roots; los stems locales de media/ y las sesiones de sessions/ están excluidos de Git.

Análisis offline de stems

El análisis objetivo se ejecuta fuera de REAPER para no bloquear su interfaz:

.\.venv-pampapilot\Scripts\python.exe .\scripts\analyze_stems.py `
  "C:\RUTA\A\LOS\STEMS" "C:\RUTA\AL\REPORTE\stems.json"

El reporte incluye formato, duración, LUFS, picos, RMS, factor de cresta, silencios, correlación estéreo, offset DC y posibles muestras saturadas. Estas mediciones son observaciones; las decisiones musicales se toman en una etapa posterior y siempre se verifican contra el estado de REAPER.

Ingreso recomendado desde Suno

Cuando sea posible, cada canción debe llegar con la mezcla completa original de Suno, todos sus stems sin renormalizar y el BPM confirmado. PampaPilot conserva los niveles relativos de esa mezcla: no normaliza stems individualmente ni los trata como grabaciones crudas. Primero reconstruye y compara la suma; después busca artefactos de separación, duplicados, incompatibilidad mono o problemas audibles concretos. EQ, compresión y rebalanceo sólo se aplican con una razón verificable o una intención estética indicada por el usuario.

Limpieza MIDI offline

El mismo motor admite cualquier par formado por un MIDI de interpretación y el WAV del instrumento correspondiente. En modo generic no fija BPM, rango ni instrumento. Los perfiles son optativos y todos los supuestos se pueden reemplazar mediante configuración:

.\.venv-pampapilot\Scripts\python.exe .\scripts\clean_midi.py `
  "C:\RUTA\instrumento.mid" "C:\RUTA\instrumento.wav" "C:\RUTA\salida"

El original se preserva y se generan una variante segura, otra reconstruida y un reporte JSON auditable. La cuantización y la incorporación automática de notas faltantes están desactivadas por defecto.

El servidor MCP expone además discover_song_media, analyze_midi, preview_midi_cleanup y clean_midi_files. Las tres primeras operaciones son de sólo lectura; la última conserva los originales y restringe sus salidas a sessions/. De esta manera el agente puede descubrir, explicar y previsualizar antes de generar archivos, sin que REAPER esté abierto.

propose_track_processing analiza un stem y consulta reglas YAML versionadas para devolver cadenas tentativas de ReaEQ/ReaComp. Nunca aplica el plan: separa observaciones, conocimiento, parámetros y verificaciones pendientes, y exige aprobación del usuario. En stems de Suno advierte expresamente que el audio puede venir procesado y que no debe comprimirse ni ecualizarse por rutina. apply_processing_proposal exige el ID exacto aprobado, vincula cada procesador a un GUID existente o a una creación explícita y aplica toda la cadena como una sola transacción reversible.

Preparación de canción

preview_song_preparation y prepare_song convierten una entrega de stems en un manifiesto validado. Detectan formatos, duración, duplicados, roles, nombres de pista y correspondencias MIDI/WAV; opcionalmente calculan métricas completas de señal. El resultado incluye un plan de importación deliberadamente marcado con execute: false:

.\.venv-pampapilot\Scripts\python.exe .\scripts\prepare_song.py `
  "Mi Pequeño Sol" 85 --analysis-level signal

El manifiesto queda en sessions/<canción>/song-manifest.json. Para fuentes de Suno conserva niveles relativos y nunca normaliza stems individualmente.

MIDI dentro de REAPER

import_midi e import_midi_batch crean ítems sin abrir el diálogo de importación, no modifican el tempo y vuelven a leer cada nota desde REAPER. La primera versión conserva notas y cambios de programa, y rechaza archivos con otros eventos para no perder expresión silenciosamente. Las pistas quedan muteadas por defecto y cada lote es una única transacción reversible.

La instalación local de desarrollo usa un cargador pequeño para ejecutar siempre el Lua versionado del repositorio:

.\scripts\install-reaper-bridge.ps1

Para comparar un modelo local cargado en LM Studio sin modificar el proyecto:

.\scripts\test-local-codex-model.ps1 -Model "autor/modelo" -Mode smoke

Para iniciar o continuar el desarrollo cotidiano con un modelo local:

.\scripts\local-development.ps1

Enter abre el espacio persistente local-llm/daily; no hace falta crear una tarea ni un entorno nuevo para cada pedido cotidiano. Use N sólo para un cambio aislado o experimental.

Available Tools

22 tools
add_stock_fxAgregar efecto nativo permitidoB

Agrega ReaComp o ReaEQ y verifica identidad, GUID y estado.

Inputs: fx_type (required), track_guid (required), project_ref (required). Returns: object

analyze_midiAnalizar estructura MIDIA
Read-only

Lee notas, tempo y defectos estructurales; no escribe archivos.

Inputs: midi_path (required). Returns: object

apply_track_mix_batchAplicar mezcla estática en loteB
Idempotent

Aplica volumen, paneo y mute como una sola transacción verificable.

Inputs: items (required), project_ref (required). Returns: object

clean_midi_filesGenerar variantes MIDI limpiasB
Idempotent

Conserva originales y escribe variantes auditables solamente en sessions/.

Inputs: midi_path (required), audio_path (required), output_directory (required), options. Returns: object

configure_reacompConfigurar compresor ReaCompB
Idempotent

Configura un ReaComp identificado por GUID y verifica los valores mostrados.

Inputs: ratio (required), fx_guid (required), knee_db (required), attack_ms (required), +7 more. Returns: object

configure_reaeq_bandConfigurar una banda de ReaEQA
Idempotent

Configura una banda existente por tipo e índice y devuelve su estado.

Inputs: fx_guid (required), band_type (required), band_index (required), track_guid (required), +5 more. Returns: object

create_trackCrear pista en REAPERA

Crea una pista, verifica el nombre y devuelve GUID y transacción reversible.

Inputs: name (required), project_ref (required), index. Returns: object

discover_song_mediaDescubrir medios de una canciónA
Read-only

Encuentra stems, MIDI, referencia y pares sugeridos sin abrir REAPER.

Inputs: song_name (required). Returns: object

get_project_stateLeer proyecto de REAPERA
Read-only

Lee pistas y estado básico del proyecto activo, sin modificarlo.

Inputs: no named parameters. Returns: object

get_track_stateLeer pista por GUIDA
Read-only

Lee una pista por GUID y exige que el proyecto activo no haya cambiado.

Inputs: track_guid (required), project_ref (required). Returns: object

health_checkComprobar conexión con REAPERA
Read-only

Comprueba el puente y devuelve REAPER, proyecto activo y versiones.

Inputs: no named parameters. Returns: object

import_audioImportar audio en una pista nuevaB

Importa un WAV permitido, verifica pista/ítem/toma y devuelve sus GUID.

Inputs: file_path (required), track_name (required), project_ref (required), position_seconds. Returns: object

import_audio_batchImportar lote de audioA

Importa un lote de WAV como una sola transacción con verificación.

Inputs: items (required), project_ref (required). Returns: object

prepare_songPreparar manifiesto de canciónA
Idempotent

Escribe song-manifest.json bajo sessions/; no ejecuta el plan de REAPER.

Inputs: bpm (required), song_name (required), numerator, denominator, +2 more. Returns: object

preview_midi_cleanupPrevisualizar limpieza MIDIA
Read-only

Compara MIDI/WAV y devuelve el plan completo sin crear ni cambiar archivos.

Inputs: midi_path (required), audio_path (required), options. Returns: object

preview_song_preparationPrevisualizar preparación de canciónA
Read-only

Valida medios y devuelve un plan de sesión sin escribir ni abrir REAPER.

Inputs: bpm (required), song_name (required), numerator, denominator, +2 more. Returns: object

save_project_asGuardar proyecto con nombre nuevoB
Idempotent

Guarda como RPP nuevo dentro de las raíces de sesiones permitidas.

Inputs: project_ref (required), project_path (required). Returns: object

set_project_tempoAjustar tempo del proyectoA
Idempotent

Ajusta BPM y verifica que posiciones, duraciones y playrate no cambien.

Inputs: bpm (required), project_ref (required). Returns: object

set_track_muteSilenciar o activar pistaB
Idempotent

Cambia el mute de una pista y verifica la lectura posterior.

Inputs: muted (required), track_guid (required), project_ref (required). Returns: object

set_track_panAjustar paneo de pistaA
Idempotent

Ajusta paneo -1..1 y lo verifica; no sobrescribe automatización activa.

Inputs: pan (required), track_guid (required), project_ref (required). Returns: object

set_track_volumeAjustar volumen de pistaA
Idempotent

Ajusta volumen -60..+12 dB y verifica la lectura posterior.

Inputs: volume_db (required), track_guid (required), project_ref (required). Returns: object

undo_transactionDeshacer transacción propiaA
Destructive

Deshace sólo la última transacción propia si el historial sigue intacto.

Inputs: project_ref (required), transaction_request_id (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 22 tools

    Disambiguation4/5

    Most tools are clearly distinct, targeting specific properties, effects, or workflow stages. The batch mix tool overlaps slightly with individual set_track_* tools, and the multiple preview tools require attention, but descriptions and names adequately separate them.

    Naming Consistency4/5

    The majority of tool names follow a clear verb_noun pattern in snake_case (set_track_pan, create_track, import_audio). The only minor deviation is health_check, which is a common idiom, but the overall pattern remains predictable.

    Tool Count4/5

    With 22 tools, the server is on the heavier side but appropriate for the broad scope of REAPER integration, covering mixing, effects, MIDI processing, project state, and preparation workflows without being excessive or redundant.

    Completeness4/5

    The tool set provides good coverage of the domain: track operations, effects, MIDI analysis/cleanup, audio import, project state/tempo/save, and undo. Some potentially expected operations like track deletion are missing, but the core workflow is well-supported.

    Related MCP Connectors

    Related MCP Servers