Mike Slinn

Controlling Ableton Live with ahujasid/ableton-mcp

Published 2025-10-25. Last modified 2025-10-27.
Time to read: 6 minutes.

This page is part of the av_studio collection.

After writing Options for Controlling Ableton Live with MCP, I wanted to have an LLM interpret my spoken instructions so it controls Ableton Live Studio 12 running on Windows 11. I emphatically do not want to use Docker, because it adds complexity and overhead without adding value. This video demonstrates something similar.

My main DAW is described here. It runs Windows 11, so this articles reflects that. Although I use WSL2 extensively, it is not required for this adventure.

About ahujasid/ableton-mcp

This MCP integration is currently the most popular choice for controlling Ableton Live from an LLM. The system consists of two main components:

  1. Ableton Remote Script (Ableton_Remote_Script/__init__.py): Creates a socket server to receive and execute commands from an LLM.
  2. MCP Server (server.py): An MCP server written in Python that connects to the Ableton Remote Script. This MCP server uses OSC over sockets, not MIDI, to converse with Ableton Live.

ahujasid/ableton-mcp on GitHub documentation has serious errors and I wonder how many people gave up trying to make it work.

Prerequisites

Before starting, ensure the following:

  • Ableton Live 12 or Ableton Live Studio 12 is installed on Windows 10 or 11.
  • Claude Desktop is installed. Any current MCP host would work for the MCP integration, so long as Claude is the LLM used, because ahujasid/ableton-mcp is designed specifically for Claude.
  • You have an active billing account with Anthropic.

Setup

nvm-windows

Because Node.js does not provide native Windows installers, I used nvm-windows to install to C:\nvm4w\nodejs instead of downloading from nodejs.org.

Node.js

I installed Node.js on native Windows like this:

PowerShell
PS C:\Users\mslinn> nvm install lts
Downloading node.js version 22.21.0 (64-bit)...
Extracting node and npm...
Complete
Installation complete.
If you want to use this version, type:
nvm use 22.21.0

$ nvm use 22.21.0 Now using node v22.21.0 (64-bit)
$ npm install -g npm@latest removed 27 packages, and changed 77 packages in 8s

Smithery Does Not Work

The ahujasid/ableton-mcp installation instructions say to use Smithery CLI for AI to install the ahujasid/ableton-mcp MCP server.

Unfortunately, ahujasid/ableton-mcp is not available on Smithery. The instructions in the remainder of this article describe an installation method that works with current software.

Python

Install Python on native Windows using the Python Installation Manager for Windows.

PowerShell
PS C:\Users\mslinn> py install default
Python install manager was successfully updated to 25.0.
Installing Python 3.14.0. Extracting: ...................................................................✅ Python 3.14.0 will be launched by python.exe and also python3[-64].exe, python3.14[-64].exe

