v0.4.0
Download
- Windows (x64), bundled Node + native MIDI:
mcp-midi-control-v0.4.0-win-x64.zip - Stable latest URL (same file, version-stable name):
mcp-midi-control-win-x64.zip - SHA256 (versioned ZIP):
9c6b45bc3b9fc261cd273fabddd474579e6f4926db5489df6fa567b854033a91
Install
- Download the ZIP and extract it (right-click -> Extract All).
- Double-click
setup.cmd. - Fully quit and relaunch Claude Desktop.
See instructions.txt inside the ZIP for full details.
The FM3's first hardware field test, the fixes and protocol findings it
produced, and a codebase-wide reorganization of the Fractal packages by codec
generation — including one breaking change to the fractal-midi npm package's
TypeScript subpaths (JSON catalog consumers are unaffected).
Added
- FM3 hardware confirmation (community field test, fw 12.00, macOS). The
serial transport, discovery, framing, the entire read path (documented
queries + whole-block reads across 35 block types), continuousset_param,
set_bypass,switch_scene, and preset switching are now confirmed
end-to-end through this server's own probes on real FM3 hardware; set-by-name
discreteset_paramwas separately confirmed via a community session using
frames byte-identical to this server's encoder. Still awaiting on-device
confirmation:set_blockplacement,save_preset, and the Windows
serial-driver path. - FM3
switch_presetnow uses the gen-3 SysEx-native preset switch
(hardware-confirmed) instead of MIDI Program Change + Bank Select. The field
test proved the FM3 ignores CC32 with the spec's "standard" bank encoding, so
a PC switch to any preset above 127 landed on preset-mod-128. - Serial transport polish: prefers the macOS
/dev/cu.*callout twin over
thetty.*node, and logs a one-line "connected via serial
(matched: …)" notice so field reports are self-documenting. - Serial-only installs work without the native MIDI binding. node-midi is
now loaded lazily everywhere, so annpm install --ignore-scriptsclone (no
C++ toolchain) can run the FM3 over USB-serial; if the binding is genuinely
needed, the error names the fix (npm rebuild midi). - Per-block channel-count read projection (gen-3). The field test showed
whole-block dumps are not uniformly 4-channel-blocked (some blocks carry 1 or
2 channel copies); the reader now derives each block's channel count from the
dump against the device-true catalog, fixing reads on blocks like Looper and
Resonator that the uniform model mis-addressed. - Probe diagnostics hardened from field evidence: the gen-3 probes now
resolve every paramId from the device-true catalog (paramIds differ across
the family — hardcoded FM9-shaped ids mis-addressed the FM3 run), gate
block-placement checks on the status dump instead of poll responses (polls
answer even for unplaced blocks), and restore via the SysEx preset switch.
Changed
- BREAKING (
fractal-midinpm package): TypeScript subpaths are now
organized by Fractal codec generation.fractal-midi/axe-fx-gen1→
fractal-midi/gen1;fractal-midi/axe-fx-ii→fractal-midi/gen2/axe-fx-ii;
fractal-midi/axe-fx-iii,/fm3,/fm9,/vp4→
fractal-midi/gen3/<device>.fractal-midi/am4andfractal-midi/shared
are unchanged, andcatalog/*.jsonpaths are unchanged — JSON catalog
consumers are unaffected. Migration table in the package README. - Fractal MCP packages renamed by codec generation (internal to the
server):fractal-gen1(Axe-Fx Standard/Ultra),fractal-gen2(Axe-Fx II;
a future AX8 lands as a config),fractal-gen3(Axe-Fx III / FM3 / FM9 /
VP4). A new device on an existing codec generation is a config file, not a
package. - Shared wire-encoding primitives consolidated into
fractal-midi/shared
(14-bit and 16-bit septet codecs, display-scale conversion) with the public
device subpaths re-exporting them unchanged.
Fixed
- Working-buffer dirty tracking on the VP4 no longer mis-reads two of its
effect-id bytes as a "preset stored/loaded" signal (the VP4's write frame
has no sub-action byte; the check now applies only to the grid devices). - A fresh
npm installof a source checkout no longer silently links the
npm-registry copy offractal-midiinstead of the workspace copy (the
device packages pinned an exact stale version). - The installer's configuration pre-flight required package names that no
longer exist after the rename; a fresh ZIP install now passes it.