Morningstar MIDI MCP Server
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., "@Morningstar MIDI MCP ServerPut the tuner on long press bottom-left."
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.
Morningstar MIDI MCP Server
A Model Context Protocol (MCP) server for configuring Morningstar Engineering 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 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
Related MCP server: rc505mk2-mcp
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 positionaction(string, required):press,release,long_press,double_tap, etc.type(string, required):CCorPCcc_number/cc_value(number, optional): CC parameterspc_number(number, optional): Program Change numberchannel(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 positionname(string, required): New namename_type(string, optional):short,toggle, orlong(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 charactersduration_ms(number, optional): Display duration in ms (default: 2000)
Installation
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"morningstar": {
"command": "npx",
"args": ["-y", "morningstar-midi-mcp"]
}
}
}Claude Code
claude mcp add morningstar-midi-mcp -- npx -y morningstar-midi-mcpBuild from source
git clone --recurse-submodules https://github.com/Turik1/morningstar-midi-mcp.git
cd morningstar-midi-mcp
npm install
npm run buildSetup
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:
controller: MC8 Pro
devices:
- name: Quad Cortex Mini
midi_channel: 1
- name: Strymon Timeline
midi_channel: 2Without 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 over USB-MIDI. It bundles the 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
npm install
npm test # Run tests (60 tests)
npm run build # Compile TypeScriptLicense
MIT
Available Tools
9 toolsconnectD
| Name | Required | Description | Default |
|---|---|---|---|
| port_name | No | MIDI port name. Auto-detects Morningstar if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
display_messageD
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to display (max 20 chars) | |
| duration_ms | No | Duration in ms (default 2000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bank_nameD
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Bank number (uses current if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_controller_infoD
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_presetD
| Name | Required | Description | Default |
|---|---|---|---|
| preset | Yes | Preset: switch letter (A-H) or position (top-left, bottom-right) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_deviceD
| Name | Required | Description | Default |
|---|---|---|---|
| device_name | Yes | Device name to search (e.g., "Quad Cortex", "Timeline") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_bank_nameD
| Name | Required | Description | Default |
|---|---|---|---|
| bank | No | Bank number (uses current if omitted) | |
| name | Yes | New bank name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_preset_messageD
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No | Message slot (0-15, auto if omitted) | |
| type | Yes | Message type | |
| force | No | Overwrite existing slot | |
| action | Yes | Action: press, release, long_press, double_tap, etc. | |
| preset | Yes | Preset: switch letter (A-H) or position | |
| toggle | No | Toggle: pos_1, pos_2, both (default), shift | |
| channel | Yes | MIDI channel (0=ch1) | |
| cc_value | No | CC value (required if type=CC) | |
| cc_number | No | CC number (required if type=CC) | |
| pc_number | No | PC number (required if type=PC) | |
| description | No | Human-readable description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_preset_nameD
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name | |
| preset | Yes | Preset identifier | |
| name_type | No | Name type (default: short) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Tool has no description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Tool has no description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has no description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Tool has no description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tool has no description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
connect - First observed
display_message - First observed
get_bank_name - First observed
get_controller_info - First observed
get_preset - First observed
lookup_device - First observed
set_bank_name - First observed
set_preset_message - First observed
set_preset_name
TDQS
Scored across 9 tools
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.
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.
With 9 tools, the set covers core MIDI operations without being bloated. Each tool serves a clear function, appropriate for a dedicated MIDI server.
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
Related MCP Connectors
Interact with the Stitch API using natural language commands.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Streamline your Attio workflows using natural language to search, create, update, and organize com…
Manage projects, tasks, time tracking, and team collaboration through natural language.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Ableton Live to AI assistants through Model Context Protocol (MCP), enabling natural language control of music production tasks like track creation, MIDI editing, instrument loading, and playback control.15MIT
- AlicenseNot gradedqualityBmaintenanceEnables controlling a Roland RC-505mk2 loop station via natural language, allowing creation and upload of FX rack presets to the device over USB.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI-assisted MIDI music generation and composition through natural language, supporting style, tempo, key, and instrument selection.MIT
- AlicenseNot gradedqualityCmaintenanceEnables controlling a Teenage Engineering EP-133 K.O. II via natural language, converting plain language into MIDI commands for triggering pads, playing scales, and sequencing patterns.3MIT