PS C:\Users\mslinn> py Python 3.14.0 (tags/v3.14.0:ebf955d, Oct 7 2025, 10:15:03) [MSC v.1944 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

Install uv (Python Package Manager)

uv handles dependency resolution for the ahujasid/ableton-mcp MCP server without needing a full virtual environment.

Open PowerShell as Administrator by pressing and releasing the Windows key, then typing powershell, and right-clicking on Run as Administrator. Type the following:

PowerShell as Administrator
PS C:\Users\mslinn> irm https://astral.sh/uv/install.ps1 | iex
Downloading uv 0.9.5 (x86_64-pc-windows-msvc)
Installing to C:\Users\mslinn\.local\bin
  uv.exe
  uvx.exe
  uvw.exe
everything's installed!

To add C:\Users\mslinn\.local\bin to your PATH, either restart your shell or run:

set Path=C:\Users\mslinn\.local\bin;%Path%   (cmd)
$env:Path = "C:\Users\mslinn\.local\bin;$env:Path"   (powershell) 

Close and reopen a non-administrative PowerShell. Verify the installation by typing:

PowerShell
PS C:\Users\mslinn> uv --version
uv 0.9.5 (d5f39331a 2025-10-21) 

You should see output like uv 0.4.x (latest as of October 2025).

Install the Ableton Remote Script

This step creates an Ableton Remote Script, which acts as a bridge between Ableton Live and an external process. The Ableton Remote Script creates a TCP socket server in Ableton that listens for MCP commands.

The GitHub README.md for the ahujasid/ableton-mcp MCP server has a serious error. As of Live 10.1.13 (and carried forward to Live 12), third-party remote scripts must be placed in a User Library Remote Scripts folder (%USERPROFILE%\Documents\Ableton\User Library\Remote Scripts). Scripts here auto-persist across updates and are reliably scanned.

The Preferences path recommended by the README.md is only for basic UserConfiguration.txt tweaks, not full Python scripts like __init__.py.

The manual steps to create the Ableton Remote Script follow. A PowerShell script follows the manual process explanation that automates the process.

Manual Installation

  1. Third-party Remote Scripts must be placed in the User Library, not the Preferences folder. The Preferences path is deprecated and no longer scanned in Live 12+. The correct path on Windows is:

      %USERPROFILE%\Documents\Ableton\User Library\Remote Scripts

    This path is version-independent — it works across all Live 12.x releases and will persist through updates.
  2. Inside Remote Scripts, create a new folder named AbletonMCP. This name is case-sensitive, so enter it exactly as shown.
  3. You could download AbletonMCP_Remote_Script/__init__.py and save it as AbletonMCP/__init__.py. This would work, but if you make even a small typing error, the connection will not work. Also, you would have to manually update the file whenever the version in the Git repository updates.

    Alternatively, you could clone the Git repository and link __init__.py in the cloned repository to a new file with the required name (__init__.py). I recommend this approach instead; it works by creating a symbolic link in Windows to make the link.

    Do this in PowerShell:
    PowerShell
    PS C:\Users\mslin> cd $work\ableton # the directory to clone to
    PS D:\work\ableton> git clone https://github.com/ahujasid/ableton-mcp.git Cloning into 'ableton-mcp'... remote: Enumerating objects: 83, done. remote: Counting objects: 100% (45/45), done. remote: Compressing objects: 100% (13/13), done. remote: Total 83 (delta 38), reused 32 (delta 32), pack-reused 38 (from 1) Receiving objects: 100% (83/83), 51.42 KiB | 5.14 MiB/s, done. Resolving deltas: 100% (39/39), done.

    Windows symbolic links provide the ability to alias files across volumes. Once the Git repository is cloned and a file in the repository is linked to a new file in another directory, each time you run git pull on the local copy of the Git repository, the linked files will update as well. We will link __init__.py from the Git repository to %APPDATA%\Ableton\Live 12.2.6\Preferences\User Remote Scripts\AbletonMCP\__init__.py Here is how to make the Windows symlink manually:
    PowerShell
    $sourceFile = "D:\work\ableton\ableton-mcp\AbletonMCP_Remote_Script\__init__.py"
    $userLibrary = "$env:USERPROFILE\Documents\Ableton\User Library"
    $destDir = "$userLibrary\Remote Scripts\AbletonMCP"
    $destFile = "$destDir\__init__.py"
     # Create User Library if missing
    if (-not (Test-Path $userLibrary)) {
        New-Item -ItemType Directory -Path $userLibrary -Force | Out-Null
        Write-Host "[OK] Created User Library folder" -ForegroundColor Green
    }
     # Clean and create destination
    if (Test-Path $destDir) { Remove-Item $destDir -Recurse -Force }
    New-Item -ItemType Directory -Path $destDir -Force | Out-Null
    Write-Host "[OK] Created: $destDir" -ForegroundColor Green
     # Create symlink
      New-Item -ItemType SymbolicLink -Path $destFile -Target $sourceFile -Force | Out-Null
      Write-Host "[OK] Symlink: $destFile -> $sourceFile" -ForegroundColor Green

Scripted Installation

This requires the same clone of the Git repository as the manual step requires:

Shell
PS C:\Users\mslin> cd $work/ableton # specify the directory to hold the cloned Git repository
PS D:\work\ableton> git clone https://github.com/ahujasid/ableton-mcp.git Cloning into 'ableton-mcp'... remote: Enumerating objects: 83, done. remote: Counting objects: 100% (45/45), done. remote: Compressing objects: 100% (13/13), done. remote: Total 83 (delta 38), reused 32 (delta 32), pack-reused 38 (from 1) Receiving objects: 100% (83/83), 51.42 KiB | 5.14 MiB/s, done. Resolving deltas: 100% (39/39), done.

Here is the PowerShell script that my friends Gemini, Claude and Grok helped me write. You just need to run it once; the symlink it creates will persist after every Ableton Live update.

Install-AbletonMCP.ps1
<#
.SYNOPSIS
    Installs the AbletonMCP Remote Script from a cloned instance of
    https://github.com/ahujasid/ableton-mcp.git.

.DESCRIPTION
    Uses symbolic link for automatic updates via `git pull`.
    Targets the CORRECT User Library path for Live 12+.
    Run after every Ableton Live update.

.PARAMETER RepoPath
    Path to cloned repo (default: D:\work\ableton\ableton-mcp)

.PARAMETER Help
    Show help (default: $false)

.EXAMPLE
    .\Install-AbletonMCP.ps1
    .\Install-AbletonMCP.ps1 "C:\path\to\repo"
    .\Install-AbletonMCP.ps1 -h

.NOTES
    Requires Developer Mode (Settings -> For developers) or run as Admin
    For more information, see:
    https://www.mslinn.com/av_studio/555-ableton-mcp-ahujasid.html
#>

param(
    [string]$RepoPath = "D:\work\ableton\ableton-mcp",
    [switch]$Help = $false
)

# ---------- Show Help ----------
if ($Help) {
    Write-Host @"
Installs the AbletonMCP Remote Script from a cloned instance of
https://github.com/ahujasid/ableton-mcp.git.

Usage:
  .\Install-AbletonMCP.ps1           # Assumes D:\work\ableton\ableton-mcp
  .\Install-AbletonMCP.ps1 "C:\path" # override path
  .\Install-AbletonMCP.ps1 -h        # show help

Set once:
  `$env:work = "D:\work"

After installing:
  Run Ableton Live; open Preferences / Link/MIDI
  Look for 'AbletonMCP' in the control surface pulldown
  Then run: uvx ableton-mcp

For more information, see:
https://www.mslinn.com/av_studio/555-ableton-mcp-ahujasid.html
"@
    exit 0
}

# ---------- Color Helpers ----------
function Write-OK    { param([string]$msg) Write-Host "[OK] $msg" -ForegroundColor Green }
function Write-Info  { param([string]$msg) Write-Host "[INFO] $msg" -ForegroundColor Yellow }
function Write-Fail  { param([string]$msg) Write-Host "[FAIL] $msg" -ForegroundColor Red; exit 1 }

# ---------- Validate Source ----------
$sourceFile = Join-Path $RepoPath "AbletonMCP_Remote_Script\__init__.py"
if (-not (Test-Path $sourceFile)) {
    Write-Fail "Repo not found: $RepoPath`nClone first: git clone https://github.com/ahujasid/ableton-mcp.git $RepoPath"
}

$fileSize = (Get-Item $sourceFile).Length
Write-Info "Source: $sourceFile (Size: $fileSize bytes)"

if ($fileSize -eq 0) {
    Write-Fail "Source file is empty: $sourceFile"
}

# ---------- Destination (CORRECT User Library path for Live 12+) ----------
$userLibrary = Join-Path $env:USERPROFILE "Documents\Ableton\User Library"
$remoteScriptsDir = Join-Path $userLibrary "Remote Scripts"
$destDir = Join-Path $remoteScriptsDir "AbletonMCP"
$destFile = Join-Path $destDir "__init__.py"

Write-Info "Target: User Library\Remote Scripts (Live 12+ compatible)"

# ---------- Create User Library if needed ----------
if (-not (Test-Path $userLibrary)) {
    New-Item -ItemType Directory -Path $userLibrary -Force | Out-Null
    Write-OK "Created User Library folder"
}

# ---------- Clean & create destination ----------
if (Test-Path $destDir) {
    Write-Info "Removing existing: $destDir"
    Remove-Item $destDir -Recurse -Force
}
New-Item -ItemType Directory -Path $destDir -Force | Out-Null
Write-OK "Created dest dir: $destDir"

# ---------- Create Symlink ----------
try {
    if (Test-Path $destFile) { Remove-Item $destFile -Force }
    New-Item -ItemType SymbolicLink -Path $destFile -Target $sourceFile -Force | Out-Null

    # Verify symlink
    if (-not (Test-Path $destFile)) {
        Write-Fail "Symlink verification failed.`nFix: Enable Developer Mode (Settings -> For developers) or run as Admin"
    }
    Write-OK "Symlink created: $destFile -> $sourceFile"
} catch {
    Write-Fail "Failed to create symlink: $($_.Exception.Message)`nFix: Enable Developer Mode (Settings -> For developers) or run as Admin"
}

# ---------- Verification ----------
Write-Info "Verification"
$folders = Get-ChildItem $remoteScriptsDir -Directory -ErrorAction SilentlyContinue
if ($folders | Where-Object { $_.Name -eq "AbletonMCP" }) {
    Write-OK "AbletonMCP folder exists in Remote Scripts"
} else {
    Write-Fail "Folder not found after install - check paths"
}

# ---------- Done ----------
Write-Host "`n[OK] INSTALL COMPLETE!" -ForegroundColor Green
Write-Host "`nNext:" -ForegroundColor Yellow
Write-Host "1. Close & reopen Ableton Live 12.2.6" -ForegroundColor White
Write-Host "2. Preferences -> Link/MIDI -> Select 'AbletonMCP' (set Input/Output to None)" -ForegroundColor White
Write-Host "3. Run: uvx ableton-mcp" -ForegroundColor White
Write-Host "`nTo update:" -ForegroundColor Yellow
Write-Host "cd $RepoPath; git pull" -ForegroundColor White

The script can be run any time; if it detects the symlink already exists, it deletes and recreates it.

This is the help message:

PowerShell
PS C:\Users\mslin> .\Install-AbletonMCP.ps1 -h
Installs the AbletonMCP Remote Script from a cloned instance of
https://github.com/ahujasid/ableton-mcp.git.

Usage:
  .\Install-AbletonMCP.ps1           # Assumes D:\work\ableton\ableton-mcp
  .\Install-AbletonMCP.ps1 "C:\path" # override path
  .\Install-AbletonMCP.ps1 -h        # show help

Set once:
  $env:work = "D:\work"

After installing:
  Run Ableton Live; open Preferences / Link/MIDI
  Look for 'AbletonMCP' in the control surface pulldown
  Then run: uvx ableton-mcp

For more information, see:
https://www.mslinn.com/av_studio/555-ableton-mcp-ahujasid.html 

It is finally time to run the script that creates the symlink. Open PowerShell with Administrator privilege.

PowerShell with Administrator privilege
PS C:\WINDOWS\system32> .\Install-AbletonMCP.ps1
[INFO] Source: D:\work\ableton\ableton-mcp\AbletonMCP_Remote_Script\__init__.py (Size: 45230 bytes)
[INFO] Target: User Library\Remote Scripts (Live 12+ compatible)
[OK] Created dest dir: C:\Users\mslin\Documents\Ableton\User Library\Remote Scripts\AbletonMCP
[OK] Symlink created: C:\Users\mslin\Documents\Ableton\User Library\Remote Scripts\AbletonMCP\__init__.py -> D:\work\ableton\ableton-mcp\AbletonMCP_Remote_Script\__init__.py
[INFO] Verification
[OK] AbletonMCP folder exists in Remote Scripts

[OK] INSTALL COMPLETE!

Next:
1. Close & reopen Ableton Live 12.2.6
2. Preferences -> Link/MIDI -> Select 'AbletonMCP' (set Input/Output to None)
3. Run: uvx ableton-mcp

To update:
cd D:\work\ableton\ableton-mcp; git pull 

Install ableton-mcp

  1. Launch Ableton Live
  2. The documentation said to type the following in a CMD or PowerShell window: This uses TCP sockets to communicate between the ableton-mcp MCP server and Claude Desktop.
    CMD or PowerShell
    $ uvx ableton-mcp

    You could also run ableton-mcp in STDIO mode, which might be more appropriate for Cursor integration.

    Shell
    $ uvx --with ableton-mcp ableton-mcp stdio

Configure Ableton Live

  1. If the Ableton Remote Script was previously set up, and if it loads successfully, you may see a yellow status message at the bottom of the Ableton Live screen indicating its successful loading or reloading.
  2. Open Preferences by pressing CTRL-,.
  3. Go to the Link Tempo MIDI tab.
  4. In an unused row, select AbletonMCP from the Control Surface dropdown, which was created when the Ableton Remote Script loaded. If you do not see that control surface, go back to the previous step.
  5. Leave Input Port and Output Port set to None for the selected row. This means MIDI I/O is disabled for the selected control surface, which is fine because the ableton-mcp MCP server talks to Live via OSC over sockets, not MIDI.
    Notice that the Input Ports and Output Ports sections below the Control Surface section do not mention AbletonMCP because it does not use MIDI.
  6. Press Esc to dismiss the menu.
  7. Live's yellow status bar should display a socket listener message (e.g., AbletonMCP listening on 127.0.0.1:11000). If not, restart Live.

Configure Claude Desktop

  1. Open Claude Desktop.
  2. Go to Settings by pressing CTRL-,, then select Developer > Edit Config.
  3. This opens claude_desktop_config.json (typically in %APPDATA%\Claude\claude_desktop_config.json for Windows). Add the following MCP server entry:
    %APPDATA%\Claude\claude_desktop_config.json fragment
    "AbletonMCP": {
      "command": "uvx",
        "args": [
          "ableton-mcp"
        ]
      }
    }
    If you have a new installation, your file should look like this now:
    %APPDATA%\Claude\claude_desktop_config.json complete
    {
      "mcpServers": {
        "AbletonMCP": {
          "command": "uvx",
            "args": [
              "ableton-mcp"
            ]
          }
        }
      }
    }
  4. Save the file.
  5. Close and reopen Claude Desktop. The ableton-mcp MCP server should automatically launch, so you do not need to run it manually.

