Skip to main content

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:

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)

Source distribution for iflow-mcp_sandst1_mcp-server-midi 1.0.0
File Size Uploaded
iflow_mcp_sandst1_mcp_server_midi-1.0.0.tar.gz 4.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for iflow-mcp_sandst1_mcp-server-midi 1.0.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page