logic-pro-mcp
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Basarisiz
- rm -rf — Recursive force deletion command in Scripts/release.sh
Permissions Gecti
- Permissions — No dangerous permissions requested
This MCP server acts as a bridge, enabling AI assistants like Claude to control Apple's Logic Pro digital audio workstation using natural language commands. It routes operations through seven native macOS control channels to manage mixing, transport, and MIDI composition.
Security Assessment
Overall Risk: Low
The server primarily interacts with local macOS system APIs (CoreMIDI, AppleScript, Accessibility) to control music software, meaning it does not inherently access highly sensitive data or make external network requests. No hardcoded secrets were found, and the tool does not request dangerous system permissions. The only flagged issue is a recursive force deletion command (`rm -rf`) located within the release packaging script. While standard for build processes, this warrants a quick manual check to ensure it only targets intended build directories.
Quality Assessment
The project is relatively new and lacks widespread community visibility, evidenced by its low star count. However, the codebase demonstrates strong underlying health: it is actively maintained, utilizes the permissive MIT license, and claims a robust test suite with 835 passing tests. The documentation is exceptionally clear and detailed, outlining exactly how the tool interacts with the host operating system.
Verdict
Safe to use with minor caution, recognizing it is an early-stage project with limited community review.
Natural-language Logic Pro control for Claude and other MCP clients
The missing API for Logic Pro.
Natural-language control of Logic Pro from Claude and other MCP clients.
If this project helps you make music with Claude, Cursor, or any MCP client, give it a star. It helps this repo reach more Logic Pro users.
Logic Pro has no public API. This server bridges that gap by combining 7 native macOS control channels into a single MCP interface — giving AI assistants bidirectional, deterministic control over transport, mixing, MIDI composition, plugins, automation, and project lifecycle.
You: "Make a 4-bar techno loop in A minor at 140 BPM"
Claude → logic_tracks.record_sequence {
bar: 1, tempo: 140,
notes: "45,0,95;57,107,95;45,214,95;..."
}
Claude → logic_tracks.set_instrument {
index: 0, path: "Electronic Drums/Roland TR-909"
}
Logic Pro: region imported, TR-909 loaded, ready to play.
Why this exists
Logic Pro ships without an AppleScript dictionary rich enough for composition workflows, without OSC, and without a first-party MCP server. Every existing "Logic automation" tool either:
- Relies on screen-scraping via vanilla AppleScript (slow, fragile, breaks every Logic update)
- Simulates keyboard shortcuts (no state awareness, no feedback)
- Uses a single protocol like MCU alone (misses 80% of Logic's surface)
This server takes a different approach: combine seven complementary channels, route each operation to the channel best suited for it, and expose a clean MCP tool surface on top.
What it does
Mixer — Control faders, pan, sends, plugin parameters with 14-bit MCU resolution. Bidirectional: state cache reflects what Logic actually did, not what you requested.
Transport — Play, stop, record, locate, cycle, tempo, metronome. Sub-millisecond CoreMIDI MMC path; AX dialog fallback for precise bar positioning that auto-extends the project length.
MIDI composition — record_sequence generates a Standard MIDI File server-side and imports it into a new track. Zero timing drift regardless of system load; notes land at the exact requested bar.
Library & instruments — Enumerate Logic's full instrument library (Electronic Drums, Synthesizer, Bass, etc.) and load presets by path. Tree-scan caches to disk for instant subsequent lookups.
Plugins — Deterministic plugin parameter control via a Scripter JS insert on the selected track.
Navigation — Goto bar, markers by name, zoom, view toggles.
Project lifecycle — New, open, save, save-as, close, bounce, quit — all with explicit destructive-operation confirmation.
Quick Start
Prerequisites: macOS 14+, Logic Pro 12.0.1+, Apple Silicon (arm64) native; Intel Macs are supported via Rosetta 2.
Option A — Homebrew (recommended)
brew tap MongLong0214/logic-pro-mcp https://github.com/MongLong0214/logic-pro-mcp
brew install logic-pro-mcp
The Homebrew formula pins both the release tarball URL and its SHA256; Homebrew itself is a trusted delivery channel with its own signature chain. This is the hardened path for production installs.
Option B — Download-inspect-run one-line installer
The installer is fail-closed: it refuses to run without explicit LOGIC_PRO_MCP_SHA256 + LOGIC_PRO_MCP_TEAM_ID env pins. Inspect the script first, then execute with the pins copied from the release's SHA256SUMS.txt:
curl -fsSL https://raw.githubusercontent.com/MongLong0214/logic-pro-mcp/v3.1.1/Scripts/install.sh -o install.sh
# inspect install.sh, then:
LOGIC_PRO_MCP_SHA256=<paste from release SHA256SUMS.txt> \
LOGIC_PRO_MCP_TEAM_ID=ADHOC \
bash install.sh
If you knowingly accept same-origin provenance (hash + Team ID fetched from the same release as the binary), opt in explicitly:
LOGIC_PRO_MCP_ALLOW_SAME_ORIGIN=1 \
bash <(curl -fsSL https://raw.githubusercontent.com/MongLong0214/logic-pro-mcp/v3.1.1/Scripts/install.sh)
See SECURITY.md §Installer trust model for the trust tiers and threat model.
Either path installs the binary, verifies its SHA256, registers with Claude Code, and installs the Key Commands preset. It does not configure the MCU control surface or Scripter insert — see the Setup Guide for those two manual steps (~5 minutes).
Then test in Claude:
"Check Logic Pro MCP health and show all ready channels."
Expected: all 7 channels ready (or 5 if you skipped Key Commands and Scripter).
Architecture at a Glance
┌─ MCP Client (Claude / Desktop / Code) ─┐
│ │
│ logic_transport logic_tracks │
│ logic_mixer logic_midi │
│ logic_edit logic_navigate │
│ logic_project logic_system │
│ │
└─────────────────┬───────────────────────┘
│ stdio
┌─────────────────▼───────────────────────┐
│ LogicProMCP Server (Swift) │
│ │
│ ┌─ ChannelRouter (130+ operations) ──┐ │
│ │ routes operation → best channel │ │
│ └───────────────────┬───────────────┘ │
│ │ │
│ ┌──────┬──────┬─────▼─────┬──────┐ │
│ │ MCU │ AX │ AppleScript│CoreMIDI│ │
│ │ │ │ │ │ │
│ │ CGEvent Scripter KeyCmds │ │
│ └──────┴──────┴───────────┴────────┘ │
│ │ │
└──────────────────────┼──────────────────┘
│ MIDI / AX / AppleScript
┌──────▼───────┐
│ Logic Pro │
└──────────────┘
See Architecture for deeper details on channel priorities and state flow.
Documentation
| Document | Audience | Purpose |
|---|---|---|
| Setup Guide | End users | One-page install + Logic Pro integration, ~10 min |
| API Reference | End users, MCP clients | All 8 tools, 9 resources, 3 templates, 130+ operations |
| Troubleshooting | End users | Common failures and fixes |
| Architecture | Contributors | Channel design, state flow, testing strategy |
| Maintainer Guide | Maintainers | Release, approvals, E2E checklist |
| Security Policy | Security reviewers | Threat model, reporting, hardening |
| Changelog | Everyone | Per-release changes |
| Contributing | Contributors | Dev setup, PR workflow |
Status
v3.1.1 (2026-04-26) — Honest Contract Extension. v3.1.0 covered 4 ops; v3.1.1 promotes 13 more AX-channel mutating ops (track lifecycle, transport, region, midi.import_file, project.save_as, mixer AC fallback) to the same 3-state envelope, plus unifies logic://transport/state under the {cache_age_sec, fetched_at, data} envelope. MCU-routed track.set_automation and the V-Pot pan State-A enabler are deferred to v3.1.2.
What changed from v3.0.9
track.set_instrumentnow reads back the loaded patch name and reportsverified:trueonly when it matches the request; mismatches returnverified:falsewithreason:"readback_mismatch".track.selectreads backAXSelectedChildrenwith a 6× retry (100ms each, 600ms budget). A read-back that returns a different index returnsverified:falsewithreason:"readback_mismatch"; a read-back that never surfaces across the retry budget returnsverified:falsewithreason:"retry_exhausted". Neither path silently claims a bare success.mixer.set_volume/mixer.set_master_volumenow poll the MCU fader echo intoStateCachefor 500ms (override viaMCU_ECHO_TIMEOUT_MS=250|500|1000) and returnverified:trueonly when a freshly-written echo matches within ±2 LSB (14-bit resolution, tolerance2/16383). The freshness stamp prevents an identical-value re-send from being confirmed by a stale cache value left over from the prior call.mixer.set_panreturnsverified:falsewithreason:"readback_unavailable"— V-Pot feedback is relative and not yet plumbed through toStateCache; the honest answer beats a silent lie.transport.set_cycle_range(AX path) now returns theverifiedfield that the osascript fallback already had.scan_library {mode:"disk"}no longer poisons thelastScancache thatresolve_path/set_instrumentconsult; disk-only entries are annotated and do not claimloadable:true.- State resources (
logic://tracks,logic://library/inventory, …) exposecache_age_sec+fetched_atso clients can detect staleness.
Compatibility: mutating-op responses are additive (new verified / reason / observed fields). Breaking at the resource layer: logic://tracks and logic://library/inventory now wrap their payload in {cache_age_sec, fetched_at, data: …}, and logic_tracks.scan_library wraps its result in {source, root: …}. v3.0.9 clients that parsed those payloads directly must read .data / .root to reach the legacy shape. See CHANGELOG §Compatibility for the full migration diff.
scan_library continues to enumerate ~/Music/Logic Pro Library.bundle/Patches/Instrument/ (5,000+ leaves on a full factory install). The v3.0.5 wording that "every patch on disk is addressable via track.set_instrument" is withdrawn — paths that the Panel-taxonomy mapper cannot route are now surfaced honestly instead of silently pretending to load.
Notarized (Apple-signed) release requires Apple Developer Program membership ($99/year). Until that's set up, the installer operates in ADHOC mode: SHA256 pin + codesign --verify still protect against tampering, but macOS Gatekeeper assessment is skipped and the installer strips the quarantine attribute so the binary runs without warnings.
See SECURITY.md §Release types for the trust model detail.
Testing
- 824 unit + integration tests passing on the v3.1.1 branch (
swift test --skip testLogicProServerStartCoversDefaultPortAndPollerLifecyclePaths --skip testStatePollerStartStopLifecycle— 2 timer-driven lifecycle tests are deterministic-only under load-bearing CI, not product code) - Live E2E (
Scripts/live-e2e-test.py): the ~200 environment-independent assertions pass; ~45 tests require a running Logic Pro 12 session with the MCU control surface registered and fail otherwise (documented as environment-gated, not regression) - Multiple independent production-readiness reviews (code quality, security, architecture) converged to PROCEED after the v3.0.2 hardening passes
- v3.0.3+ AX-native control surface: primary GUI touchpoints (track selection, plugin Setting popup) prefer Apple AX actions (AXPress, AXShowMenu, AXSelectedChildren) with CGEvent only as a last-resort fallback — reduces fragility under Logic UI updates
- v3.0.4 N-column Library navigation:
track.set_instrumentdelegates to the newLibraryAccessor.selectPathwhich clicks every segment in order; the 2-segment legacy caller path still works unchanged. - v3.0.5 filesystem-backed
scan_library:LibraryDiskScannerenumerates the Logic factory bundle on disk (no AX, no Library Panel clicks) and produces a schema-identicalLibraryRootwith full coverage. Default mode isdisk; legacy AX scan is available via{mode:"ax"}; a diff report is available via{mode:"both"}.
Known limitations
transport.set_tempocurrently requires the Logic tempo display to be accessible via AX; it returns an error if the control bar layout hides the BPM field. Workaround: set tempo manually in Logic once before calling MCP tempo operations.- MIDI File import cosmetics:
record_sequenceregions start at bar 1 and extend to the target bar (padding CC technique). Note timing inside the region is exact; the leading padding is inaudible. If you need a tight region, trim after import via Logic's Edit → Trim menu.
License
MIT. See LICENSE.
Contributing
Bug reports, PRs, and feature discussions are welcome. See CONTRIBUTING.md for the dev workflow.
Security vulnerabilities: please do not open a public issue. See SECURITY.md for the private disclosure process.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi