fcp-midi
Allows composing music semantically by describing musical intent (notes, chords, dynamics, tempo changes) and rendering it into standard MIDI files.
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., "@fcp-midiCompose electronic music with sub-bass and arpeggios, save as track.mid"
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.
fcp-midi
MCP server for semantic MIDI composition.
What It Does
fcp-midi lets LLMs compose music by describing musical intent -- notes, chords, dynamics, tempo changes -- and renders it into standard MIDI files. Instead of manipulating raw bytes or MIDI events, the LLM works with operations like note Bass E2 at:1.1 dur:quarter vel:90 and crescendo @track:Lead vel:45-75 @range:3.1-6.4. Built on the FCP framework, powered by pretty-midi for serialization.
Related MCP server: Vibe Composer MIDI MCP
Quick Example
midi_session('new "Voltage Drop" tempo:140 key:E-minor')
midi([
'note Drums kick at:1.1 dur:eighth vel:100',
'note Bass E2 at:1.1 dur:quarter vel:90',
'chord Pad Em at:1.1 dur:whole vel:70',
'crescendo @track:Lead vel:45-75 @range:3.1-6.4',
'tempo 174 at:11.1',
])
midi_session('save as:./voltage_drop.mid')Available MCP Tools
Tool | Purpose |
| Batch mutations -- notes, chords, tracks, tempo, dynamics, copy/transpose |
| Inspect the composition -- map, tracks, events, piano-roll, instruments, find |
| Lifecycle -- new, open, save, checkpoint, undo, redo |
| Full reference card |
Hero Examples
Plumber's Journey -- Classic game theme faithfully recreated: 4 tracks, 288 notes, 16 seconds, 180 BPM.
Voltage Drop -- A drum-and-bass track with tempo acceleration (140 -> 155 -> 174 BPM), 5 tracks, breakbeats, sub-bass, arpeggios, and a signature DROP section. Also used in the FCP vs raw Python agent battle -- FCP produced 1,674 notes across 12 tracks in 87 seconds, compared to 694 notes from ~689 lines of hand-written Python.
See docs/examples/ for MIDI files and the full writeup.
Installation
Requires Python >= 3.11.
pip install fcp-midiMCP Client Configuration
{
"mcpServers": {
"midi": {
"command": "uv",
"args": ["run", "python", "-m", "fcp_midi"]
}
}
}Architecture
3-layer architecture:
MCP Server (Intent Layer)
Parses op strings, dispatches to verb handlers
|
Semantic Model
Tracks, notes, chords, dynamics, tempo maps, markers
In-memory composition graph with event sourcing
|
Serialization (pretty-midi)
Semantic model -> MIDI binary outputKey features:
Instrument library -- GM instruments by name (
acoustic-grand-piano,synth-bass-1,standard-kit)Soundfont support -- Load custom instrument banks
Beat addressing --
at:1.1(bar 1, beat 1),at:3.2.240(bar 3, beat 2, tick 240)Duration vocabulary --
whole,half,quarter,eighth,sixteenth,tripletDynamics --
crescendo,diminuendoacross rangesCopy/transpose -- Duplicate and shift musical phrases
Development
uv sync
uv run pytest # 658 tests
uv run pytest -m "not slow" # skip stress tests
uv run ruff check # linting
uv run pyright # type checkingLicense
MIT
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/os-tack/fcp-midi'
If you have feedback or need assistance with the MCP directory API, please join our Discord server