session_tools.py•2.87 kB
"""Session and track management tools for Ableton MCP."""
import json
from typing import Dict, List, Union
from mcp.server.fastmcp import Context
from ..core import get_ableton_connection
from ..utils.logging import get_logger
logger = get_logger("AbletonMCPServer")
def get_session_info(ctx: Context) -> str:
"""Get detailed information about the current Ableton session"""
try:
ableton = get_ableton_connection()
result = ableton.send_command("get_session_info")
return json.dumps(result, indent=2)
except Exception as e:
logger.error(f"Error getting session info from Ableton: {str(e)}")
return f"Error getting session info: {str(e)}"
def get_track_info(ctx: Context, track_index: int) -> str:
"""
Get detailed information about a specific track in Ableton.
Parameters:
- track_index: The index of the track to get information about
"""
try:
ableton = get_ableton_connection()
result = ableton.send_command("get_track_info", {"track_index": track_index})
return json.dumps(result, indent=2)
except Exception as e:
logger.error(f"Error getting track info from Ableton: {str(e)}")
return f"Error getting track info: {str(e)}"
def create_midi_track(ctx: Context, index: int = -1) -> str:
"""
Create a new MIDI track in the Ableton session.
Parameters:
- index: The index to insert the track at (-1 = end of list)
"""
try:
ableton = get_ableton_connection()
result = ableton.send_command("create_midi_track", {"index": index})
return f"Created new MIDI track: {result.get('name', 'unknown')}"
except Exception as e:
logger.error(f"Error creating MIDI track: {str(e)}")
return f"Error creating MIDI track: {str(e)}"
def set_track_name(ctx: Context, track_index: int, name: str) -> str:
"""
Set the name of a track.
Parameters:
- track_index: The index of the track to rename
- name: The new name for the track
"""
try:
ableton = get_ableton_connection()
result = ableton.send_command(
"set_track_name", {"track_index": track_index, "name": name}
)
return f"Renamed track to: {result.get('name', name)}"
except Exception as e:
logger.error(f"Error setting track name: {str(e)}")
return f"Error setting track name: {str(e)}"
def set_tempo(ctx: Context, tempo: float) -> str:
"""
Set the tempo of the Ableton session.
Parameters:
- tempo: The new tempo in BPM
"""
try:
ableton = get_ableton_connection()
result = ableton.send_command("set_tempo", {"tempo": tempo})
return f"Set tempo to {tempo} BPM"
except Exception as e:
logger.error(f"Error setting tempo: {str(e)}")
return f"Error setting tempo: {str(e)}"