Skip to main content
Glama

trigger_action

Execute REAPER DAW commands for transport control, project management, track editing, and view adjustments by specifying action names.

Instructions

Trigger a REAPER action by name.

Available actions:
- Transport: play, stop, pause, record, rewind, forward
- Project: save, save_as, new_project, undo, redo
- Tracks: insert_track, delete_track, duplicate_track
- View: zoom_fit, toggle_mixer

Args:
    action_name: Name of the action to trigger

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
action_nameYes

Implementation Reference

  • MCP tool handler for 'trigger_action', automatically registered via @mcp.tool(). Delegates to ReaperBridge.trigger_action_by_name.
    @mcp.tool()
    def trigger_action(ctx: Context, action_name: str) -> str:
        """
        Trigger a REAPER action by name.
        
        Available actions:
        - Transport: play, stop, pause, record, rewind, forward
        - Project: save, save_as, new_project, undo, redo
        - Tracks: insert_track, delete_track, duplicate_track
        - View: zoom_fit, toggle_mixer
        
        Args:
            action_name: Name of the action to trigger
        """
        bridge = get_bridge()
        if bridge.trigger_action_by_name(action_name):
            return f"Triggered action: {action_name}"
        return f"Error: Unknown action '{action_name}'"
  • Dictionary mapping action names (lowercased) to REAPER internal action IDs, used to resolve action_name to ID.
    REAPER_ACTIONS = {
        # Transport
        "play": 1007,
        "stop": 1016,
        "pause": 1008,
        "record": 1013,
        "rewind": 40042,
        "forward": 40043,
        "goto_start": 40042,
        "goto_end": 40043,
        
        # Tracks
        "insert_track": 40001,
        "insert_midi_track": 40001,  # Same as insert track
        "delete_track": 40005,
        "duplicate_track": 40062,
        
        # Items
        "insert_empty_item": 40142,
        "split_items": 40012,
        "delete_items": 40006,
        
        # View
        "zoom_fit": 40295,
        "toggle_mixer": 40078,
        
        # Project
        "save": 40026,
        "save_as": 40022,
        "new_project": 40023,
        "undo": 40029,
        "redo": 40030,
    }
  • Resolves action name to ID using REAPER_ACTIONS and calls trigger_action.
    def trigger_action_by_name(self, name: str) -> bool:
        """Trigger a REAPER action by name."""
        action_id = REAPER_ACTIONS.get(name.lower())
        if action_id:
            return self.trigger_action(action_id)
        logger.warning(f"Unknown action: {name}")
        return False
  • Sends OSC /action/{action_id} message to REAPER to execute the action.
    def trigger_action(self, action_id: int) -> bool:
        """Trigger a REAPER action by ID."""
        # OSC format: /action/_ID or /action/ID
        return self.send_osc(f"/action/{action_id}")

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/yura9011/scythe_mcp_reaper'

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