MCP MIDI Server
A FastMCP Server which allows an LLM to send MIDI sequences into any software that supports MIDI input.
Features
- Creates a virtual MIDI output port
- Sends MIDI Note On/Off messages
- Sends Control Change (CC) messages
- Sequences MIDI events with precise timing
- Can be used as a MIDI input device in any application that supports MIDI
Requirements
- Python 3.7+
- rtmidi
- fastmcp
- python-dotenv
- asyncio
Installation
-
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
.envfile with your configuration:PORT=8123
Usage
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:
- Connect digital audio workstations (DAWs) like Ableton Live, Logic Pro, or FL Studio to receive MIDI from this server
- Use the server to control hardware synthesizers through your computer's MIDI interface
- Connect to any other software that accepts MIDI input (virtual instruments, lighting controllers, etc.)
Simply select "MCP MIDI Out" as a MIDI input device in your preferred MIDI-compatible application.
MCP Config
The server uses Server-Sent Events (SSE), this is how to config it in Cursor:
{
"mcpServers": {
"midi": {
"url": "http://localhost:8123/sse"
}
}
}
API Methods
Send Note On
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)
Send Note Off
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)
Send Control Change
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)
Send MIDI Sequence
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)
Example
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
License
MIT
Metadata
Release files for iflow-mcp_sandst1_mcp-server-midi 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_sandst1_mcp_server_midi-1.0.0.tar.gz | 4.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_sandst1_mcp_server_midi-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.6 kB
Release files / iflow_mcp_sandst1_mcp_server_midi-1.0.0.tar.gz
| Download URL | iflow_mcp_sandst1_mcp_server_midi-1.0.0.tar.gz |
|---|---|
| Size | 4.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
836ff776b834c0010b4f2c50cbabef6d9ea040503427f2901dd17acc16131609
|
|
BLAKE2b-256 checksum How to use checksums |
b1143ee38b869a239032c8dc0ef70589e8a48bf77ef3a91b091731b0b758f5db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_sandst1_mcp_server_midi-1.0.0-py3-none-any.whl
| Download URL | iflow_mcp_sandst1_mcp_server_midi-1.0.0-py3-none-any.whl |
|---|---|
| Size | 9.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0a00b1daaf96bbe78a66a1951a0c55512ec4fb637e3d098b0e30f5db1de00ca2
|
|
BLAKE2b-256 checksum How to use checksums |
a55b8a27256d6d1737dde3dbaab3d9cdc4d17b9ea3fac43c36f9fec73a777b83
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|