MCP MIDI Server

by sandst1

17 stars
338 downloads
Not rated
GitHub

About

A MCP Server for sending MIDI sequences to any program that supports MIDI input

Details

Author
sandst1
GitHub stars
17
Downloads
338
Categories
Other

- Creates a virtual MIDI output port
- Sends MIDI Note On/Off messages
- Sends Control Change (CC) messages
- Sequences MIDI events with precise timing
- Works with any application that accepts MIDI input

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name MCP MIDI Server
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Clone the repository, create a Python virtual environment (Python 3.7+), install dependencies from requirements.txt, and create a .env file with a PORT setting (default 8123). Run python mcp_midi_server.py to start the server. In your MIDI application, select "MCP MIDI Out" as a MIDI input device. To connect from an MCP client like Cursor, add a configuration entry with "url": "http://localhost:<PORT>/sse".

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "mcp midi server": {
            "midi": {
                "url": "http://localhost:8123/sse"
            }
        }
    }
}

McpServers

{
    "midi": {
        "url": "http://localhost:8123/sse"
    }
}

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

1. Clone the repository:

   git clone <repository-url>
cd mcp-server-midi

2. Create a virtual env, activate it and install dependencies:

   python -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt

3. Create a .env file 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 Off
- start_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:

```python
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
]

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.