-
Notifications
You must be signed in to change notification settings - Fork 0
III. 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.
Streamer.bot Trigger
→ actionInput argument
→ Execute C# Method (ExecuteMcpAction)
→ MCP lookup
→ Stream Deck
→ Action executes
-
Streamer.bot fires a trigger
This can be any trigger (chat, redeems, voice commands, etc.) -
actionInputis passed
You define this in your Streamer.bot action using aSet Argumentsub-action.This value can be:
- A button Title
- A button ID
-
C# method is executed
TheExecuteMcpActionmethod receives theactionInputvalue. -
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
-
MCP request is sent
Once resolved, a request is sent to Stream Deck via MCP. -
Stream Deck executes the action
The corresponding button is triggered — including supported plugin actions.
The system determines which button to execute using the actionInput.
actionInput
↓
Match by Title OR ID
↓
Find MCP Action
↓
Execute via MCP
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
RefreshExecutableActionsmethod
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.
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
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"
}
}
- 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
- Only actions visible in the MCP Actions page are executable
-
actionInputmust match a valid Title or ID - Stream Deck must be running
- MCP must be enabled
- Some actions may depend on plugin or system state
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.
If something isn’t working as expected: