Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DECK_MCP_LOGNoJSONL audit file, one line per tool call (default: warnings to stderr)
DECK_MCP_BINDNohost:port the HTTP service listens on (default 127.0.0.1:18802)127.0.0.1:18802
DECK_MCP_ICONS_DIRNowhere streamdeck_create_icon(s) writes PNGs (default ~/.streamdeck-mcp/generated-icons)~/.streamdeck-mcp/generated-icons
DECK_MCP_TOKEN_FILENobearer token file; re-read per request, so rotation needs no restart (default ./.token)./.token
DECK_MCP_SCRIPTS_DIRNowhere streamdeck_create_action writes scripts (default ~/StreamDeckScripts)~/StreamDeckScripts
DECK_MCP_PROFILES_DIRNooverride the profiles directory; auto (ProfilesV3, then ProfilesV2, under the Elgato app's application-support dir) by default

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
streamdeck_find_actionsA

Search configured buttons and dials across Stream Deck profiles/pages and return paste-ready native action objects for streamdeck_write_page. Prefer this FIRST when building layouts that reuse installed plugins (Home Assistant, Hue, OBS, Spotify, Wave Link, etc.): each hit includes a 'button' object ready for write_page (controller + key + action) so encoder/dial hits stay on the Encoder grid. You can also pass hit.action with controller=hit.controller yourself. Filters: query (substring), plugin_uuid, action_uuid, plugin_name, controller (keypad|encoder), optional profile scope. Returns a fresh ActionID per hit so multi-copy pastes are safe. For protected Elgato manifests that streamdeck_read_plugins cannot enumerate, this is the reliable path — configure once in the Stream Deck app, then find and reuse.

streamdeck_read_pluginsA

List installed Stream Deck plugins and their declared actions from the user's Elgato Plugins directory, including each action's UUID, Name, States, and — best-effort — the Settings fields its Property Inspector expects (parsed from the action's PI HTML/JS). Use this to synthesize a NEW third-party action when streamdeck_find_actions finds no configured instance. Prefer find_actions (or read_page.raw) when the user already configured the button/dial in the Stream Deck app — especially for first-party Elgato plugins (OBS, Hue, Spotify, Zoom, …) that ship ELGATO-protected/binary manifests and are reported with parse_status instead of action metadata. settings_fields are heuristic: a missing field is not proof it is unused, and a listed field is not guaranteed required.

streamdeck_read_profilesB

List Stream Deck desktop profiles from the active ProfilesV3 or ProfilesV2 directory.

streamdeck_read_pageA

Read a profile page by profile name or ID and page index or directory ID. Each button/dial includes a 'raw' native action object — copy it into streamdeck_write_page's button 'action' field to reuse configured plugin settings without guessing. For searching across many pages, prefer streamdeck_find_actions.

streamdeck_write_pageA

Create a new page or replace/update an existing Stream Deck desktop page manifest. Authoring preference order: (1) paste a native 'action' from streamdeck_find_actions or streamdeck_read_page's button.raw — best for installed plugins with private Settings; (2) synthesize via plugin_uuid + action_uuid + settings from streamdeck_read_plugins when no configured instance exists; (3) script-backed Open actions via path / streamdeck_create_action for custom automation; also supports page-nav (action_type) and the bundled MCP dial. Validation: unknown plugin_uuid/action_uuid raises a clear error listing what is installed; missing settings fields are reported non-fatally in the result's 'warnings'. IMPORTANT: the Elgato desktop app overwrites profile manifests from its in-memory state on quit, so writes made while the app is running are lost. This tool refuses to write when the app is running unless auto_quit_app=True is passed. Call streamdeck_restart_app once your edits are complete to make the changes visible on the device.

streamdeck_create_iconA

Generate one or many PNG icons. Button icons are 72x72 px; touchstrip segment icons are 200x100 px (use shape='touchstrip'). For a single icon: pass 'icon' (a Material Design Icons name like 'mdi:cpu-64-bit') OR 'text' (mutually exclusive with 'icon' — titles go on streamdeck_write_page's 'title' field since Elgato overlays them on images). For a full deck (often 30+ icons): pass 'icons' as a list of spec dicts to generate them all in one call and avoid the round-trip timeouts serial calls hit. ~7400 MDI icons bundled offline; unknown names return close-match suggestions. Returns either a single {path, size, ...} dict or {"icons": [...]} when 'icons' is used (each list element is a per-icon result or an {"error"} entry for that spec).

streamdeck_create_actionA

Create an executable shell script in ~/StreamDeckScripts and return a native Open action block for it.

streamdeck_restart_appA

Restart the macOS Stream Deck desktop app after profile changes.

streamdeck_install_mcp_pluginA

Install the bundled streamdeck-mcp Stream Deck plugin into the user's Elgato Plugins directory. The plugin is a minimal shell that declares encoder support so that per-instance touchstrip icons and backgrounds written by streamdeck_write_page survive an Elgato app restart. Idempotent — returns installed=false when already present unless force=true. streamdeck_write_page also auto-installs this plugin when an encoder button targets it, so most callers do not need to invoke this directly.

Prompts

Interactive templates invoked by user choice

NameDescription
design_streamdeck_deckPrime Claude with the streamdeck-designer authoring vocabulary: hardware inventory, palette/typography planning, integration discovery, icon generation, dial layouts, and guardrails. Invoke before authoring a themed or integrated Stream Deck layout — especially on clients that don't auto-load the bundled Claude Code skill. Optional 'intent' arg appends the user's specific ask.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clearly distinct primary purpose: profile/page reading, page writing, icon generation, action discovery/creation, plugin inspection/installation, and app restart. The potentially overlapping discovery tools (find_actions, read_plugins, read_page) are differentiated by whether they search configured instances, enumerate installed plugin declarations, or read a specific page, and the descriptions explicitly guide when to prefer each.

Naming Consistency5/5

All tool names use a consistent snake_case verb_noun pattern with a uniform streamdeck_ prefix. The verbs are predictable and readable, with no mixing of camelCase or vague generic names.

Tool Count5/5

Nine tools is well-scoped for a Stream Deck automation server, covering reading, writing, asset creation, action discovery, plugin setup, and app lifecycle. Each tool appears to earn its place without obvious redundancy.

Completeness4/5

The surface covers the main workflow: list/read profiles, read/write pages, find/create actions, generate icons, inspect plugins, and restart/install the helper plugin. Minor gaps remain around explicit page listing/deletion or profile lifecycle management, but core authoring and discovery workflows are supported.