# Reported issues for Logic Pro MCP Desktop Extension

Pod holds 23 of 190 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [Logic Pro MCP Desktop Extension](/mcp/logic-pro-mcp-desktop-extension).

## Most discussed

### ADR-001~018 Implementation Work Guide

> **STATUS 2026-08-24** — NEXT: nothing of its own — this index closes when the ADR issues it indexes do; per-ADR state is on each issue.

# MongLong ADR-001-018 Implementation Work Guide

> Source integrity: uploaded implementation guide SHA-256 `aceaf47aabfb28de0eb81faf5c7eb74cffe4719c082b0dc301bc864d4ba60f20`.
>
> Scope note: This issue tracks the implementation work guide itself. It is a roadmap and governance guide for ADR-001 through ADR-018, not evidence that any listed ADR capability has

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/308) · 2026-07-10 · open · 53 comments

### system.refresh_cache exceeds its own 25s deadline on projects around 74 tracks

**Next action: decide whether to raise `refresh_cache`'s deadline class, split the poll cycle per section, or both — it is a design call; the measurement is done.**

## What happens

On a 74-track project, `system.refresh_cache` takes a **median of 12.6s** and **hits its 25s deadline in roughly 1 call in 5**, returning `operation_timeout`. The failure is honest — no false `refreshed: true` — but the operation simply does not complete.

Shipped in v3.14.0:

```
OperationRegistry.swift:648   (.sys

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/668) · 2026-08-22 · closed · 40 comments

### ADR-007: AX Selector Atlas and UI Drift Detector

> **STATUS 2026-08-30** — ALL SEVEN CRITERIA MET. The diff runs at qualification time as a `QualificationCase` (#715), a refused one rejects a promotion (`atlasDriftRefused`), and five baselines cover en and ko with `unmeasured []`. The English control bar (#717) earned its keep on capture: it exposed the arm toggle matching `Record` by prefix, so the transport's global Record button read as a track's arm control — invisible in Korean, where `녹음` is not a prefix of `녹음 활성화`. Production was never

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/290) · 2026-07-10 · closed · 25 comments

### Qualification coverage program — real per-operation evidence (A:20 → B:51 → C-live:35)

> **STATUS 2026-08-24** — NEXT: Phase B needs a write-and-read-back qualification mode, which does not exist. Measured today: `QualificationTransport.status` has no `.passed` branch for mutating operations, and that is deliberate — the runner probes them with parameters that must be refused and asserts `writeAttempted == false`, so a qualification run cannot modify a project. Adding a `.passed` branch would be moving the grader. Correcting an earlier line here: R-SEM is NOT indifferent to work —

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/373) · 2026-07-16 · open · 22 comments

### ADR-011: Full Verified Compressor Control and Auto-Setting

> **STATUS 2026-08-24** — BLOCKED behind #292: Compressor is a plug-in parameter surface and shares whatever the verified apply-back expansion establishes.

# ADR-011 - Full Verified Compressor Control and Auto-Setting

> Scope note: This roadmap issue is proposed future work, not a shipped capability. It builds on the already-filed foundation ADRs #284 through #293 and keeps direct bugfix issues separate.
>
> Source integrity: canonical ADR pack SHA-256 `d9ef73061f73efbbf1488e1af2c84dc824f56137

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/299) · 2026-07-10 · open · 11 comments

### ADR-009: Verified Plugin Apply-back Expansion

> **STATUS 2026-08-24** — NEXT: build the apply-back expansion on the Wave-0 insert work; #299 and #301 both consume whatever it establishes, so it precedes them.

# ADR-009 — Verified Plugin Apply-back Expansion

> Scope note: This roadmap issue intentionally excludes the currently open direct-fix issues (#253-#256, Doctor #260-#267, tempo #278, region completeness #279). Those issues remain separate implementation work even if this ADR lands first.

## Status
Proposed

## Priority
P1

## Depen

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/292) · 2026-07-10 · open · 10 comments

### ADR-008: Verified Mixer Routing Graph

> **STATUS 2026-08-24** — BLOCKED on node identity: a routing button's `AXDescription` *is* the destination, output and send buttons are indistinguishable by it, and the same bus reads `Bus 1` on the strip and `Sum 1` in the menu — identity cannot be the display string.

# ADR-008 — Verified Mixer Routing Graph

> Scope note: This roadmap issue intentionally excludes the currently open direct-fix issues (#253-#256, Doctor #260-#267, tempo #278, region completeness #279). Those issues remain sepa

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/291) · 2026-07-10 · open · 10 comments

### ADR-016: Smart Tempo and Tempo-Map Control Surface

> **STATUS 2026-08-24** — NEXT: implementation — the one Wave-5 item with no measured AX wall in front of it.

# ADR-016 - Smart Tempo and Tempo-Map Control Surface

