Files
ableton-mcp-ai/docs/REPORTE_TECNICO_MCP_ISSUES.md
OpenCode Agent 5ce8187c65 feat: Implement senior audio injection with 5 fallback methods
- Add _cmd_create_arrangement_audio_pattern with 5-method fallback chain
- Method 1: track.insert_arrangement_clip() [Live 12+]
- Method 2: track.create_audio_clip() [Live 11+]
- Method 3: arrangement_clips.add_new_clip() [Live 12+]
- Method 4: Session->duplicate_clip_to_arrangement [Legacy]
- Method 5: Session->Recording [Universal]

- Add _cmd_duplicate_clip_to_arrangement for session-to-arrangement workflow
- Update skills documentation
- Verified: 3 clips created at positions [0, 4, 8] in Arrangement View

Closes: Audio injection in Arrangement View
2026-04-12 14:02:32 -03:00

12 KiB

REPORTE TÉCNICO - MCP Ableton Live 12 Integration Issues

Fecha: 2026-04-11
Reportado por: Kimi K2 (Testing)
Para: Qwen (Review/Fix)
Estado: CRÍTICO - Comandos retornan éxito pero no materializan operaciones


RESUMEN EJECUTIVO

Problema Principal: Los handlers del Remote Script (AbletonMCP_AI/__init__.py) están retornando respuestas JSON con "status": "success", pero las operaciones NO se visualizan en Ableton Live 12.

Impacto: El sistema MCP está funcional a nivel de comunicación, pero no puede crear contenido musical real en Ableton. Todos los tracks aparecen vacíos en Arrangement View.


DIAGNÓSTICO DE CONEXIÓN

Conectividad MCP (FUNCIONA)

// /ping
{
  "status": "ok",
  "message": "pong",
  "tools": 118
}
  • TCP: Puerto 9877 responde correctamente
  • MCP Server: Inicializado con 118 tools
  • Comunicación: JSON bidireccional funcional

Conectividad Ableton (FUNCIONA)

// /get_session_info
{
  "status": "success",
  "result": {
    "tempo": 95.0,
    "num_tracks": 26,
    "num_scenes": 8,
    "is_playing": false,
    "current_song_time": 0.0,
    "metronome": false,
    "master_volume": 0.8500000238418579
  }
}
  • Live API: Responde a comandos básicos
  • Tracks: 26 tracks creados (visibles en UI)
  • Proyecto: Configurado a 95 BPM, 8 escenas

PRUEBAS DETALLADAS

Test 1: Información de Sesión

Comando: get_session_info
Estado: FUNCIONA

{
  "status": "success",
  "result": {
    "tempo": 95.0,
    "num_tracks": 26,
    "num_scenes": 8,
    "is_playing": false,
    "current_song_time": 0.0,
    "metronome": false,
    "master_volume": 0.8500000238418579
  }
}

Verificación Visual: Consistente con UI de Ableton (ver captura)


Test 2: Insertar Device (Browser)

Comando: insert_device(track_index=0, device_name="EQ Eight")
Estado: ⚠️ RESPUESTA ÉXITO / SIN EFECTO VISUAL

{
  "status": "success",
  "result": {
    "track_index": 0,
    "device": "EQ Eight",
    "device_index": null
  }
}

Problema:

  • Retorna "success"
  • device_index: null (indica no se insertó realmente)
  • No se ve EQ Eight en el track Kick Drum

Diagnóstico: El handler busca el device pero no lo inserta correctamente en la cadena del track.


Test 3: Cargar Sample en Track MIDI (DEBE FALLAR)

Comando: load_sample_to_clip(track_index=0, clip_index=0, sample_path="...kick gata only.wav")
Estado: FALLA CORRECTAMENTE

{
  "status": "error",
  "message": "Failed to load sample: Audio clips can only be created on audio tracks"
}

Comportamiento: Correcto - validación de tipo de track funciona.


Test 4: Cargar Sample en Track Audio (DEBE FUNCIONAR)

Comando: load_sample_to_clip(track_index=2, clip_index=0, sample_path="...kick gata only.wav")
Estado: ⚠️ RESPUESTA ÉXITO / SIN EFECTO VISUAL

{
  "status": "success",
  "result": {
    "status": "success",
    "result": {
      "loaded": true,
      "clip_name": "kick gata only.wav",
      "duration": 0.475
    }
  }
}

Problema Crítico:

  • Retorna "loaded": true
  • Reporta duración: 0.475 segundos
  • NO SE VE EL CLIP EN TRACK 2 (Bass)
  • NO SE CARGA EL SAMPLE

