m4l MCP server
Provides tools for inspecting, editing, validating, and saving Max for Live devices (.amxd) and Max patchers (.maxpat), including patch trees, boxes, connections, parameters, embedded files, and checks against the running Live set via the ableton bridge.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
m4l MCP server
Edit and debug Max for Live devices (.amxd, plain or frozen) and .maxpat files on disk, and check them
against the running Live set through the ableton MCP's bridge. Python, stdio; register it in your
project's .mcp.json next to the ableton server.
Workflow
device_infoopens a device by path or by name (searched in the User Library).Understand it:
patch_tree,patch_find,patch_box,patch_connections,patch_trace,patch_presentation(render=truereturns a PNG),patch_parameters.Edit in memory:
patch_add_box,patch_set_attrs,patch_remove_box,patch_connect,patch_disconnect,patch_edit_batch(atomic, with$aliasreferences),device_put_file,device_remove_file.patch_validate, thendevice_diff.device_save. It refuses while a Max editor window for that device is open. Ask the user to close the window without saving, then save again.live_check_reloadchecks whether the Live instance runs the new version. With no editor open, Live hot-reloads the device and keeps its state, so nobody needs to reopen the set.
Nothing touches disk until device_save. device_revert discards edits.
Related MCP server: ableton-live-mcp
Addressing
file: an embedded file of a frozen device. Defaults to the top-level patcher. A unique substring is enough, e.g.file="SINGLE".Box paths:
obj-12, orobj-1137::obj-12to reach into embedded subpatchers (p,patcher, embedded bpatchers). Paths stay inside one file. A bpatcher or abstraction that loads another file is a reference: address that file directly.patch_treeshows where each file is used.Instance paths are the keys of Live's parameter registry, e.g.
obj-1137::obj-50::obj-107::obj-107. They chain box ids through references too.
Safety on save
Refuses while a Max-owned window whose title contains the device name is open (winutil.py). On 2026-11-11, writing the FCB device with its editor open made Max's reload fail, and closing the window then crashed Live.
ignore_open_editor=trueis only for a false match.Refuses if the file changed on disk since it was read (sha256).
force=trueoverrides, after a backup.Refuses if the container did not rebuild byte-identically when opened, or if validation finds errors.
Backs up the old file to
M4L_MCP_BACKUP_DIR(dev\m4l-backups\<name>.<timestamp>.bak). Backups live outside the User Library, so Live's browser never lists them.Rebuilds, re-parses and compares every entry, then writes a temp file and
os.replaces it, retrying while Windows holds the file.Only the embedded files you changed are re-serialised (tab-indented JSON, original newline style and trailing
\r\n\0). Every other entry stays byte-identical.
What it knows
Formats (container.py): the
ampf/meta/ptchchunk header, with little-endian lengths. Theptchchunk holds either JSON or anmx@ccollective: big-endian header, file bodies, then adlstdirectory ofdirerecords (type fnam sz32 of32 vers flag mdat, names NUL-padded to 4 bytes). The parser checks that rebuilding reproduces the original file before anything is saved.Inlet/outlet counts (objdb.py): learned from about 6,400 patches that Max saved, from Max 9 and Live 12 resources, and cached in
~/.m4l-mcp/objdb.json. Rebuild withpython -m m4l_mcp.objdb --build. Abstractions and subpatchers are counted from their own inlet/outlet objects.Parameters: UI
live.*objects useparameter_enable. Non-UI objects (dict,coll,pattr) usesaved_object_attributes.parameter_enable/@parameter_enable 1. Adding a parameter writessaved_attribute_attributes.valueof, using a template from the corpus for that class. It also registers the parameter in the top-levelparametersdict once per instance. In an abstraction used several times, each instance gets a unique[n]long name plus aparameter_overridesentry.Live (live.py): JSON-RPC to the Remote Script bridge on 127.0.0.1:8765. Device search walks tracks, returns, master and every rack chain. Requests pass
max_items=-1because the bridge truncates results at 200 items. Live lists only automatable parameters (parameter_invisible0, not blobs). It shows their short names, ordered byparameter_orderand then by long name (case-sensitive).live_check_reloadcompares that list with the file.
Gotchas
Live hot-reloads a device when its file changes and keeps its state, but only while no Max editor window for it is open. Never write the file while one is open, and never ask the user to save from a window that showed reload errors. Dragging the device in again resets values stored in the set.
Mappings stored in
@parameter_enabledicts live in the Live set. The.amxdholds only defaults.Max resolves absolute picture paths from another machine by bare file name against the embedded files. The validator does the same.
mcp2.x renamed FastMCP toMCPServer. The server imports either.ableton-live-mcp window capture on Windows 10 19045: use
draw_border=None, notFalse.This machine intercepts TLS: use
uv … --native-tlsandgit -c http.sslBackend=schannel.
Dev
cd dev\m4l-mcp
uv venv --native-tls -p 3.13 .venv
uv pip install --native-tls -p .venv\Scripts\python.exe -e ".[test]"
.venv\Scripts\python.exe -m pytest -q testsThe tests run on temp copies of the FCB (frozen), More Simpler (plain) and M4L.SimplerPolyVoiceRev~.maxpat
files. They never write to the originals.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
Remote MCP server for audio stem separation, denoise, reverb, and MIDI export.
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
Ovanek MCP: Model Context Protocol server for Ovanek platform tools; writes are dry-run by default.
Related MCP Servers
- AlicenseBqualityCmaintenanceTurns Ableton Live into an MCP-accessible control surface, providing tools for controlling transport, tracks, clips, and devices, as well as resources for reading live state.510035 PyPI3MIT
- AlicenseBqualityCmaintenanceLocal MCP server for inspecting and controlling Ableton Live through a local HTTP bridge. Enables LLMs to perform production workflows like MIDI import, track editing, mixing, mastering, and export.5921 npmMIT
- AlicenseBqualityCmaintenanceEnables AI assistants to control Ableton Live through MCP, allowing MIDI writing, audio import, device parameter adjustment, clip arrangement, and playback control over a localhost-only connection.37MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to control Ableton Live through a Max for Live device and optional Remote Script, covering tracks, clips, MIDI notes, mixer settings, transport, and plugin search and insertion.1MIT