> Scope note: This roadmap issue is proposed future work, not a shipped capability. It builds on the already-filed foundation ADRs #284 through #293 and keeps direct bugfix issues separate.
>
> Source integrity: canonical ADR pack SHA-256 `d9ef73061f73efbbf1488e1af2c84dc824f56137f7d248530c72f60ad1fcea0b`; final review notes dated 20

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/304) · 2026-07-10 · open · 9 comments

## Most recent

### mixer.set_pan / set_volume abandon the write partway and leave the fader at a wrong position

> **STATUS 2026-08-24** — NEXT: fix the nudge loop's two silent exits — an intermittent `nil` AX read and a 2-sample stagnation counter both abandon the write partway and leave the fader at a wrong position; measured reproduction and root cause are below.

## What happens

`mixer.set_pan` (and the same loop serves `mixer.set_volume`) moves the fader with `AXIncrement`/`AXDecrement` until it reaches the target. On the **first call of a fresh server process** it consistently stops short, leaving t

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/685) · 2026-08-24 · closed · 0 comments

### The runtime can still select Logic Pro Creator Studio, which this release does not ship for

The fix is written, unit-proven, and **not merged** — because no machine exists that can tell whether it works, and the only remaining route past the gate is evidence that would say nothing about it.

## The defect, on `main` today

`SetupDoctor.preferredLogicApp` falls through to Creator Studio and then to anything:

```swift
?? apps.first { $0.bundleID == LogicProVariant.creatorStudio.bundleID }
?? apps.first
```

`QualificationAxis.shipVariants` is `[.desktop]`, and `docs/adr/README.md:96` re

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/638) · 2026-08-19 · closed · 3 comments

### Eleven modules with consumers have no return-shape drive; the static check cannot cover that square

`Scripts/check-python-contracts.py` proves, for every module another file imports, that each referenced name exists and each call binds against the real signature. It cannot prove that a function still **returns what its callers expect** — a change from a list to a dict keeps the name and the signature, and nothing static can see it in untyped Python.

That square is covered by driving the API and asserting what comes back. Exactly one module has such a drive: `evidence.py`, via `Scripts/livekit

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/625) · 2026-08-19 · closed · 0 comments

### Every visual assertion should name its subject — thirty harnesses, zero adopt it

`evidence.visual()` takes `subject=`: what the watched rectangle IS, as the UI describes it, not where it is. Its docstring calls it mandatory. Measured today: **thirty harnesses call `visual()` and none passes one.**

The parameter exists because a band located by coordinates alone cannot show that it drifted onto different content. Three times this week a band kept its rectangle while the pane under it changed, and the check went red — or worse, stayed green — for reasons that had nothing to d

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/622) · 2026-08-19 · closed · 4 comments

### The live-evidence gate cannot express "this code has no caller, so no live mutation exists"

Hit while trying to ship the #293 fix. The gate is right and the change is right, and they cannot both
be satisfied.

## What happened

```
SHIP GATE, work/293-flag-cells @ 10a48734

full suite      ok — 3848 tests passed
live evidence   FAIL — no passing live evidence bound to 10a48734
                -> no check has a demonstrated mutation — a check that cannot fail is not evidence
```

The rule is correct and I would not want it relaxed: it is the rule that has caught three
cannot-fail checks

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/616) · 2026-08-19 · closed · 3 comments

### live_604_refusal_says_what_it_saw.py can no longer reach its subject — save_as succeeds now

Found while proving #612: running two harnesses at the same head, which the fix there makes possible.

`Scripts/livekit/live_604_refusal_says_what_it_saw.py` drives `project.save_as` on purpose and checks
that its **refusal** is legible. #606 made `save_as` work, so there is no refusal to read. Run against
current `main`:

```
checks 9  passed 7  visual_failed 1  restorations_failed 1

604/the-refusal-names-the-shape-it-saw               hint=''
604/the-refusal-says-whether-logic-owned-the-keybo

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/614) · 2026-08-19 · closed · 1 comment

### Every mutating operation is refused as "blocking dialog present" if it is the first call after server start

Found while proving #606. Reproducible, and it refuses real work on a condition that is not true.

## What happens

In a **fresh** server process, the first tool call that consults the blocking-dialog preflight is
refused. Any later call — including an immediate retry — passes.

```
call 1   project.save_as   error=unsupported_state  blocking_dialog_present=true   ← refused
call 2   project.save_as   state=A  success=true                                   ← wrote the file
```

Same process, same

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/608) · 2026-08-19 · closed · 0 comments

### save_as: the menu press opens no panel unless Logic owns the keyboard, and the filename-field clause is wrong even when it does

Split out of #604, which fixed how `project.save_as` *refuses*. This is why it refuses.

Two separate defects, both measured live on 2026-08-19 against Creator Studio 12.3.

## 1. `clickMenuItem` never activates Logic, so in production conditions no panel opens

