MIDI MCP Server
Click on "Install 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., "@MIDI MCP ServerCreate a MIDI file with a C major chord progression"
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.
MIDI MCP Server
A Model Context Protocol (MCP) server for AI-driven MIDI composition. Generate MIDI files from structured JSON data, with chord name support, an interactive piano-roll preview UI, and multiple deployment modes.

Looking for the Agent Skills approach? It composes better songs with less context: tubone24/midi-agent-skill
Features
Two MCP tools:
create_midi(with interactive preview UI) andparse_chordRich pitch input: MIDI numbers, note name strings (
"C4"), pitch arrays, or chord names ("Cmaj7")Chord library: 25+ chord qualities — major, minor, dim, aug, 7th, maj7, m7, sus2, sus4, power, and more
Flexible durations: numeric beats, standard strings (
'4','8'), dotted ('d4'), triplet ('T8')Music theory resources: 7 built-in reference documents accessible as MCP resources
Three transport modes: stdio, HTTP, or Cloudflare Workers (remote)
MCP App UI: Piano-roll visualization and audio playback rendered directly in the conversation
Deployment Options
Option A — Remote (Cloudflare Workers)
A pre-deployed remote server is available:
https://midi-mcp-server.tubone24.workers.dev/mcpAdd it to any MCP client that supports Streamable HTTP (e.g., Claude.ai):
{
"mcpServers": {
"midi": {
"type": "http",
"url": "https://midi-mcp-server.tubone24.workers.dev/mcp"
}
}
}Option B — Local stdio (recommended for desktop clients)
Build and configure as a local stdio server:
npm install
npm run build{
"mcpServers": {
"musicComposer": {
"command": "node",
"args": ["/path/to/midi-mcp-server/build/index.js"]
}
}
}Option C — Local HTTP
Run as a local Streamable HTTP server:
node build/index.js --http
# or with a custom port:
node build/index.js --http --port=8080The server exposes:
POST /mcp— MCP Streamable HTTP endpointGET /health— Health check ({"status":"ok","version":"0.2.0"})
Tools
create_midi
Generate a MIDI file from structured composition data. Returns base64-encoded MIDI and renders an interactive piano-roll preview with audio playback in supported MCP clients (MCP App).

Input
Field | Type | Required | Description |
|
| ✓ | Title of the composition |
|
| ✓ | Composition data (see schema below) |
Output (structured content)
Field | Type | Description |
|
| Base64-encoded MIDI file data |
|
| Composition title |
|
| Tempo used |
|
| Number of tracks generated |
parse_chord
Parse a chord name and return its component MIDI pitches and note names. Useful for understanding voicings before composing.
Input
Field | Type | Required | Description |
|
| ✓ | Chord name, e.g. |
|
| — | Root octave (default: |
Output example
{
"chord": "Cmaj7",
"octave": 4,
"midiNumbers": [60, 64, 67, 71],
"noteNames": ["C4", "E4", "G4", "B4"]
}Composition Schema
{
"bpm": 120, // tempo (also accepted: "tempo")
"timeSignature": { "numerator": 4, "denominator": 4 }, // optional, default 4/4
"tracks": [
{
"name": "Piano", // optional
"instrument": 0, // GM program number 0–127 (optional)
"notes": [
{
"pitch": 60, // MIDI number, note name "C4", or array [60, 64, 67]
"chord": "Cmaj7", // OR use chord name (overrides pitch)
"beat": 1, // beat position (1-based); OR use startTime
"startTime": 0, // tick offset (alias: "time")
"duration": "4", // see Duration Reference below
"velocity": 100, // 0–127 (optional, default 100)
"channel": 0 // MIDI channel 0–15 (optional)
}
]
}
]
}Pitch Input Formats
Format | Example | Description |
MIDI number |
| Standard MIDI note number (0–127) |
Note name |
| Letter + optional accidental + octave |
Pitch array |
| Multiple pitches played simultaneously |
Chord field |
| Chord name expanded automatically |
Supported accidentals: # (sharp), b (flat). Examples: "F#5", "Bb3".
Duration Reference
Value | Description |
| Whole note |
| Half note |
| Quarter note |
| Eighth note |
| Sixteenth note |
| Thirty-second note |
| Dotted variants |
| Double-dotted quarter |
| Triplet variants |
| Beat-based: |
Supported Chord Qualities
Quality | Example | Description |
(none) / |
| Major |
|
| Minor |
|
| Diminished |
|
| Augmented |
|
| Dominant 7th |
|
| Major 7th |
|
| Minor 7th |
|
| Diminished 7th |
|
| Half-diminished |
|
| Augmented 7th |
|
| 6th |
|
| 9th variants |
|
| Add 9th |
|
| Extended |
|
| Suspended |
|
| 7th suspended |
|
| Power chord |
MCP Resources
The server exposes 7 music theory reference documents as MCP resources:
URI | Description |
| Intervals, chord types, diatonic chords, cadences, voice leading |
| Common progressions by mood/genre, substitutions, modulation |
| Species counterpoint rules, consonance/dissonance, motion types |
| Diatonic modes, minor scale variants, pentatonic/blues, genre guide |
| Instrument ranges, GM program numbers, texture types |
| Time signatures, MIDI duration reference, genre grooves |
| Forbidden parallels, voicing strategies, non-chord tones |
MCP clients that support resource reading can pass these to the AI as context, enabling theory-aware composition.
Example Composition
const composition = {
bpm: 120,
timeSignature: { numerator: 4, denominator: 4 },
tracks: [
{
name: "Piano",
instrument: 0,
notes: [
{ chord: "Cmaj7", beat: 1, duration: "2", velocity: 90 },
{ chord: "Am7", beat: 3, duration: "2", velocity: 90 },
{ chord: "Fmaj7", beat: 5, duration: "2", velocity: 90 },
{ chord: "G7", beat: 7, duration: "2", velocity: 90 }
]
},
{
name: "Melody",
instrument: 0,
notes: [
{ pitch: "E4", beat: 1, duration: "4", velocity: 100 },
{ pitch: "G4", beat: 2, duration: "4", velocity: 100 },
{ pitch: "A4", beat: 3, duration: "2", velocity: 110 }
]
}
]
};Demo
The prompt below generates an 8-bar melodic minor choral piece:
Create an 8-bar choral piece in a slightly minor, melodic scale.https://github.com/user-attachments/assets/e20ebef0-fdbf-4e72-910d-41b94183f9d9
Build & Development
npm install
# Full build (UI + server)
npm run build
# Build steps individually
npm run build:ui # Vite — builds the MCP App preview HTML
npm run build:server # tsc — compiles TypeScript server
# Deploy to Cloudflare Workers
npm run deploy
# Run tests
npm test
npm run test:coverageDependencies
Package | Purpose |
| MCP server implementation (stdio & HTTP transports) |
| MCP Apps extension — interactive UI in conversation |
| MIDI file generation |
| MIDI parsing (preview UI) |
| Audio playback in preview UI |
| Input schema validation |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/tubone24/midi-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server