Enables an AI assistant to control Apple Logic Pro DAW including transport, mixing, playhead positioning, MIDI region read/write, and more, via MCP.
SaferSkills independently audited logic-pro-mcp (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP server that lets an AI assistant operate Apple Logic Pro — transport, mixing, a full Mackie Control surface, playhead positioning, and MIDI region read/write.
Logic is the least scriptable major DAW: no AppleScript API and no plugin SDK that reaches project data. This server stitches together the macOS channels that do work — and deliberately favours the ones that don't force Logic to the foreground:
surface — channels addressed by number, like real hardware.
Claude ⇄ MCP server (TypeScript) ⇄ JSON-RPC over stdio ⇄ Python worker
src/index.ts src/bridge.ts python/worker.py
├── logic/mcu.py Mackie Control surface (persistent)
├── logic/mcu_protocol.py MCU byte map + codecs
├── logic/midiport.py MMC + IAC streaming (rtmidi)
├── logic/write_region.py playhead + record-to-track
├── logic/export_region.py region export (AX)
├── logic/smf.py SMF read/write (mido)
├── logic/axui.py Accessibility helpers
└── logic/keys.py CGEvent keys (fallback)TypeScript owns only the MCP protocol. Python owns all MIDI and macOS-native work, and is testable standalone via python/cli.py and python/mcudev.py.
foreground; falls back to MMC then key commands).
state: arm, mute, solo, select, fader, pan, meter.
timecode, lit buttons) and press any Mackie button with modifiers.
on/off via AX (focus-independent).
record notes onto a track at a bar (IAC streaming); write notes to a .mid.
npm install
python3 -m venv .venv && .venv/bin/pip install -r python/requirements.txt
npm run buildmacOS setup:
(System Settings ▸ Privacy & Security ▸ Accessibility).
IAC Driver MCU Cmdand IAC Driver MCU Fb, plus IAC Driver Bus 1 for note streaming.
add a Mackie Control surface using MCU Cmd as Input and MCU Fb as Output, and filter both MCU buses out of track inputs.
(right-click the Control Bar ▸ Customize Control Bar and Display ▸ LCD ▸ Custom ▸ check Locators (Bar/Beat)).
The server is a stdio MCP server: run dist/index.js with node, and set LOGIC_MCP_PYTHON to the venv's Python so the worker uses the right interpreter. Use absolute paths everywhere — most harnesses don't run from this directory. (dist/ is gitignored, so run npm run build first.)
The base config block, reused by every harness below:
{
"command": "/ABSOLUTE/PATH/TO/node",
"args": ["/ABSOLUTE/PATH/logic-pro-mcp/dist/index.js"],
"env": { "LOGIC_MCP_PYTHON": "/ABSOLUTE/PATH/logic-pro-mcp/.venv/bin/python" }
}Find your absolute paths with which node and pwd.
Claude Code — register from the repo root (writes to ~/.claude.json):
npm run build
claude mcp add logic-pro "$(which node)" "$(pwd)/dist/index.js" \
--env LOGIC_MCP_PYTHON="$(pwd)/.venv/bin/python"Or drop a .mcp.json in a project root to share it with that project (claude mcp add with --scope project does the same):
{ "mcpServers": { "logic-pro": { <base config block> } } }Claude Desktop — edit ~/Library/Application Support/Claude/claude_desktop_config.json, add the server under mcpServers, then restart the app:
{ "mcpServers": { "logic-pro": { <base config block> } } }Other harnesses (Cursor, Cline, custom SDK clients) take the same shape: a stdio server with command, args, and env. Consult the host's MCP docs for where its config file lives.
After registering, confirm the tools load (in Claude Code: /mcp should list logic-pro). If they don't, check the worker can start standalone: .venv/bin/python python/worker.py and send {"id":1,"method":"ping"}.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.