Skip to main content
Glama
Turik1

Morningstar MIDI MCP Server

by Turik1
README.md
# Morningstar MIDI MCP Server

A Model Context Protocol (MCP) server for configuring [Morningstar Engineering](https://www.morningstar.io/) MIDI foot controllers using natural language.

> **"I have an MC8 Pro and a Quad Cortex Mini. Put the tuner on long press bottom-left."**

The server resolves the switch position, looks up the correct MIDI CC from the [OpenMIDI](https://github.com/Morningstar-Engineering/openmidi) database, checks for conflicts, and programs your controller via USB.

## Features

- Configure Morningstar controllers using natural language through Claude
- 545+ device profiles from OpenMIDI — knows the MIDI implementation of hundreds of pedals, amps, and synths
- Physical layout mapping — say "bottom-left" instead of memorizing switch letters
- Conflict detection — warns before overwriting existing presets
- Supports MC3, MC6 MKII, MC6 Pro, MC8, and MC8 Pro

## Tools

- **connect** — Find and connect to a Morningstar controller via USB-MIDI
  - `port_name` (string, optional): MIDI port name. Auto-detects if omitted.

- **get_controller_info** — Query controller model, firmware version, and capabilities

- **get_preset** — Read the current state of a preset
  - `preset` (string, required): Switch letter (A–H) or position (`top-left`, `bottom-right`, etc.)

- **set_preset_message** — Program a MIDI message onto a preset
  - `preset` (string, required): Switch letter or position
  - `action` (string, required): `press`, `release`, `long_press`, `double_tap`, etc.
  - `type` (string, required): `CC` or `PC`
  - `cc_number` / `cc_value` (number, optional): CC parameters
  - `pc_number` (number, optional): Program Change number
  - `channel` (number, required): MIDI channel (0–15, where 0 = channel 1)
  - `slot` (number, optional): Message slot 0–15. Auto-assigns if omitted.
  - `force` (boolean, optional): Overwrite existing message in slot

- **set_preset_name** — Rename a preset
  - `preset` (string, required): Switch letter or position
  - `name` (string, required): New name
  - `name_type` (string, optional): `short`, `toggle`, or `long` (default: `short`)

- **get_bank_name** / **set_bank_name** — Read or rename the current bank

- **lookup_device** — Search the OpenMIDI database for a device's MIDI implementation
  - `device_name` (string, required): Device name (e.g., "Quad Cortex", "Timeline", "HX Stomp")

- **display_message** — Show text on the controller's LCD
  - `text` (string, required): Up to 20 characters
  - `duration_ms` (number, optional): Display duration in ms (default: 2000)

## Installation

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "morningstar": {
      "command": "npx",
      "args": ["-y", "morningstar-midi-mcp"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add morningstar-midi-mcp -- npx -y morningstar-midi-mcp
```

### Build from source

```bash
git clone --recurse-submodules https://github.com/Turik1/morningstar-midi-mcp.git
cd morningstar-midi-mcp
npm install
npm run build
```

## Setup

### 1. Connect your controller

Connect your Morningstar controller to your computer via USB. The server auto-detects Morningstar devices.

### 2. Configure your rig (optional)

Create `~/.config/morningstar-mcp/setup.yaml` to save your device setup:

```yaml
controller: MC8 Pro

devices:
  - name: Quad Cortex Mini
    midi_channel: 1
  - name: Strymon Timeline
    midi_channel: 2
```

Without this file, you can tell Claude your setup in conversation.

## Supported Controllers

| Model | Presets | Layout |
|-------|---------|--------|
| MC3 | 3 | A B C |
| MC6 MKII | 6 | A B C / D E F |
| MC6 Pro | 6 | A B C / D E F |
| MC8 | 8 | A B C D / E F G H |
| MC8 Pro | 8 | A B C D / E F G H |

## How It Works

The server communicates with Morningstar controllers using the [SysEx protocol](https://manuals.morningstar.io/mc-midi-controller/sysex-documentation-for-external-applications) over USB-MIDI. It bundles the [OpenMIDI](https://github.com/Morningstar-Engineering/openmidi) database (maintained by Morningstar Engineering) containing MIDI CC/PC mappings for 545+ devices.

Since the SysEx protocol cannot read preset messages back from the controller, the server maintains a local shadow state at `~/.config/morningstar-mcp/state.json` to track what has been written. Changes made outside this tool (e.g., via the Morningstar Web Editor) are not visible.

## Development

```bash
npm install
npm test          # Run tests (60 tests)
npm run build     # Compile TypeScript
```

## License

MIT

TDQS

C2.1/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct aspect of MIDI control: connection, display, bank/preset manipulation, device lookup, and controller info. Names clearly differentiate their purposes, leaving no ambiguity.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., get_bank_name, set_preset_name). No mixing of styles or irregular naming.

Tool Count5/5

With 9 tools, the set covers core MIDI operations without being bloated. Each tool serves a clear function, appropriate for a dedicated MIDI server.

Completeness4/5

The tool surface covers connection, display, bank/preset CRUD, and device lookup. Minor gaps like listing all presets or deleting presets may exist, but core workflows are complete.

Maintenance

ActivityInactive
ResponsivenessNo issues