Skip to content

III. How It Works

rexbordz edited this page Apr 10, 2026 · 5 revisions

This integration connects Streamer.bot to Stream Deck using Elgato’s MCP (Multi Control Protocol).

It allows Streamer.bot triggers to execute Stream Deck actions, including plugin actions, by resolving a provided input (actionInput) into a valid MCP action and executing it through Stream Deck’s local server.

Flow Overview

Streamer.bot Trigger
actionInput argument
→ Execute C# Method (ExecuteMcpAction)
→ MCP lookup
→ Stream Deck
→ Action executes

What’s Happening

  1. Streamer.bot fires a trigger
    This can be any trigger (chat, redeems, voice commands, etc.)

  2. actionInput is passed
    You define this in your Streamer.bot action using a Set Argument sub-action.

    This value can be:

    • A button Title
    • A button ID
  3. C# method is executed
    The ExecuteMcpAction method receives the actionInput value.

  4. Action is resolved
    The integration searches the available MCP actions (from Stream Deck) and tries to match:

    • Title first (if provided)
    • ID as a direct reference
  5. MCP request is sent
    Once resolved, a request is sent to Stream Deck via MCP.

  6. Stream Deck executes the action
    The corresponding button is triggered — including supported plugin actions.

Action Resolution Logic

The system determines which button to execute using the actionInput.

Resolution Flow

actionInput
↓
Match by Title OR ID
↓
Find MCP Action
↓
Execute via MCP

Where Actions Come From

All executable actions come from Stream Deck’s MCP Actions page.

These are:

  • Synced into Streamer.bot as Global Variables (prefixed with [SD])
  • Refreshed using the RefreshExecutableActions method

Plugin Support

Because MCP exposes executable actions:

  • Plugin actions are treated the same as regular buttons
  • This allows Streamer.bot to trigger functionality it does not natively support

Note

Behavior depends on how each plugin supports MCP.

Action List Sync

When you modify your Stream Deck buttons:

  • The MCP action list changes
  • Streamer.bot must refresh its cached list

This is done via:

RefreshExecutableActions

Without refreshing:

  • New buttons may not be available
  • Old mappings may become outdated

MCP Action Payload Example

When actions are retrieved from Stream Deck (via RefreshExecutableActions), they follow a structure like this:

{
  "id": "...",
  "title": "...",
  "action": {
    "name": "Play Audio",
    "pluginId": "com.elgato.streamdeck.soundboard"
  }
}

What This Represents

  • id → Unique identifier of the button (used for execution)
  • title → Display name of the button (used for matching)
  • action.name → The action type (e.g., Play Audio)
  • action.pluginId → Source plugin of the action

This is the data used to:

  • Populate Global Variables ([SD] entries)
  • Resolve actionInput into an executable action

Important Notes

  • Only actions visible in the MCP Actions page are executable
  • actionInput must match a valid Title or ID
  • Stream Deck must be running
  • MCP must be enabled
  • Some actions may depend on plugin or system state

Summary

This integration works by:

  • Using Streamer.bot for triggers and logic
  • Using Stream Deck (via MCP) as the execution layer
  • Resolving a simple input (actionInput) into a real button action

This creates a flexible bridge between both systems, including support for plugin-based workflows.

Need Help?

If something isn’t working as expected:

👉 Troubleshooting

Clone this wiki locally