Orpheus
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_connection_statusA | Check whether REAPER is running and the Orpheus bridge loop is alive. Call this first. Round-trips a real ping through the bridge and returns REAPER's version + latency, or a clear "not listening" message (rather than a mystery hang) if the in-REAPER script isn't running. |
| get_project_infoA | Tempo, time signature, length, track count, and transport state. |
| list_tracksA | The typed track tree: name, vol/pan, mute/solo, role, FX-chain names, item count. |
| get_track_midiA | Read a take's MIDI notes (pitch, start/duration in BEATS, velocity) + CC. |
| get_fx_paramsA | Decode an FX chain's parameters BY NAME (e.g. compressor ratio), not as opaque 0–1. |
| set_tempoA | Set the project tempo in BPM (downstream: seconds_per_beat = 60 / bpm). |
| set_time_signatureC | Set the project time signature. |
| play_stop_recordA | Transport control: 'play' | 'stop' | 'record', via Main_OnCommand action IDs. |
| create_trackA | Insert a named track and return its stable GUID (one composite bridge call). |
| set_track_volume_panA | Set fader/pan. Accepts fuzzy values ('-6dB', '+3', '50%', 'L50', 'center'). |
| add_fx_by_nameA | Add an FX by fuzzy name, VALIDATED against the installed-plugin inventory. On a no-match returns a graceful "not found — here's how to install it" message rather than silently loading the wrong plugin (the bug all three live servers have). Orpheus never auto-installs plugins. |
| set_fx_paramB | Set an FX parameter with name→index resolution (so 'ratio' works, not just index 7). |
| insert_midi_notesA | Batch-write notes into a take, PPQ/tempo-correct, in ONE bridge round-trip. Notes are in beats (pitch, start_beat, duration_beats, velocity). Batched because per-note round-trips would hit the ~10 ops/sec file-IPC ceiling. Capped per call (see BridgeClient.MAX_NOTES_PER_CALL) so REAPER's audio thread never stalls. |
| create_midi_itemA | Create a MIDI item/take over a bar range; returns a stable take identity. |
| quantize_notesA | Quantize a take's notes to a grid (cleanup before/after analysis). |
| transpose_notesB | Transpose a take's notes — the APPLY verb for key/mode retargeting. |
| get_scale_notesC | MIDI notes for a key/mode so generated notes stay diatonic. |
| suggest_chord_progressionC | A genre-typical diatonic progression as Roman numerals + concrete MIDI. |
| constrain_to_keyC | Snap a proposed note set to the nearest in-key pitches before writing. |
| get_genre_profileA | A style's typical progressions / scales / BPM range / instruments / drum rhythms. The RECOMMEND-side lookup. |
| analyze_harmonyA | Detect key/scale/chords/Roman numerals/cadences. Exports the project's MIDI, filters drum tracks (Krumhansl detection is garbage on beats), and runs music21. Always returns a confidence + alternatives; on drum-only or non-chordal material it hedges rather than inventing harmony. |
| analyze_grooveA | Compute swing%% and tightness from raw MIDI PPQ onset deviation off the grid. No existing DAW-MCP server provides this — a genuine Orpheus differentiator. |
| analyze_audio_characterA | Render stems/master to WAV and compute the post-FX sonic fingerprint: 3-band energy, spectral centroid, LUFS, true peak, crest factor, stereo width. (Sharper with the optional [analysis] extra / librosa.) |
| build_project_specA | Fuse symbolic + audio analysis into one CompositionSpec(current) + a plain-English report. The contract handed to recommend_changes. |
| list_style_fingerprintsA | List cached target fingerprints (e.g. 'classical', 'hiphop', 'dominic-fike-sunburn'). Each is the analysis pipeline run over 3–5 per-era reference tracks. |
| explain_styleA | "Why does this sound like X?" — run feature thresholds over the current project and return human-readable reasons (each matched threshold = one reason). This is the v0.1 headline capability: understanding without transformation. |
| recommend_changesA | Diff the current project against a target fingerprint and return an EditPlan — a list of ProposedEdit{target, action, reason, params} across the v1 dimensions (tempo, key, harmony, instrumentation, mastering-match), each annotated with a human-readable reason. Read-only: surface these reasons to the user for approval, THEN call apply_changes. Includes honest caveats (detection confidence, taste calls). |
| apply_changesA | Execute an approved EditPlan: symbolic edits (transpose, rewrite progression MIDI, swap/add FX, retarget tempo, write grooved patterns), all wrapped in one Undo_BeginBlock/EndBlock so a single Ctrl+Z reverts everything. Pass back the exact plan the user approved — do not re-derive it here. |
| apply_master_matchC | The spectral half: render the master → Matchering against the fingerprint's reference WAV → bake the matched curve onto a master-bus ReaEQ + limiter. |
| render_projectC | Headless render to WAV/MP3 (RENDER_FILE + format/bounds + Main_OnCommand(41824)). |
| render_stemsC | Render per-track stems by sequential solo — feeds analyze_audio_character. |
| render_and_auditA | Render, then measure LUFS/spectrum in one call so the agent self-checks ('loud enough? too bright?') and iterates without a human ear. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
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/mal0ware/Orpheus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server