MIDI Controller
STDIOFastMCP server allowing LLM to send MIDI sequences into software supporting MIDI input.
FastMCP server allowing LLM to send MIDI sequences into software supporting MIDI input.
A FastMCP Server which allows an LLM to send MIDI sequences into any software that supports MIDI input.
Clone the repository:
git clone <repository-url>
cd mcp-server-midi
Create a virtual env, activate it and install dependencies:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Create a .env
file with your configuration:
PORT=8123
Run the server:
python mcp_midi_server.py
The server creates a virtual MIDI port named "MCP MIDI Out" that can be used as a MIDI input device in other applications. This means you can:
Simply select "MCP MIDI Out" as a MIDI input device in your preferred MIDI-compatible application.
The server uses Server-Sent Events (SSE), this is how to config it in Cursor:
{
"mcpServers": {
"midi": {
"url": "http://localhost:8123/sse"
}
}
}
Sends a MIDI Note On message.
Parameters:
note
: MIDI note number (0-127)velocity
: Note velocity (0-127, default 127)channel
: MIDI channel (0-15, default 0)Sends a MIDI Note Off message.
Parameters:
note
: MIDI note number (0-127)velocity
: Note off velocity (0-127, default 64)channel
: MIDI channel (0-15, default 0)Sends a MIDI Control Change (CC) message.
Parameters:
controller
: CC controller number (0-127)value
: CC value (0-127)channel
: MIDI channel (0-15, default 0)Sends a sequence of MIDI Note On/Off messages with specified durations.
Parameters:
events
: A list of event dictionaries. Each dictionary must contain:
note
: MIDI note number (0-127)velocity
: Note velocity (0-127, default 127)channel
: MIDI channel (0-15, default 0)duration
: Time in seconds to hold the note before sending Note Offstart_time
: Time in seconds when to start the note, relative to sequence start (default 0)Using the API to play a C major chord:
events = [ {"note": 60, "velocity": 100, "duration": 1.0, "start_time": 0.0}, # C4 {"note": 64, "velocity": 100, "duration": 1.0, "start_time": 0.0}, # E4 {"note": 67, "velocity": 100, "duration": 1.0, "start_time": 0.0}, # G4 ] # Send to the MCP MIDI Server API
MIT