MCPHub LabRegistrytubone24/midi-mcp-server
tubone24

tubone24/midi mcp server

Built by tubone24 33 stars

What is tubone24/midi mcp server?

MIDI MCP Server is a Model Context Protocol (MCP) server that enables AI models to generate MIDI files from text-based music data. This tool allows for programmatic creation of musical compositions th

How to use tubone24/midi mcp server?

1. Install a compatible MCP client (like Claude Desktop). 2. Open your configuration settings. 3. Add tubone24/midi mcp server using the following command: npx @modelcontextprotocol/tubone24-midi-mcp-server 4. Restart the client and verify the new tools are active.
🛡️ Scoped (Restricted)
npx @modelcontextprotocol/tubone24-midi-mcp-server --scope restricted
🔓 Unrestricted Access
npx @modelcontextprotocol/tubone24-midi-mcp-server

Key Features

Native MCP Protocol Support
Real-time Tool Activation & Execution
Verified Standard Implementation
Secure Resource & Context Handling

Optimized Use Cases

Extending AI models with custom local capabilities
Automating system workflows via natural language
Connecting external data sources to LLM context windows

tubone24/midi mcp server FAQ

Q

Is tubone24/midi mcp server safe?

Yes, tubone24/midi mcp server follows the standardized Model Context Protocol security patterns and only executes tools with explicit user-granted permissions.

Q

Is tubone24/midi mcp server up to date?

tubone24/midi mcp server is currently active in the registry with 33 stars on GitHub, indicating its reliability and community support.

Q

Are there any limits for tubone24/midi mcp server?

Usage limits depend on the specific implementation of the MCP server and your system resources. Refer to the official documentation below for technical details.

Official Documentation

View on GitHub

MseeP.ai Security Assessment Badge

Verified on MseeP

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.

demo

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) and parse_chord
  • Rich 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/mcp

Add 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=8080

The server exposes:

  • POST /mcp — MCP Streamable HTTP endpoint
  • GET /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).

mid

Input

FieldTypeRequiredDescription
titlestringTitle of the composition
compositionobjectComposition data (see schema below)

Output (structured content)

FieldTypeDescription
midiBase64stringBase64-encoded MIDI file data
titlestringComposition title
bpmnumberTempo used
trackCountnumberNumber 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

FieldTypeRequiredDescription
chordstringChord name, e.g. "Cmaj7", "F#m7", "G7sus4"
octavenumberRoot octave (default: 4)

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

FormatExampleDescription
MIDI number60Standard MIDI note number (0–127)
Note name"C4"Letter + optional accidental + octave
Pitch array[60, 64, 67]Multiple pitches played simultaneously
Chord fieldchord: "Cmaj7"Chord name expanded automatically

Supported accidentals: # (sharp), b (flat). Examples: "F#5", "Bb3".

Duration Reference

ValueDescription
'1'Whole note
'2'Half note
'4'Quarter note
'8'Eighth note
'16'Sixteenth note
'32'Thirty-second note
'd1' 'd2' 'd4' 'd8' 'd16'Dotted variants
'dd4'Double-dotted quarter
'T4' 'T8'Triplet variants
4 (number)Beat-based: 1=quarter, 2=half, 4=whole, 0.5=eighth

Supported Chord Qualities

QualityExampleDescription
(none) / majC, CmajMajor
m / minDmMinor
dimBdimDiminished
augEaugAugmented
7G7Dominant 7th
maj7 / M7Cmaj7Major 7th
m7 / min7Am7Minor 7th
dim7Bdim7Diminished 7th
m7b5Bm7b5Half-diminished
aug7Eaug7Augmented 7th
6 / m6C6, Am66th
9 / maj9 / m9G99th variants
add9Cadd9Add 9th
11 / 13C11Extended
sus2 / sus4Gsus4Suspended
7sus4 / 7sus2G7sus47th suspended
power / 5G5Power chord

MCP Resources

The server exposes 7 music theory reference documents as MCP resources:

URIDescription
music-theory://harmonyIntervals, chord types, diatonic chords, cadences, voice leading
music-theory://chord-progressionsCommon progressions by mood/genre, substitutions, modulation
music-theory://counterpointSpecies counterpoint rules, consonance/dissonance, motion types
music-theory://modes-scalesDiatonic modes, minor scale variants, pentatonic/blues, genre guide
music-theory://orchestrationInstrument ranges, GM program numbers, texture types
music-theory://rhythm-patternsTime signatures, MIDI duration reference, genre grooves
music-theory://voice-leadingForbidden 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

melodic_minor_chorus.mid


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:coverage

Dependencies

PackagePurpose
@modelcontextprotocol/sdkMCP server implementation (stdio & HTTP transports)
@modelcontextprotocol/ext-appsMCP Apps extension — interactive UI in conversation
midi-writer-jsMIDI file generation
@tonejs/midiMIDI parsing (preview UI)
soundfont-playerAudio playback in preview UI
zodInput schema validation

Global Ranking

3.3
Trust ScoreMCPHub Index

Based on codebase health & activity.

Manual Config

{ "mcpServers": { "tubone24-midi-mcp-server": { "command": "npx", "args": ["tubone24-midi-mcp-server"] } } }