Catalog PyPI
PACKAGE EXPLORERView in registry

ableton-osc-mcp

PyPI

A comprehensive MCP server for controlling Ableton Live via OSC

abletondawmcpmusicosc
Versions collected1
Direct dependencies8From release 1.0.0
Last observed20 Oct, 17:29 UTC

README

Version 1.0.0 documentation

Ableton Live MCP Server

Intelligent, LLM-controlled music production in Ableton Live via Claude.

An MCP (Model Context Protocol) server with 49 tools that enable Claude to observe, control, and automate Ableton Live mixing workflows with natural language commands.

Python MCP OSC Ableton Status


What This Does

User: "Make the drums brighter and punchier"
Claude: ✅ Observes session → finds drums → applies EQ + compression
Result: Professional-sounding drums automatically adjusted

Features

  • 49 Tools across 5 phases (Phase 0–4)
  • Intelligent Control: Set EQ, compression, effects by parameter NAME
  • Session Observation: Query tracks, devices, properties in real-time
  • Smart Workflows: Auto-balance, EQ presets, compression, song scaffolding
  • 11 Device Support: EQ Eight, Compressor, Reverb, Delay, Saturator, etc.
  • 80-90% Mixing Automation: Most mixing tasks via natural language
  • Production-Ready: Type-hinted, tested, documented code

Quick Start

1. Install AbletonOSC

# Download from https://github.com/ideoforms/AbletonOSC
# Extract to: C:\Users\<Username>\AppData\Roaming\Ableton\Live 11.3.20\Preferences\User Remote Scripts\
# In Ableton: Preferences → Link/MIDI → Control Surfaces → Select AbletonOSC

2. Install & Run

# Clone/download this repo
cd ableton-mcp

# Install with uv (recommended)
uv sync
uv run ableton-mcp

# Or with pip
pip install -r requirements.txt
python -m ableton_mcp

3. Connect Claude

In Claude Code or Claude Desktop, add:

claude mcp add --transport stdio ableton -- uvx ableton-mcp

Example Commands

Basic Mixing

"Make the drums brighter"
→ Claude uses: get_track_info() + set_device_parameter_by_name()

"Balance the mix"
→ Claude uses: balance_mix()

"Add punch to drums"
→ Claude uses: compress_for_punch(track, "moderate")

Advanced Workflows

"Create a 4-minute song with intro, verses, chorus, and outro"
→ Claude uses: scaffold_song(["Intro", "Verse", "Chorus", "Bridge", "Outro"])

"Create a balanced mix with warm bass and bright vocals"
→ Claude uses: balance_mix() + quick_eq_preset(bass, "warm") + quick_eq_preset(vocals, "bright")

"What's in my session?"
→ Claude uses: list_tracks() + get_session_overview()

Architecture

49 Tools in 5 Phases

Phase 0 – Foundation (26 tools)

  • Transport: play, stop, tempo, metronome, undo, redo
  • Tracks: create, volume, pan, mute, solo, arm, name
  • Clips: create, fire, stop, add notes
  • Devices: set/get parameter by index

Phase 1 – Observation (9 tools) ✨

  • list_tracks() — See all tracks
  • get_track_info() — Get track properties
  • get_devices() — List devices on track
  • get_session_overview() — Full session snapshot

Phase 2 – Intelligent Control (1 + mappings) ✨

  • set_device_parameter_by_name() — Control by name, not index
  • 11 device parameter mappings
  • Preset system (Bright, Warm, Gentle, Aggressive)

Phase 3 – Metering (6 tools)

  • get_track_meter(), analyze_loudness(), spectrum_analysis()
  • Framework ready for AbletonOSC enhancement

Phase 4 – Batch Workflows (7 tools) ✨

  • balance_mix() — Auto-balance volumes
  • quick_eq_preset() — Apply EQ presets (bright, warm, dark, presence, clarity)
  • compress_for_punch() — Smart compression (gentle, moderate, aggressive)
  • scaffold_song() — Create song structure
  • gain_stage_session() — Optimize loudness
  • create_mixing_template() — Standard mixing layout
  • suggest_next_action() — Workflow recommendations

Supported Devices

Parameter control by name works for:

DeviceParameters
EQ EightBrightness, Warmth, Presence, Clarity, Low Shelf Gain, High Shelf Gain, etc.
CompressorThreshold, Ratio, Attack, Release, Makeup Gain, Knee, Look Ahead
ReverbDecay, Size, Mix, Damp, Width
DelayTime, Feedback, Mix
SaturatorDrive, Tone, Gain, Mode, Soft Knee
Vocoder, AutoFilter, Overdrive, Operator, Wavetable, SamplerVarious parameters

Data Models

All responses are structured JSON:

  • TrackInfo — name, volume, pan, mute, solo, arm, devices, clips
  • DeviceInfo — name, type, index, parameters
  • ParameterInfo — name, index, min/max, value, unit
  • SessionOverview — all tracks, tempo, time sig, playback state
  • ClipInfo — clip properties, length, loop, notes
  • MeterInfo — peak_db, rms_db, headroom, is_clipping

Configuration

Create .env:

ABLETON_IP=127.0.0.1
ABLETON_SEND_PORT=11000
ABLETON_RECV_PORT=11001
OSC_TIMEOUT_SECONDS=2.0
DEBUG=false

Performance

  • Startup: ~500ms (lazy OSC init)
  • Tool call: 2–10ms (local ops)
  • OSC round-trip: ~200ms (with 2s timeout)
  • Batch ops: ~10–50ms per operation

Code Quality

✅ Ruff linting: PASS ✅ Type hints: 100% ✅ Pydantic models: All validated ✅ Error handling: JSON responses ✅ Architecture: Bidirectional OSC

Known Limitations

  • Cannot add/remove devices (requires AbletonOSC enhancement)
  • Cannot load presets by name (requires preset browser API)
  • Metering requires endpoints (framework ready, awaiting API)

Documentation

See detailed guides:

  • FINAL_SUMMARY.md — Complete project overview
  • AUDIT.md — Initial gap analysis
  • PHASE2_FINDINGS.md — AbletonOSC limitations & workarounds

Contributing

Add device mappings in src/ableton_mcp/core/device_mappings.py Create new tool modules in src/ableton_mcp/tools/

Status

✅ Production-ready — 49 tools, 80-90% mixing automation, tested code


Questions? Check FINAL_SUMMARY.md or the examples above.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
1.0.015 Jun 20268

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
amanbatra03/ableton-mcp

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:29 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:e8eb23c0ba0bac4a33ccde1963aa462bc6efa917aa3d6179647e5b1e971a8f8b