mainstage-mcp
Integrates with Apple MainStage to build and edit concerts, including creating patches, setting tempo and time signature, selecting sounds from the Logic Pro/MainStage library, adjusting channel strip levels/pan/mute, and adding Playback backing tracks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mainstage-mcp Add a patch for Jump by Van Halen to my band concert"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mainstage-mcp
An MCP server that lets an AI assistant (Claude Desktop, or any other MCP client) build Apple MainStage concerts for you.
Tell your assistant "Add a patch for Jump by Van Halen to my band concert" and it will:
work out tempo, time signature and the keyboard sounds the song needs,
pick matching sounds from your installed Logic Pro / MainStage sound library,
create the patch in your concert with the right tempo, time signature, fader levels, pan and mute,
optionally add a Playback channel strip with a backing track you point it to.
🇩🇪 Deutsche Anleitung: README.de.md
Unofficial project. MainStage has no public API, so this server edits the concert package on disk. The file format was analysed by comparing files saved by MainStage. Every change is backed up first, and unknown file layouts are rejected instead of being modified. Still: keep your own backups of important concerts.
Features
Tool | What it does |
| Concerts in your concert folder(s) |
| Patch list, tempo, channel strips with sound, dB, pan, mute, Playback file |
| "Where can I find a flute?" – searches the sound library, the channel strips in your concerts, exported patch files and plug-in names (German/English instrument names) |
| Search the installed Logic/MainStage sound library |
| New patch with sounds, tempo, time signature, transpose, fader/pan/mute per channel |
| Change fader (dB), pan or mute of a channel strip |
| Change tempo, time signature or transpose of a patch |
| Find backing tracks in any folder you name |
| Add a Playback channel strip with an audio file to a patch |
| Third-party AU/VST plug-ins on the Mac |
| Is MainStage running, which concert is open |
Related MCP server: Logic Pro MCP Server
Requirements
macOS with MainStage 3 (concerts saved with MainStage 3.2 or newer)
The Logic Pro / MainStage sound library (MainStage ▸ Sound Library) for
search_soundsPython 3.10+ (
python3 --version)An MCP client, e.g. Claude Desktop
Installation
# 1. create an isolated environment
python3 -m venv ~/.mainstage-mcp
# 2. install the server from GitHub
~/.mainstage-mcp/bin/pip install "git+https://github.com/ChristianLechner304/mainstage-mcp.git"
# 3. check it starts (Ctrl+C to quit)
~/.mainstage-mcp/bin/mainstage-mcpTo update later: ~/.mainstage-mcp/bin/pip install --upgrade "git+https://github.com/ChristianLechner304/mainstage-mcp.git"
Connect it to Claude Desktop
Open Claude Desktop ▸ Settings ▸ Developer ▸ Edit Config and add the server to
claude_desktop_config.json (replace YOUR_USER with your macOS user name, echo $HOME shows it):
{
"mcpServers": {
"mainstage": {
"command": "/Users/YOUR_USER/.mainstage-mcp/bin/mainstage-mcp",
"env": {
"MAINSTAGE_CONCERTS_DIR": "/Users/YOUR_USER/Music/MainStage"
}
}
}
}Restart Claude Desktop. The MainStage tools appear in the tools menu of a new chat. Other MCP clients use the same command (stdio transport).
Configuration
All settings are optional environment variables in the env block:
Variable | Default | Meaning |
|
| Folder(s) containing your |
| standard Logic/MainStage library locations | Patch library folder(s), separated by |
|
| Where |
| (auto) | A |
|
| Backups of changed files; |
Concerts can always be addressed by full path too, and find_audio_files / add_playback accept
any folder or file you mention in the chat. Nothing user-specific is hard-coded.
macOS permissions
Automation / System Events: to detect whether MainStage has a concert open, the server reads MainStage's window titles. macOS asks once whether Claude may control "System Events"; allow it. Without this permission the server refuses to edit concerts while MainStage is running at all.
Files: if your concerts or backing tracks live in a protected location (Desktop, Documents, Downloads, iCloud/OneDrive folders), macOS may ask for access the first time.
Working with MainStage
Close the concert in MainStage (or quit MainStage) before asking for changes. MainStage keeps the concert in memory and would overwrite the changes when saving. The server checks this and tells the assistant to ask you to close it; with
wait_secondsit waits until you have.Ask your assistant, e.g.:
"Which patches are in my concert 'Band 2026'?"
"I need a flute sound – where can I find one?"
"Add a patch for 'Jump' by Van Halen to 'Band 2026': synth brass for the riff, a lead for the solo (muted), faders at 0 dB."
"Set the solo lead in 'Jump' to -3 dB and unmute it."
"Add the backing track from ~/Music/Backing Tracks for 'Jump' as playback, muted."
Open the concert in MainStage. New patches appear at the end of the patch list (or at the requested position) with the next free program change number.
Playback tracks
add_playback copies an existing Playback channel strip and points it to a new audio file, so
routing (e.g. Output 3-4), effects and Playback settings follow your usual setup.
One-time setup: create one patch in any concert with a channel strip that uses the Playback
plug-in and has an audio file loaded, then save the concert. The server finds it automatically
in your concert folder, or you set MAINSTAGE_PLAYBACK_TEMPLATE to that .cst file
(inside the concert package: Show Package Contents ▸ Concert.patch ▸ Patch.patch ▸ Channel.cst).
Only use audio files you have the rights to use (purchased backing tracks, your own recordings or stems).
Limitations
Sounds come from single-channel-strip library patches (≈3,700 in the full library). Multi-strip "summing stack" patches are skipped.
Plug-in parameters inside a channel strip (e.g. reverb amount, filter cutoff) cannot be edited; choose a fitting preset instead, or create your own library patches and point
MAINSTAGE_LIBRARY_DIRSto them.Screen-control mappings, keyboard splits/layers and sets (folders) are not created yet. New patches copy the screen-control layout of an existing patch in the concert, so the concert needs at least one patch.
Tested with MainStage 3 concerts on Apple Silicon. Other versions may use a different file layout; the server then refuses to edit instead of guessing.
How it works
See docs/FORMAT.md for what is known about the concert and channel-strip format.
Development
git clone https://github.com/ChristianLechner304/mainstage-mcp.git
cd mainstage-mcp
python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytestContributions are welcome, especially file-format findings from other MainStage versions. Never commit concerts, channel strips or audio files (Apple sound content and recordings are copyrighted).
License
MIT. MainStage and Logic Pro are trademarks of Apple Inc. This project is not affiliated with Apple.
Available Tools
14 toolsadd_playbackB
Add a Playback channel strip playing the given audio file to a patch.
Uses an existing Playback channel strip (from your concerts or MAINSTAGE_PLAYBACK_TEMPLATE) as template, so output routing and plug-in settings follow your usual setup.
Inputs: patch (required), concert (required), audio_file (required), label, +3 more.
create_song_patchC
Create a new patch for a song with sounds from the library, tempo, time signature and mixer settings.
Inputs: name (required), concert (required), channels (required), tempo, +4 more.
find_audio_filesB
Find audio files (mp3, wav, aiff, m4a, …) in a folder, e.g. backing tracks for a song.
Inputs: directory (required), limit, query.
find_soundB
Where can I find a sound like this? Searches the sound library, the channel strips used in your concerts, exported patch files and installed plug-in names. German/English instrument names work.
Inputs: query (required), limit.
get_patchB
Details of one patch: tempo, time signature, channel strips with sound, dB, pan, mute, plug-ins.
Inputs: patch (required), concert (required).
list_concertsB
List the .concert files in the configured concert folder(s).
Inputs: no named parameters.
list_installed_pluginsB
Third-party Audio Unit / VST plug-ins installed on this Mac (Apple's built-in instruments are not listed).
Inputs: no named parameters.
list_patchesB
Patch list of a concert (in order, sets shown as nested entries).
Inputs: concert (required).
list_sound_categoriesB
Categories of the sound library with the number of sounds in each.
Inputs: no named parameters.
mainstage_statusB
Is MainStage running and which concert windows are open.
Inputs: no named parameters.
refresh_sound_libraryA
Rescan the sound library (after installing new content).
Inputs: no named parameters.
search_soundsC
Search the installed Logic/MainStage sound library (instrument patches).
Inputs: limit, query, category.
set_channelC
Change fader (dB), pan (-1…+1) or mute of a channel strip in a patch.
Inputs: patch (required), channel (required), concert (required), pan, +3 more.
set_patch_settingsC
Change tempo, time signature or transpose of an existing patch.
Inputs: patch (required), concert (required), tempo, transpose, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Most tools target a distinct resource+action (concerts vs. patches vs. channel strips vs. sounds vs. plug-ins). The one soft overlap is search_sounds vs. find_sound, which both hit the sound library, though the descriptions differentiate exact-name search from broad 'find me something like this' lookup.
Nearly all tools follow a snake_case verb_noun pattern (list_patches, get_patch, set_channel, create_song_patch, refresh_sound_library). The only deviation is mainstage_status, which uses a bare noun phrase rather than a verb.
14 tools is well within the well-scoped range for a domain covering concerts, patches, channel strips, sound library, and plug-ins. Each tool maps to a concrete inspection or mutation operation with no obvious filler.
Read and update paths are solid (list/get patch, set_patch_settings, set_channel) and creation exists via create_song_patch, but there is no delete/rename/duplicate patch, no patch reordering, and no way to create or open a concert — only list it. These are notable gaps for a full patch lifecycle despite core workflows being covered.
Maintenance
Related MCP Connectors
Compose, mix, master and export in Logic Pro, REAPER or Ableton Live by talking to an AI engineer.
Read and edit DAW projects as an agent, save native Logic projects, convert projects between DAWs
Score video, make music as an agent: 100+ AI instruments play your MIDI, audio, stems, Logic/Ableton
Make AI Tracks, loops and sound effects, split stems, build drum kits and master songs.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language control over Ableton Live for generating musical patterns, melodies, and full song arrangements. It also provides tools for sample searching and mixing assistance through an OSC-based connection with Claude Desktop.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents like Claude and Cursor to control Logic Pro for music production, including creating tracks, writing MIDI, operating transport and mixer, and inspecting live project data.202MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control GarageBand on macOS, including composing and recording via virtual MIDI, managing projects and tracks, driving transport, and exporting songs.3MIT
- FlicenseAqualityCmaintenanceEnables AI assistants to control a live REAPER DAW session on macOS in real time, including track creation, MIDI writing, FX management, and transport control.20-