Skip to main content
Glama
voho

midi-composer-mcp

by voho

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MIDI_COMPOSER_OUTPUT_DIRNoOverride the default output directory for MIDI files (default is ./midi_output)./midi_output

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_scalesA

List every scale type in the database with intervals, degree labels and aliases.

Use a scale type's name (or any alias) with get_scale, match_scales, diatonic_chords and degrees_to_chords.

list_chordsA

List every chord type in the database with intervals, degree labels, symbol suffixes and aliases.

Use a chord type's name or symbol suffix with get_chord, and root+suffix symbols (e.g. 'Am', 'G7', 'F#m7b5') anywhere a chord symbol is accepted.

get_scaleA

Describe a scale type; with a root note, generate its notes.

Without root: intervals and degree labels only (e.g. major = 0 2 4 5 7 9 11). With root: the spelled notes, e.g. get_scale('major', 'C') -> C D E F G A B C. Give the root an octave for concrete pitches: get_scale('major', 'C5') -> C5 ... C6 plus MIDI numbers. The returned notes array feeds directly into match_chords, random_notes, notes_to_midi, etc.

get_chordA

Describe a chord type; with a root note, generate its notes.

Without root: intervals and degrees only (e.g. minor 7 = 0 3 7 10). With root: the spelled chord, e.g. get_chord('min', 'F') -> F Ab C. Give the root an octave for concrete pitches: get_chord('9', 'C4') -> C4 E4 G4 Bb4 D5 plus MIDI numbers. The returned notes array feeds directly into random_notes, notes_to_midi, match_scales, etc.

match_scalesA

Find scales that contain all of the given notes (octaves are ignored).

notes is a list like ['C', 'E', 'G'] or a string 'c e g' — any other tool's notes output works as-is. A match is 'exact' when the input uses every note of the scale; otherwise 'contains', with the scale's extra notes listed in added_notes. Exact and tighter (smaller) scales sort first.

match_chordsA

Find chords that match the given notes (octaves are ignored).

'exact' matches use exactly the input pitch classes; when the first input note is not the chord root the inversion is reported with slash notation (e.g. 'E G C' -> C/E, first inversion). 'partial' matches are chords that contain all input notes plus the listed missing_notes.

diatonic_chordsA

List the chord built on each degree of a scale (triads, or sevenths).

E.g. diatonic_chords('C', 'major') -> I=C, ii=Dm, iii=Em, IV=F, V=G, vi=Am, vii°=Bdim. Seven-note scales also get roman numerals, degree names and harmonic functions (tonic/subdominant/dominant) — the raw material for designing a progression yourself; then resolve it with degrees_to_chords. A root with an octave (e.g. 'C4') yields concrete pitches with MIDI numbers.

degrees_to_chordsA

Resolve a chord-degree sequence you chose into concrete chords of a scale.

degrees is your sequence as numbers or roman numerals: [1, 5, 6, 4], 'I V vi IV' or '1-5-6-4'. Returns the chord (symbol + notes) on each chosen degree, in order — e.g. in C major: C, G, Am, F. The symbols array feeds directly into chords_to_midi / song_to_midi. This tool only maps degrees to chords; choosing and ordering the degrees is up to you.

random_notesA

Pick count uniformly random notes from a pool of notes (a pure dice roll).

The pool is any notes array — typically from get_scale or get_chord, e.g. random notes from A minor pentatonic. Octaves in the pool are kept. Reproducible via seed; the seed used is always returned.

random_rhythmA

Roll a random rhythm pattern of length steps (a pure dice roll).

Returns a pattern string like 'O...Oo..' where O = strong beat, o = weak beat, . = pause. density is the chance a step holds a note; accent_probability the chance a note is strong. The pattern feeds the rhythm argument of notes_to_midi / song_to_midi; you can also edit it by hand first. Reproducible via seed; the seed used is always returned.

notes_to_midiA

Write a note sequence (scale, arpeggio or melody) to a MIDI file.

Plays the notes in order, one per step_beats. With rhythm (a pattern like 'O.oo.O..' from random_rhythm or hand-written), each step follows the pattern: O = accented note, o = soft note, . = pause (notes are consumed in order and wrap around if the pattern needs more; with sustain=true pauses extend the previous note instead). Octave-less notes are placed by octave_policy: 'nearest' for melodies, 'ascending' for scale runs. Returns the file path and base64 plus the exact note events written.

chords_to_midiA

Write a chord sequence to a MIDI file (block chords, or arpeggiated).

chords items are chord symbols ('C', 'Am7', 'F#dim', 'C/E', 'C4maj7' — e.g. the symbols output of degrees_to_chords) and/or explicit note arrays (['C','E','G'] or ['C4','E4','G4']). Octave-less chords are voiced upward from octave. Each chord lasts beats_per_chord. Returns the file path and base64 plus each chord's voiced notes and MIDI numbers.

song_to_midiA

Write a melody plus chord accompaniment into one two-track MIDI file.

Track 1 plays melody_notes (optionally shaped by melody_rhythm, same rules as notes_to_midi); track 2 plays chords (same formats as chords_to_midi), one every beats_per_chord. You decide which melody notes go over which chords — align them by length: a melody over 4 chords of 4 beats with 0.5-beat steps needs a 32-step rhythm/notes. General MIDI *_program numbers pick instruments (0 piano, 32 bass, 48 strings...).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/voho/midi-composer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server