reaper-reapy-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_trackD | Note: Track indices in REAPER API are 0-based (first track = 0, second = 1, etc.) However, REAPER's visual interface displays tracks starting from 1. So track 0 in API = Track 1 in REAPER UI. |
| rename_trackA | Rename an existing track. Args: track_index: 0-based track index (0 = first track, 1 = second, etc.) Note: REAPER UI shows tracks starting from 1, but API uses 0-based indexing. API track 0 = UI Track 1, API track 1 = UI Track 2, etc. new_name: New name for the track |
| set_track_colorB | Set the color of a track. Args: track_index: 0-based track index (0 = first track, 1 = second track, etc.) color: Color value |
| get_track_colorA | Get the color of a track. Args: track_index: 0-based track index (0 = first track, 1 = second track, etc.) |
| get_track_countA | Get the number of tracks in the project. |
| get_track_listA | Get a list of all tracks in the project. Returns: Dict containing status and a list of tracks, each with: - index: Track index - name: Track name - color: Track color (if available) |
| set_tempoC | Set the project tempo. |
| get_tempoA | Get the current project tempo. |
| get_time_signatureA | Get the current time signature of the project. |
| set_project_time_signatureB | Set the default project time signature. Args: numerator: Time signature numerator (e.g., 4 in 4/4) denominator: Time signature denominator (e.g., 4 in 4/4) |
| get_project_time_signatureB | Get the default project time signature. |
| set_time_signatureA | Set time signature at specified position. Args: numerator: Time signature numerator (e.g., 4 in 4/4) denominator: Time signature denominator (e.g., 4 in 4/4) position: Position as "measure:beat,fraction" (optional if time is provided) where fraction is milliseconds (e.g., "1:1,500" = measure 1, beat 1, half beat) time: Position in seconds (optional if position is provided) |
| render_projectA | Render project to audio file. Args: output_file: Path to output audio file start_time: Start position in seconds (optional if start_measure is provided) end_time: End position in seconds (optional if end_measure is provided) start_measure: Start position as "measure:beat,fraction" (optional if start_time is provided) end_measure: End position as "measure:beat,fraction" (optional if end_time is provided) samplerate: Sample rate in Hz (default: 44100) channels: Number of channels (default: 2) file_format: Formats available on this machine "wave" "aiff" "iso " "ddp " "flac" "mp3l" "oggv" "OggS" "FFMP" "GIF " "LCF " "wvpk" |
| add_fxC | Add an FX to a track. |
| remove_fxB | Remove an FX from a track. |
| set_fx_paramC | Set an FX parameter value. |
| get_fx_paramC | Get an FX parameter value. |
| get_fx_param_listC | Get a list of all parameters for an FX. |
| get_fx_listB | Get a list of all FX on a track. |
| get_available_fx_listB | Get a list of all available FX plugins in Reaper. |
| toggle_fxB | Toggle or set the enable/disable state of an FX. |
| create_regionA | Create a region in the project. Args: name: Name of the region start_time: Start position in seconds (optional if start_measure is provided) end_time: End position in seconds (optional if end_measure is provided) start_measure: Start position as "measure:beat,fraction" (optional if start_time is provided) end_measure: End position as "measure:beat,fraction" (optional if end_time is provided) |
| delete_regionC | Delete a region from the project. |
| create_markerC | Create a marker in the project. |
| delete_markerC | Delete a marker from the project. |
| get_region_listA | Get a list of all regions in the project. Returns: Dict containing status and a list of regions, each with: - index: region index - start: region start position - end: region end position |
| get_master_trackB | Get information about the master track. |
| set_master_volumeB | Set the master track volume. |
| set_master_panC | Set the master track pan. |
| toggle_master_muteA | Toggle or set the master track mute state. |
| toggle_master_soloB | Toggle or set the master track solo state. |
| create_midi_itemA | Create an empty MIDI item on a track. Important: It is recommended to avoid overlapping MIDI items. Ensure to double-check before creating a new one. Returns both track_pos_idx and direct_item_id for flexible item referencing:
Both can be used interchangeably in subsequent operations like add_midi_note. Args: track_index: 0-based track index (0 = first track, 1 = second, etc.) Note: REAPER UI shows "Track 1, Track 2" but API uses 0, 1, etc. start_time: Start position in seconds (optional if start_measure is provided) start_measure: Start position as "measure:beat,fraction" (optional if start_time is provided) where fraction is milliseconds (e.g., "1:1,500" = measure 1, beat 1, half beat) length_time: Duration in seconds from start position (from start_time or start_measure)(optional if length_measure is provided). length_measure: Duration as "measure:beat,fraction" from start position (e.g., "2:1,000" = 2 measures from start_time or start_measure)(optional if length_time is provided). The range starts from 0:1,0. The value 0:4,0 equals three beats in a 4/4 time signature. Thus, if you want the length of all beats from one measure, then use 1:1,0; for two measures, use 2:1,0; and for three, use 3:1,0. |
| add_midi_noteA | Add a MIDI note to a MIDI item. Reaper format 2.1.00 should be converted to 2:1,000. Important: Please check MIDI item length in which you want to add the note. If the note extends beyond the item bounds, create another one or resize existing before note adding. Double-check the item's starting position before adding it. Notes positioned before the item's position won't be added. Item Identification - TWO ways to specify which item:
The system automatically detects which type you're using. Note about positioning:
Args: track_index: 0-based track index (0 = first track, 1 = second, etc.) Important: REAPER UI displays "Track 1" but API uses index 0. item: EITHER an integer track_pos_idx (0, 1, 2...) OR a string direct_item_id pitch: MIDI note pitch (0-127) start_time: ABSOLUTE start position in seconds in the project timeline (optional if start_measure is provided) start_measure: ABSOLUTE start position as "measure:beat,fraction" in the project timeline (optional if start_time is provided) length_time: Duration in seconds from note start (from start_time or start_measure)(optional if length_measure is provided) length_measure: Duration as "measure:beat,fraction" from note start (e.g., "0:2,000" = 2 beats from start_time or start_measure)(optional if length_time is provided). Also remember 2:0,0 is not end of 2 measure and 3:1,0 should be. velocity: Note velocity (0-127, default: 96) relative_start: If True, start_time/start_measure are interpreted as offsets from the item's start (i.e. relative to item.start). If False (default), they are treated as absolute project positions. |
| add_midi_notesA | Add multiple MIDI notes to a MIDI item in one operation. Important: Please check MIDI item length in which you want to add notes. If any note extends beyond the item bounds, create another one or resize existing before note adding. Item Identification - TWO ways to specify which item:
Recommendation: Use track_pos_idx for quick scripts, direct_item_id for reliability. Args: track_index: Index of the track track_pos_idx: EITHER integer track_pos_idx OR string direct_item_id notes: List of note definitions, each containing: - pitch: MIDI note pitch (0-127) - start_time: Start position in seconds (optional if start_measure provided) - start_measure: Start position as "measure:beat,fraction" (optional if start_time provided) - length_time: Duration in seconds (optional if length_measure provided) - length_measure: Duration as "measure:beat,fraction" (e.g., "0:2,000" = 2 beats) - velocity: Note velocity (0-127, optional, default: 96) - relative_start: Default mode for all notes. Per-note override supported via note['relative_start'] (bool). Example: notes = [ { "pitch": 60, "start_measure": "1:1,000", "length_measure": "0:2,000", "velocity": 100 }, { "pitch": 64, "start_time": 2.5, "length_time": 0.5 } ] |
| clear_midi_itemB | Clear all MIDI notes from a MIDI item. |
| get_midi_notesA | Get all MIDI notes from a MIDI item. By default, returns only visible notes (within item bounds). Invisible notes exist in the MIDI data but won't sound during playback. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item_id: EITHER integer track_pos_idx OR string direct_item_id include_invisible: If True, include notes outside item bounds (won't sound). Default: False |
| find_midi_notes_by_pitchA | Find all MIDI notes within a specific pitch range across the project. |
| get_selected_midi_itemA | Get the first selected MIDI item in the project. |
| insert_audio_itemA | Insert an audio file as a media item on a track. Args: track_index: Index of the track file_path: Path to the audio file start_time: Start position in seconds (optional if start_measure is provided) start_measure: Start position as "measure:beat,fraction" (optional if start_time is provided) |
| duplicate_itemA | Duplicate an existing item on a track. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item_id: EITHER integer track_pos_idx OR string direct_item_id new_time: New position in seconds (optional) new_measure: New position as "measure:beat,fraction" (optional) |
| get_item_propertiesB | Get properties of a media item. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item_id: EITHER integer track_pos_idx OR string direct_item_id |
| set_item_positionA | Set the position of a media item. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item_id: EITHER integer track_pos_idx OR string direct_item_id position_time: New position in seconds (optional if position_measure is provided) position_measure: New position as "measure:beat,fraction" (optional if position_time is provided) where fraction is milliseconds (e.g., "1:1,500" = measure 1, beat 1, half beat) |
| set_item_lengthA | Set the length of a media item. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item_id: EITHER integer track_pos_idx OR string direct_item_id length_time: Length in seconds from start of item (optional if length_measure is provided) length_measure: Length as "measure:beat,fraction" from start of item(optional if length_time is provided) |
| delete_itemA | Delete a media item from a track. Item Identification - Accepts BOTH types:
Args: track_index: Index of the track item: EITHER integer track_pos_idx OR string direct_item_id |
| get_items_in_time_rangeA | Get all items on a track within a time range. Returns items with BOTH identification methods for each item:
You can use either one in subsequent operations like add_midi_note. Args: track_index: 0-based track index (0 = first track, 1 = second, etc.) start_time: Start position in seconds (optional if start_measure is provided) end_time: End position in seconds (optional if end_measure is provided) start_measure: Start position as "measure:beat,fraction" (optional if start_time is provided) end_measure: End position as "measure:beat,fraction" (optional if end_time is provided) Returns: Each item includes: - track_pos_idx: Integer position index (0, 1, 2...) - direct_item_id: String internal ID ("MediaItem*...") - position: Item start time in seconds - length: Item duration in seconds |
| get_selected_itemsA | Get all selected media items in the project with their properties. Returns: Dict containing status and list of selected items with their properties: - track_index: Index of the track containing the item - item_index: Index of the item in its track - position: Start time in seconds - length: Length in seconds from the start of item - is_midi: Whether the item is a MIDI item - name: Item name if available |
| test_connectionA | Test connection to Reaper. |
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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/wegitor/reaper-reapy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server