Captura Visual: Track Bass aparece vacío en Arrangement View (ver imagen adjunta)


Test 5: Crear Clip MIDI en Arrangement

Comando: create_arrangement_midi_clip(track_index=0, start_time=0, length=4, notes=[...])
Estado: ⚠️ RESPUESTA ÉXITO / SIN EFECTO VISUAL

{
  "status": "success",
  "result": {
    "track_index": 0,
    "start_time": 0.0,
    "length": 4.0,
    "notes_added": 4,
    "view": "Arrangement"
  }
}

Problema Crítico:

  • Retorna "notes_added": 4
  • Especifica view: "Arrangement"
  • NO SE VE NINGÚN CLIP EN ARRANGEMENT VIEW
  • Track Kick Drum aparece vacío

Captura Visual: Arrangement View totalmente vacío, solo tracks sin clips (ver imagen adjunta)


PATTERN IDENTIFICADO

Comportamiento Consistente

Handler Retorno MCP Efecto en Ableton Estado
get_session_info Success Datos correctos Funciona
insert_device Success No inserta Falla silenciosa
load_sample_to_clip (MIDI) Error N/A Valida correctamente
load_sample_to_clip (Audio) Success No carga sample Falla silenciosa
create_arrangement_midi_clip Success No crea clip Falla silenciosa
create_arrangement_audio_clip Success No crea clip Falla silenciosa
create_arrangement_audio_pattern Success No crea clips Falla silenciosa

Síntoma Principal

Los handlers ejecutan código Python pero NO modifican el estado de Ableton Live.

Posibles causas:

  1. Contexto Incorrecto: Los handlers usan self._song pero no actualizan la vista correcta
  2. Operaciones en Session View: Los clips se crean en Session View pero NO se duplican a Arrangement
  3. Falta de Refresh: Ableton no redibuja la UI después de las operaciones
  4. Error Silencioso: La Live API lanza excepción capturada pero el handler retorna success igualmente
  5. Handlers Async: Las operaciones se encolan en _pending_tasks pero nunca se ejecutan

ANÁLISIS DE CÓDIGO (Diagnóstico Remoto)

Patrón Observado en Handlers

Basado en las respuestas, los handlers parecen seguir este patrón:

def _cmd_create_arrangement_midi_clip(self, params):
    try:
        track_index = params["track_index"]
        notes = params["notes"]
        
        # Obtiene track
        track = self._song.tracks[track_index]
        
        # Intenta crear clip
        clip = track.create_midi_clip()  # <-- PROBLEMA: Crea en Session View?
        
        # Agrega notas
        clip.set_notes(notes)  # <-- PROBLEMA: Clip no tiene método set_notes?
        
        return {"status": "success", "notes_added": len(notes)}  # <-- Siempre retorna éxito
    except Exception as e:
        return {"status": "success", "error": str(e)}  # <-- Captura errores pero retorna success

Problemas Identificados

  1. Retorno de Éxito Incondicional: Los handlers retornan status: "success" incluso cuando fallan internamente
  2. No Validación Post-Operación: No verifican que el clip realmente se creó antes de retornar
  3. Session vs Arrangement: Posible confusión entre track.create_clip() (Session) y operaciones en Arrangement
  4. Live API Limitaciones: Algunas operaciones pueden requerir self._song.view o contexto específico de arrangement

EVIDENCIA VISUAL

Captura de Pantalla - Arrangement View

Estado Actual:

  • 7 tracks visibles (Kick Drum, Snare, Bass, Chords, Hi-Hats, Melody Lead, FX & Perc)
  • Todos los tracks aparecen VACÍOS
  • Sin clips de audio ni MIDI visibles
  • Sin contenido en la grilla de Arrangement

Tracks Creados pero Vacíos:

  • Track 0: Kick Drum (MIDI) - Sin clips
  • Track 1: Snare (MIDI) - Sin clips
  • Track 2: Bass (Audio) - Sin clips (a pesar de que load_sample_to_clip reportó éxito)
  • Track 3: Chords (Audio) - Sin clips
  • Track 4: Hi-Hats (MIDI) - Sin clips
  • Track 5: Melody Lead (MIDI) - Sin clips
  • Track 6: FX & Perc (MIDI) - Sin clips

REPRODUCCIÓN DEL PROBLEMA