`AccessibilityChannel.clickMenuItem` does an `AXPress` on the menu item and nothing else. Whether
that opens the Save panel depends entirely on who owns the keyboard. Four trials, alternating,
deterministic both ways:

```
front app     

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/606) · 2026-08-18 · closed · 3 comments

### project.save_as cannot recognise Logic's Save panel whenever its file browser is expanded, and leaves the panel open

## Measured on Logic Pro 12.3

`project.save_as` returned:

```
{"error":"channels_exhausted","state":"C",
 "hint":"Exact Save As dialog did not appear within 3 seconds"}
```

The panel **did** appear. Timed from the menu click:

```
Save window appeared after: 0.75 s
```

So the 3-second budget is not the problem. `exactSaveAsDialog` never classifies the panel that is
sitting on screen.

## Exactly one clause of the classifier fails

`saveAsDialogSelectionIsUnambiguous` requires all of:

```swi

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/604) · 2026-08-18 · closed · 1 comment

### Feature: song instrumental recreator via MuScriptor

### Preflight

- [x] I searched existing issues for related work.

### Priority

P0 - enables a critical adoption or safety path

### Primary area

logic-ui

### Problem

If this possible to do this ? Song recreation via MuScriptor + logic pro mcp

This wil gave the Logic Pro MCP project a lot of publicity because a lot of people used the ai music and the instrumental there is low quality

### Proposed outcome

0

### Safety and contract notes

0

### Done when

0

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/600) · 2026-08-18 · closed · external user · 3 comments

### Six channel-table rows stand in front of no implementation (the non-region half of the #575 census)

#587 retired five `region.*` rows whose only behaviour was a refusal string. I said at the time that
"eight more operations share this shape" and deliberately left them alone as out of scope.

**Two of the eight do not share it.** Correcting that before it becomes the premise of someone else's
work. Audited against the source at `ed58020c`, chain by chain:

| operation | channel chain | who implements it | verdict |
|---|---|---|---|
| `mixer.set_send` | `[.mcu]` | `MCUChannel.swift:259` | **imp

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/592) · 2026-08-18 · closed · 0 comments

### region.select_last reports "no region" on a project full of regions: its target filter is a pixel-height heuristic

Split out of #575, where the census of the region family is recorded. `region.select_last` is
implemented and reachable from no tool. This is why it should not be exposed as it stands.

## The filter excludes every region at ordinary zoom

`AccessibilityChannel+Regions.swift`, `defaultSelectLastRegion`, picks its target in AppleScript:

```applescript
-- Region heuristic: 20 < width < 2000, 20 < height < 200
if w > 20 and w < 2000 and h > 20 and h < 200 then …   -- then bottom-most, then right-m

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/591) · 2026-08-18 · closed · 1 comment

### project.new cannot run from the state Logic lands in at launch: the project chooser is counted as an open document

## Reproduction, measured today on Logic Pro 12.3 (both English and Korean)

Launch Logic with no document. It shows **Choose a Project**. Then:

```
logic_project.new
-> {"error":"unsupported_state","failure_stage":"precondition_open_document",
    "observed_window_count":1,
    "hint":"project.new requires Logic to have no open document; 1 window(s) are open. …",
    "recovery_action":"Close the open project with logic_project(\"close\", {confirmed: true}) …"}
```

The one window is the choose

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/590) · 2026-08-18 · closed · 0 comments

### Seven region.* operations are implemented and routed but reachable from no tool, and absent from the OperationRegistry

## The census

`RoutingTable` routes eight `region.*` operations. Only one is reachable from a tool:

| operation | channel implementation | dispatcher | OperationRegistry |
|---|---|---|---|
| `region.get_regions` | yes | `logic_project.get_regions` | — |
| `region.select` | yes | **none** | **absent** |
| `region.select_last` | yes | **none** | **absent** |
| `region.move_to_playhead` | yes | **none** | **absent** |
| `region.move` | yes | **none** | **absent** |
| `region.resize` | yes | **no

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/575) · 2026-08-17 · closed · 7 comments

### record_sequence fails 6/6 as the first operation in a fresh server process: the playhead reset reports a menu it never tried to actuate

## Correction first

`record_sequence` was recorded as failing at Logic's file-open panel — "Import button never became
enabled". **That is not what is wrong.** Measured today on Logic 12.3:

- the SMF the server generates is valid (`MThd`/`MTrk`, 68 bytes, format 0, 480 ppq) — captured
  mid-run before its `defer` cleanup and imported by hand successfully;
- its temp path (`$TMPDIR/LogicProMCP-501-*/<uuid>.mid`, dir 0700, file 0600) is fine — the same
  bytes at the same path shape select and e

[Read the thread](https://github.com/MongLong0214/logic-pro-mcp/issues/572) · 2026-08-17 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/MongLong0214/logic-pro-mcp/issues).
