m8-tracker-mcp
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., "@m8-tracker-mcp show me what's currently on the M8 screen"
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.
m8-tracker-mcp
Unofficial MCP server for controlling a Dirtywave M8 over USB.
https://github.com/user-attachments/assets/da976470-4959-4849-9671-ee1f7610f04a
Requirements
Node.js 20 or later
M8 connected over USB
Tested with M8 Model:01 on firmware 6.6.3 (macOS). Cursor detection assumes firmware 6.x.
Only one app can open the M8's serial port at a time. Close m8c or other clients, or call disconnect first.
Related MCP server: clawtouch-mcp
Tools
Tool | Description |
| Read the screen as text |
| Press buttons |
| Press a series of buttons |
| Press a note key (keyjazz) |
| Get the model and firmware version |
| Open or release the serial port |
Screen format
get_screen returns the palette, the screen, and the cursor position:
=== Palette ===
a fg=#787c90 bg=#303440
b fg=#404050 bg=#303440
c fg=#f0f0f0 bg=#303440
d fg=#b0b0c0 bg=#303440
e fg=#98fcf8 bg=#303440
f fg=#00fcf8 bg=#303440
=== Screen ===
{e}SONG
1 2 3 4 5 6 {f}7 {a}8 T>120
00 {b}-- -- -- -- -- -- -- --
01 {b}-- -- -- -- -- -- -- -- {a}1 {b}---
02 {b}-- -- -- -- -- -- -- -- {a}2 {b}---
03 {b}-- -- -- -- -- -- -- -- {a}3 {b}---
04 {b}-- -- -- -- -- -- -- -- {a}4 {b}---
05 {b}-- -- -- -- -- -- -- -- {a}5 {b}---
06 {b}-- -- -- -- -- -- -- -- {a}6 {b}---
07 {b}-- -- -- -- -- -- -- -- {f}7 {b}---
{f}08 {b}-- -- -- -- -- -- {f}-- {b}-- {a}8 {b}---
09 {b}-- -- -- -- -- -- -- --
0A {b}-- -- -- -- -- -- -- --
0B {b}-- -- -- -- -- -- -- --
0C {b}-- -- -- -- -- -- -- --
0D {b}-- -- -- -- -- -- -- -- {a}P
0E {b}-- -- -- -- -- -- -- -- {f}S{a}CPIT
0F {b}-- -- -- -- -- -- -- -- {a}V
=== Cursor ===
line 14, columns 23-24: "--"Development
npm install
npm run dev
npm run build
npm testTests replay serial data recorded from a real M8 in fixtures/. To record a new one, run npm run capture -- <name> and check <name>.txt against the device.
Acknowledgments
Serial protocol handling was implemented with reference to m8c by Jonne Kokkonen.
License
MIT License. See LICENSE for more information.
Available Tools
7 toolsconnectConnect to M8A
Open the USB serial connection to the M8. Other tools connect automatically, so this is only needed to reconnect explicitly or to check that the M8 is reachable.
Inputs: no named parameters.
disconnectDisconnect from M8A
Close the USB serial connection so other apps (m8c, TyUploader for firmware updates, etc.) can use the M8. The next M8 tool call reconnects automatically.
Inputs: no named parameters.
get_screenGet M8 screen textA
Returns the current M8 screen as text with inline color tags. A Palette section maps slot letters to fg/bg colors. In the Screen section, "{x}" switches the color to slot x until the next tag; each line starts in slot "a". Spaces do not trigger tags. The Cursor section gives the line (1-based within the Screen section), the columns (1-based, not counting {x} tags) and the text inside the cursor frame.
Inputs: no named parameters.
get_system_infoGet M8 system infoA
Returns hardware model, firmware version, and font mode of the connected M8.
Inputs: no named parameters.
press_buttonsPress M8 buttonsA
Press one or more M8 buttons simultaneously for a short duration (default 50ms), then release, optionally several times. Use arrays to combine modifier-style inputs; names match the M8 hardware labels. E.g. ["shift","right"] for SHIFT+RIGHT (move to the next screen), ["edit","up"] with repeat 3 to raise a hex value by 0x30.
Inputs: buttons (required), repeat, duration_ms.
press_notePress a note key (keyjazz)A
Press a note key as if on a keyboard for duration_ms, then release it. The M8 uses the current instrument (the instrument number last set in a phrase), not the instrument on the cursor row. On the PHRASE screen with the cursor on the note column, this enters the note and the current instrument into that row; elsewhere it only plays the note. Move the cursor off the note column to only listen. Note numbers: 36 is C-4, 48 is C-5.
Inputs: note (required), duration_ms (required), velocity.
press_sequencePress a sequence of M8 buttonsA
Run several button presses in order in one call, each like press_buttons (pressed together, released, optionally repeated). Use it for multi-step edits, e.g. setting the three RGB values of a theme row. The user may move the cursor on the device between calls, so read the screen right before running a sequence to confirm where the cursor is, and read it again afterwards to confirm the result.
Inputs: steps (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes: connect/disconnect manage the serial link, get_screen and get_system_info read state, and press_note is specialized for note entry. The main overlap is between press_buttons and press_sequence, since press_sequence is essentially a batched version of press_buttons, but the descriptions explain when to use each.
Names consistently use snake_case and are mostly verb_noun (press_sequence, press_note, get_screen, get_system_info, press_buttons). connect and disconnect are verb-only exceptions, but they remain readable and predictable.
Seven tools is well-scoped for an M8 hardware-control server: connection management, screen reading, system info, and three input mechanisms. Each tool earns its place without redundancy.
The surface covers the full interaction lifecycle: connecting/disconnecting, reading screen and system state, and sending button, note, and sequenced inputs. For UI-automation-style control of the M8, there are no obvious missing operations.
Related MCP Connectors
OSC ↔ MIDI bridge for synthesizers and DAWs, with the SynthHub catalogue. A MIDI MCP and OSC MCP.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Notes, files, GitHub, and Drive through one MCP connection.
Related MCP Servers
- AlicenseBqualityCmaintenanceTurns Ableton Live into an MCP-accessible control surface, providing tools for controlling transport, tracks, clips, and devices, as well as resources for reading live state.510035 PyPI3MIT
- AlicenseAqualityBmaintenanceTurns a real USB HID device — a Raspberry Pi Pico 2 running open-source firmware — into MCP tools (move, click, drag, type, key combos, scroll) for any MCP client. Includes a --mock mode to try every tool with no hardware.1651 PyPI13MIT
- FlicenseBqualityDmaintenanceMCP server for controlling MicroPython devices (ESP32, RP2040, etc.) via USB Serial or WebREPL, enabling code execution, file operations, and device management from MCP clients.299-
- AlicenseBqualityDmaintenanceMCP server that enables full control of a Flipper Zero device over USB, including screenshots, radio protocols, and app development without requiring a COM port.35MIT