Host Lifecycle

Save the set, gracefully quit/relaunch Ableton Live for an automated bounce after a Remote Script change, and answer the prompts Live opens (including crash recovery).

Tools on this page
  1. restart_live
  2. answer_live_prompt
  3. save_set
  4. save_set_as
  5. set_auto_warp_long_samples

restart_live

restart_live(save: str = 'discard', relaunch: bool = True, wait_timeout: float = 90.0)

Gracefully quit and relaunch Live (answers a crash-recovery prompt).

A clean quit leaves no crash-recovery prompt; if one shows anyway (Live crashed earlier), the relaunch wait answers it with No (load the set as saved) and reports it under data.startup_prompt. Use this for an automated Live bounce after a Remote Script change.

save: how to handle UNSAVED changes if Live prompts on quit — ‘discard’ (default; lose unsaved edits) or ‘save’ (overwrite; only works for a set that already has a file — an Untitled set has no name and the quit is reported as failed, so save it first via save_set_as). relaunch: reopen Live after it quits (default True), then wait up to wait_timeout seconds for the control surface to rebind port 9877.

Returns JSON {ok, data:{app, was_dirty, quit, relaunched, surface_up, …}}. NOTE: this only restarts ABLETON. A server.py change still needs a Claude Code restart (the MCP server can’t restart its own process); a Remote-Script change is fully covered by reinstalling the script + this bounce. Discarding unsaved work is irreversible — prefer the /ableton:restart command, which asks before discarding.

answer_live_prompt

answer_live_prompt(answer: str = '', wait: float = 0.0)

Read, and optionally answer, a prompt Live has open (Windows only).

Covers Live-drawn prompts with Yes / No / OK / Cancel buttons on ANY Live process, including one that is still starting and has not bound port 9877 yet - above all the ‘Live unexpectedly quit while you were working on the Live Set … Would you like to recover your work?’ prompt after a crash (No = load the set as last saved; Yes = restore Live’s crash state).

answer: button to press (‘’ = just report what is showing). The press is a UIA Invoke, then a real pointer click on the button if the prompt is still up; if it survives both, data.dismissed is false with the reason. wait: seconds to wait for a prompt to appear before giving up (default 0).

Returns JSON {ok, data:{found, pid?, buttons, answered?, method?, dismissed?, error?}}. found:false means no prompt is open.

save_set

save_set(name: str = '')

Save the current Live set to disk (there is no LOM save API — this drives Live’s save UI: via System Events on macOS, so Live must have Accessibility permission; via Live’s menu and the Windows Save dialog on Windows. A Save-As briefly brings Live to the front).

name: leave empty to save a TITLED set in place (File > Save Live Set; a no-op if clean). For an UNTITLED set you MUST pass a name (an empty call returns an error). A non-empty name always Saves-As under that name. The set is saved to Live’s last-used save location (Ableton wraps it in a ‘ Project' folder unless that location is already inside a project); the tool controls the NAME, not the directory. A name may not contain '/' or ':' (on Windows, none of \ / : * ? " < > | either).

Returns JSON {ok, data:{saved, title|name, path?, untitled?, error?}}. ‘path’ is the saved file: exact on Windows (read off the Save dialog), best-effort on macOS (it searches common save folders). Confirmation is by the window title; verify on disk if it matters.

save_set_as

save_set_as(name: str)

Save the current Live set under a new NAME (File > Save Live Set As). Use for an Untitled set, or to save a copy under a new name. Drives Live’s save UI (System Events on macOS - needs Accessibility permission; the Windows Save dialog on Windows) and briefly focuses Live. An existing file of the same name is replaced.

name: the set name (not a path). Saved to Live’s last-used save location, wrapped in a ‘ Project' folder unless that location is already inside a project - the tool controls the name, not the directory. A name may not contain '/' or ':' (on Windows, none of \ / : * ? " < > |).

Returns JSON {ok, data:{saved, name, path?, error?}}. ‘path’ is exact on Windows, best-effort on macOS; confirmation is by the window title.

set_auto_warp_long_samples

set_auto_warp_long_samples(enabled: bool = False, save: str = 'save')

Turn Live’s “Auto-Warp Long Samples” preference (Preferences > Record/Warp/Launch) on or off. Off keeps long samples - full-song stems - from loading with dozens of guessed warp markers and a start marker moved to the first transient, which knocks stems out of sync.

Live has no API for its preferences, so this writes Preferences.cfg while Live is closed: it quits Live (save: ‘save’ (default) keeps unsaved edits, ‘discard’ drops them), backs the file up next to itself (Preferences.cfg.bak-

Returns JSON {ok, data:{path, key, was, now, changed, backup?, restart?, reopened?, note?, error?}}.


ableton-mcp-max - free for noncommercial use; commercial licensing available. Built by Ryan Robson / Robworks Software LLC. Not affiliated with or endorsed by Ableton AG.

This site uses Just the Docs, a documentation theme for Jekyll.