Skip to content

III. How It Works

rexbordz edited this page Apr 9, 2026 · 5 revisions

How It Works

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