π **English** | [ζ₯ζ¬θͺ](README.ja.md)
# πΉ Ableton MCP
An AI agent that gives you full control over Ableton Live using natural language.
## π Two Modes
### 1οΈβ£ MCP Mode (Recommended) - No API Key Required!
Use directly from Claude Desktop. Control Ableton just by chatting - no API key needed.
### 2οΈβ£ CLI Mode - Standalone
Operate from terminal using your Anthropic API key.
> β οΈ **Note**: CLI mode is experimental and has not been fully tested.
---
## π MCP Mode Setup (No API Key Required)
### 1. Installation
```bash
cd ableton-mcp
pip install -e .
```
### 2. Configure Claude Desktop
Edit the Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"ableton-mcp": {
"command": "python",
"args": ["-m", "src.mcp_server"],
"cwd": "/path/to/ableton-mcp"
}
}
}
```
β οΈ Replace `cwd` with the actual path to your ableton-mcp folder.
π **Windows users**: See [INSTALL_WINDOWS.md](INSTALL_WINDOWS.md) for detailed instructions.
### 3. Install AbletonOSC
**Option A: Max for Live Device (Simple)**
1. Download [AbletonOSC](https://github.com/ideoforms/AbletonOSC/releases)
2. Drag `AbletonOSC.amxd` onto a track in Ableton Live
**Option B: Remote Script (Recommended)**
1. Download from https://github.com/ideoforms/AbletonOSC
2. Place in Remote Scripts folder:
- **Windows**: `C:\Users\<YourName>\Documents\Ableton\User Library\Remote Scripts\AbletonOSC`
- **macOS**: `~/Music/Ableton/User Library/Remote Scripts/AbletonOSC`
3. Folder structure: `AbletonOSC\__init__.py` should be directly inside
4. In Ableton Live β Preferences β Link/Tempo/MIDI β Control Surface β Select **AbletonOSC**
### 4. Restart Claude Desktop
After restarting, you can control Ableton directly through chat!
```
You: Create a 4-minute EDM track
Claude: [using generate_arrangement tool]
Generated arrangement...
You: Add trap-style drums
Claude: [using create_drum_track tool]
Created drum track 'Drums'...
```
---
## β¨ Features
### π₯ Drum/Rhythm Generation
- Basic beats, four-on-floor, trap, breakbeat, D&B
- Custom pattern creation
### πΉ Melody/Synth Generation
- **Melody**: Scale-based auto-generation (adjustable density and contour)
- **Basslines**: basic, walking, syncopated, octave, arpeggiated
- **Chord progressions**: pop, jazz, sad, epic, dark, edm, lofi, cinematic
- **Arpeggios**: up, down, updown, random (8th/16th/triplet)
### π Sample Search
- Local library search (Ableton Core Library, Splice, etc.)
- Freesound API support
- Natural language queries
### ποΈ Mixing Assistance
- Frequency collision detection (kick vs bass, etc.)
- Automatic sidechain compression setup
- EQ suggestions
- Level/dynamics analysis
### π Song Structure Generation
- Genre templates: EDM, House, Techno, D&B, HipHop, Trap, Lo-Fi, Ambient, Pop
- Complete structure: Intro β Buildup β Drop β Breakdown β Outro
- Automatic automation generation
---
## π» CLI Mode Usage
### Launch
```bash
# Ableton connection mode
python src/cli.py
# Mock mode (test without Ableton)
python src/cli.py --mock
```
### Example Session
```
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β πΉ Ableton Agent CLI v2.0 πΉ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
π€ You: Create a 4-minute EDM track
π€ Agent: I'll generate an EDM track arrangement.
ποΈ Executing: generate_arrangement
Parameters: {"genre": "edm", "duration_minutes": 4.0}
β
Generated arrangement:
π΅ Untitled Edm
Tempo: 128 BPM | Key: Am
Total: 72 bars
π Structure:
[ 0] intro | 8 bars | Energy: ββββββββββ
[ 8] buildup | 8 bars | Energy: ββββββββββ
[ 16] drop | 16 bars | Energy: ββββββββββ
[ 32] breakdown | 8 bars | Energy: ββββββββββ
[ 40] buildup | 8 bars | Energy: ββββββββββ
[ 48] drop | 16 bars | Energy: ββββββββββ
[ 64] outro | 8 bars | Energy: ββββββββββ
π€ You: Create trap-style drums
π€ Agent: I'll create a trap-style drum pattern.
ποΈ Executing: create_drum_track
Parameters: {"pattern_type": "trap", "bars": 2, "name": "Trap Drums"}
β
Created drum track 'Trap Drums' (pattern: trap, 2 bars)
```
---
## β¨οΈ Commands
### Special Commands
| Command | Description |
|---------|-------------|
| `/help` | Show help |
| `/status` | Show project status |
| `/genres` | List available genres |
| `/arrangement` | Show current arrangement |
| `/mock` | Toggle mock mode |
| `/clear` | Clear conversation history |
| `quit` | Exit |
### Natural Language Examples
#### Drums
- "Create a basic drum pattern"
- "Make a 4-bar trap beat"
- "Four on the floor kick"
- "Create a breakbeat"
#### Melody/Bass
- "Create a melody in C minor"
- "Bright pentatonic melody"
- "Syncopated bassline"
- "Add an octave bass"
- "16th note arpeggio"
#### Chords
- "Create a dark chord progression"
- "Jazzy chords"
- "Cinematic chord progression"
#### Samples
- "Search for ethnic percussion"
- "Dark synth 140BPM"
- "Find kick samples"
#### Mixing
- "Analyze the mix"
- "Kick and bass are clashing"
- "It sounds muddy"
- "Set up sidechain"
- "Add reverb"
#### Song Structure
- "Create a 4-minute EDM track"
- "Generate a lo-fi hip hop structure"
- "Make a techno arrangement"
#### Mood
- "Make it darker"
- "Brighten it up"
- "Make it more intense"
- "Chill vibe"
---
## π Project Structure
```
ableton-mcp/
βββ .gitignore
βββ LICENSE
βββ README.md # English
βββ README.ja.md # Japanese
βββ INSTALL_WINDOWS.md # Windows setup guide
βββ pyproject.toml
βββ setup.bat # Windows setup script
βββ claude_desktop_config.example.json # Example config
βββ src/
βββ __init__.py
βββ mcp_server.py # MCP server (for Claude Desktop)
βββ cli.py # CLI interface
βββ agent.py # AI agent (Claude API)
βββ ableton_osc.py # Ableton OSC communication
βββ synth_generator.py # Melody/bass/chord/arpeggio generation
βββ sample_search.py # Sample search engine
βββ mixing_assistant.py # Mixing analysis & assistance
βββ arrangement_generator.py # Song structure generation
```
---
## π§ Extending
### Adding New Tools
1. Add tool definition to `ABLETON_TOOLS` in `src/agent.py`:
```python
{
"name": "your_tool_name",
"description": "Tool description",
"input_schema": {
"type": "object",
"properties": {
"param1": {"type": "string", "description": "Description"}
},
"required": ["param1"]
}
}
```
2. Add execution logic to `execute_command` in `src/cli.py`:
```python
elif tool == "your_tool_name":
return self._your_implementation(params)
```
### Adding Genre Templates
Add to `GenreTemplates.TEMPLATES` in `src/arrangement_generator.py`:
```python
"your_genre": {
"sections": [
("intro", 8, 0.3, ["pad"]),
("verse", 16, 0.6, ["drums", "bass"]),
# ...
],
"tempo_range": (100, 120),
"default_key": "Am",
}
```
---
## ποΈ Architecture
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β User Input (Natural Language) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Claude API (Tool Use) β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β Drums β β Melody β β Samples β β Mixing β ... β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Command Executor β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β β SynthGenerator β β SampleSearch β β MixingAssist β β
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ β
β ββββββββββββββββββ ββββββββββββββββββ β
β β ArrangementGen β β DrumPattern β β
β ββββββββββββββββββ ββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OSC Communication β
β (python-osc) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Ableton Live β
β (via AbletonOSC) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## β Troubleshooting
### Startup Order (Important!)
1. **Start Ableton Live first**
2. Confirm AbletonOSC shows "Started AbletonOSC on address ('0.0.0.0', 11000)" in log
3. **Then start Claude Desktop**
### OSC Connection Error
- Check that AbletonOSC is loaded
- Verify port 11000 is available
- Check firewall settings
**Windows - Check ports:**
```powershell
netstat -ano | findstr "11000 11001"
```
**Windows - Check Ableton log:**
```powershell
Get-Content "$env:USERPROFILE\AppData\Roaming\Ableton\Live *\Preferences\Log.txt" -Tail 50 | Select-String "OSC"
```
### Claude Desktop Issues
- **After editing files**: Restart Claude Desktop completely (exit from system tray)
- **Connection problems**: Restart Claude Desktop
### API Error (CLI Mode)
- Verify `ANTHROPIC_API_KEY` is correctly set
- Check API usage limits
### Samples Not Found
- Check sample folder paths
- Specify custom paths when initializing `SampleSearchEngine`
---
## π License
MIT
## π References
- [AbletonOSC](https://github.com/ideoforms/AbletonOSC)
- [Anthropic Claude API](https://docs.anthropic.com/)
- [python-osc](https://python-osc.readthedocs.io/)
- [Freesound API](https://freesound.org/docs/api/)