Pasos Exactos

  1. Iniciar Ableton Live 12 Suite

  2. Cargar Remote Script AbletonMCP_AI

  3. Conectar MCP: ping responde con 118 tools

  4. Ejecutar comandos:

    /create_midi_track {"index": -1}  → Track creado visiblemente
    /set_track_name {"track_index": 0, "name": "Kick"}  → Nombre cambia visiblemente
    /create_arrangement_midi_clip {"track_index": 0, "start_time": 0, "length": 4, "notes": [...]}  → Retorna success, NO SE VE CLIP
    /load_sample_to_clip {"track_index": 2, "clip_index": 0, "sample_path": "...wav"}  → Retorna success, NO SE VE SAMPLE
    
  5. Verificar UI: Arrangement View permanece vacío


POSIBLES SOLUCIONES

Opción 1: Validación de Estado Post-Operación

Modificar handlers para verificar que la operación realmente ocurrió:

def _cmd_create_arrangement_midi_clip(self, params):
    try:
        # ... código de creación ...
        
        # Validación post-operación
        if clip and clip.length > 0:
            return {"status": "success", "created": True}
        else:
            return {"status": "error", "message": "Clip created but not visible"}
    except Exception as e:
        return {"status": "error", "message": str(e)}  # NO retornar success si hay error

Opción 2: Usar View Correcto

Asegurar que las operaciones ocurran en el contexto de Arrangement:

def _cmd_create_arrangement_midi_clip(self, params):
    try:
        # Obtener arrangement view
        view = self._song.view
        
        # Crear clip en arrangement específicamente
        track = self._song.tracks[params["track_index"]]
        
        # Usar método específico de arrangement si existe
        # o crear en Session y duplicar a Arrangement
        
        return {"status": "success"}
    except Exception as e:
        return {"status": "error", "message": str(e)}

Opción 3: Forzar Refresh/Redraw

Llamar a métodos de refresh después de operaciones:

def _cmd_create_arrangement_midi_clip(self, params):
    try:
        # ... crear clip ...
        
        # Forzar refresh
        self._song.view.detail_clip = clip
        # o self._song.update_display() si está disponible
        
        return {"status": "success"}
    except Exception as e:
        return {"status": "error", "message": str(e)}

Opción 4: Debug Logging

Agregar logging detallado para ver qué está pasando:

import logging
logger = logging.getLogger("AbletonMCP")

def _cmd_create_arrangement_midi_clip(self, params):
    try:
        logger.info(f"Creating clip on track {params['track_index']}")
        
        track = self._song.tracks[params["track_index"]]
        logger.info(f"Got track: {track.name}")
        
        clip = track.create_midi_clip()
        logger.info(f"Created clip: {clip}")
        
        # ... más código ...
        
    except Exception as e:
        logger.error(f"Error creating clip: {e}", exc_info=True)
        return {"status": "error", "message": str(e)}

PRIORIDAD DE FIXES

CRÍTICA (Impedimento Total)

  1. create_arrangement_midi_clip - Sin esto no hay notas MIDI
  2. create_arrangement_audio_clip - Sin esto no hay samples
  3. load_sample_to_clip - Sin esto no se pueden usar samples de librería

ALTA (Funcionalidad Reducida)

  1. insert_device - Mezcla profesional requiere devices
  2. configure_eq - EQ necesario para mezcla
  3. setup_sidechain - Sidechain esencial para reggaeton

MEDIA (Mejoras)

  1. Human Feel - Requiere numpy (no crítico)
  2. Automation - FX avanzados (no crítico)

RECOMENDACIÓN INMEDIATA

NO ejecutar más comandos de producción hasta que los handlers de Arrangement View estén arreglados.

Los comandos básicos funcionan:

  • create_midi_track / create_audio_track
  • set_track_name
  • set_tempo
  • set_track_volume

Pero cualquier operación que deba crear contenido en Arrangement View falla silenciosamente.


PRÓXIMAS ACCIONES SUGERIDAS

  1. Revisar __init__.py - Verificar handlers de Arrangement
  2. Agregar Logging - Ver qué excepciones ocurren
  3. Test Unitario Manual - Ejecutar handler directamente en consola Python de Ableton
  4. Verificar Live API - Consultar documentación de Ableton Live API para create_clip en Arrangement
  5. Implementar Validación - Verificar estado post-operación antes de retornar success

Reportado por: Kimi K2
Fecha: 2026-04-11
Estado: CRÍTICO - Sistema no puede crear contenido musical
Próximo Paso: Revisión de Qwen de handlers de Arrangement