All Together Now

  1. Ableton Live should be open now, and the remote script should automatically have loaded.
  2. In Claude Desktop, start a chat and type:

    get session info

    1. In the background, Claude Desktop will auto-launch the ableton-mcp MCP server by issuing the command
      uvx ableton-mcp
    2. Shortly thereafter, the remote Claude LLM responds to Claude Desktop with details about the current Ableton Live session, and they are presented to you.

      Here's your Ableton session info: Tempo: 120 BPM Time Signature: 4/4 Tracks: 37 regular tracks + 2 return tracks Master Track: Volume at 0.85, centered panning (0.0) What would you like to do next?

  3. To examine logs:
    • Check Ableton Live’s log.txt for OSC messages by using the Help menu and selecting Open Log Folder.
    • Open a CMD or PowerShell session and type the following to see server output.
      CMD or PowerShell
      $ uvx ableton-mcp
      2025-10-26 10:53:15,170 - AbletonMCPServer - INFO - AbletonMCP server starting up
      2025-10-26 10:53:15,170 - AbletonMCPServer - INFO - Connecting to Ableton (attempt 1/3)...
      2025-10-26 10:53:15,172 - AbletonMCPServer - INFO - Connected to Ableton at localhost:9877
      2025-10-26 10:53:15,172 - AbletonMCPServer - INFO - Created new persistent connection to Ableton
      2025-10-26 10:53:15,172 - AbletonMCPServer - INFO - Sending command: get_session_info with params: None
      2025-10-26 10:53:15,172 - AbletonMCPServer - INFO - Command sent, waiting for response...
      2025-10-26 10:53:15,202 - AbletonMCPServer - INFO - Received complete response (229 bytes)
      2025-10-26 10:53:15,202 - AbletonMCPServer - INFO - Received 229 bytes of data
      2025-10-26 10:53:15,202 - AbletonMCPServer - INFO - Response parsed, status: success
      2025-10-26 10:53:15,202 - AbletonMCPServer - INFO - Connection validated successfully
      2025-10-26 10:53:15,202 - AbletonMCPServer - INFO - Successfully connected to Ableton on startup 

