get_session_info
Retrieve current Ableton Live session details including tracks, instruments, and arrangement data for music production workflow management.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- MCP_Server/server.py:253-262 (handler)The handler function for the 'get_session_info' MCP tool. It is registered via the @mcp.tool() decorator and proxies the command to the Ableton Remote Script via socket connection, returning the session information as formatted JSON.@mcp.tool() def get_session_info(ctx: Context) -> str: 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: {str(e)}") return f"Error getting session info: {str(e)}"
- MCP_Server/server.py:253-262 (registration)The @mcp.tool() decorator registers this function as the MCP tool named 'get_session_info'.@mcp.tool() def get_session_info(ctx: Context) -> str: 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: {str(e)}") return f"Error getting session info: {str(e)}"
- MCP_Server/server.py:93-93 (helper)The send_command method of AbletonConnection class, used by the tool to send the 'get_session_info' command to the Ableton Remote Script.def send_command(self, command_type: str, params: Dict[str, Any] = None) -> Dict[str, Any]:
- MCP_Server/server.py:196-249 (helper)Helper function to get or establish a connection to Ableton, which uses 'get_session_info' for validation and is called by the tool handler.def get_ableton_connection(): """Get or create a persistent Ableton connection""" global _ableton_connection if _ableton_connection is not None: try: # quick liveness test (non-intrusive) _ableton_connection.sock.settimeout(0.5) _ableton_connection.sock.send(b'') # may raise if broken _ableton_connection.sock.settimeout(None) return _ableton_connection except Exception as e: logger.warning(f"Existing connection is no longer valid: {str(e)}") try: _ableton_connection.disconnect() except Exception: pass _ableton_connection = None # Try to establish a new persistent connection (retries) max_attempts = 3 for attempt in range(1, max_attempts + 1): try: logger.info(f"Connecting to Ableton (attempt {attempt}/{max_attempts})...") candidate = AbletonConnection(host="localhost", port=9877) if candidate.connect(): _ableton_connection = candidate # basic validation try: _ableton_connection.send_command("get_session_info") logger.info("Connection validated successfully") return _ableton_connection except Exception as e: logger.error(f"Connection validation failed: {str(e)}") _ableton_connection.disconnect() _ableton_connection = None else: _ableton_connection = None except Exception as e: logger.error(f"Connection attempt {attempt} failed: {str(e)}") if _ableton_connection: try: _ableton_connection.disconnect() except Exception: pass _ableton_connection = None if attempt < max_attempts: import time time.sleep(1.0) logger.error("Failed to connect to Ableton after multiple attempts") raise Exception("Could not connect to Ableton. Make sure the Remote Script is running and Ableton is open.")