Usage

Startup

  1. Launch Ableton Live.
  2. Ensure the Ableton Remote Script is loaded in Ableton Live by checking to see if the AbletonMCP control surface appears under Settings / Link, Tempo & MIDI. The ableton-mcp MCP server does not need to be running for this to work.
  3. Ensure the ableton-mcp MCP server is configured in Claude Desktop or Cursor.
  4. The connection between Ableton Live and Claude Desktop should automatically be established when you launch Claude Desktop.

Examples

Once running, you can do things like the following:

  • Track/Clip Creation: “Create an 80s synthwave track with drums and bass.”
  • Automation: “Change input routing for all tracks with 'voice' in the name to mic input.”
  • Playback: “Start playback and fire clip in track 2.”
  • Generative: “Add a jazz chord progression to the clip in track 1.”
  • Session Info: “How many tracks are in the current project?”

Some usage advice: Break complex tasks into smaller steps if timeouts occur. For example, first create a track, then add effects.

Claude Desktop gets clogged up inside very easily. Keep each chat short. If you notice things slowing down, start another chat.

Troubleshooting

Issue Cause Fix
Control Surface not appearing in Ableton Wrong folder path or Live version mismatch.
  1. Verify path to your version of Live by typing:
    CMD or PowerShell
    $ dir "%AppData%\Ableton\Live 12.2.6\Preferences\User Remote Scripts\AbletonMCP"
  2. Restart Live.
MCP server timeout/unknown command (e.g., /live/song/get/track_names) OSC daemon not bridging; common in Live 12.
  1. Run the following in CMD or PowerShell.
    CMD or PowerShell
    $ uvx ableton-mcp
    Check for [UNKNOWN COMMAND] in the output.
  2. Update AbletonOSC:
    CMD or PowerShell
    $ uv pip install --upgrade python-osc
  3. Test a simple command:
    User command in MCP client
    Get tempo
If the problem persists, check Reddit.
Is Port 11000 blocked? Firewall or another app. In Windows Defender Firewall:
  1. Click on Allow app or feature through Windows Defender Firewall
  2. Add Python/uvx
  3. Run the following in CMD or PowerShell to check:
    CMD or PowerShell
    $ netstat -ano | findstr :11000
* indicates a required field.

Please select the following to receive Mike Slinn’s newsletter:

You can unsubscribe at any time by clicking the link in the footer of emails.

Mike Slinn uses Mailchimp as his marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp’s privacy practices.