Server data from the Official MCP Registry
MCP server for Elgato Stream Deck control — set buttons, manage pages, wire actions
MCP server for Elgato Stream Deck control — set buttons, manage pages, wire actions
Valid MCP server (2 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry. Trust signals: trusted author (8/8 approved). 1 finding(s) downgraded by scanner intelligence.
4 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-verygoodplugins-streamdeck-mcp": {
"args": [
"streamdeck-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
AI-first MCP server for Elgato Stream Deck profile management. The default server writes directly to the Stream Deck desktop app's native profile files, and the original USB-direct server is still available as a legacy fallback.
The default packaged entrypoint is the profile writer. It edits ProfilesV3 when present, then falls back to ProfilesV2.
uvx streamdeck-mcp
{
"mcpServers": {
"streamdeck": {
"command": "uv",
"args": [
"--directory",
"/path/to/streamdeck-mcp",
"run",
"profile_server.py"
]
}
}
}
If you still want direct hardware control that bypasses the Elgato app entirely, keep using the legacy server:
{
"mcpServers": {
"streamdeck-usb": {
"command": "uv",
"args": [
"--directory",
"/path/to/streamdeck-mcp",
"run",
"server.py"
]
}
}
}
Or use the packaged legacy entrypoint:
uvx --from streamdeck-mcp streamdeck-mcp-usb
| Tool | What it does |
|---|---|
streamdeck_read_profiles | Lists desktop profiles and page directories from the active ProfilesV3 or ProfilesV2 store |
streamdeck_read_page | Reads a page manifest and returns simplified button details plus the raw manifest |
streamdeck_write_page | Creates a new page or rewrites an existing page manifest |
streamdeck_create_icon | Generates a PNG icon from a Material Design Icons name (e.g. mdi:cpu-64-bit) or from text (but not both). shape="button" (72x72, default) for keypad keys and encoder dial faces; shape="touchstrip" (200x100) for Stream Deck + / + XL dial segment backgrounds. ~7400 MDI icons are bundled offline; unknown names return close-match suggestions |
streamdeck_create_action | Creates an executable shell script in ~/StreamDeckScripts/ and returns an Open action block |
streamdeck_restart_app | Restarts the macOS Stream Deck desktop app after profile changes |
streamdeck_install_mcp_plugin | Installs the bundled streamdeck-mcp Stream Deck plugin into the user's Elgato Plugins directory. streamdeck_write_page auto-installs it when an encoder button needs it, so direct use is rarely necessary |
ProfilesV3 is preferred when it exists because page UUIDs map cleanly to directories.ProfilesV2 is still supported, but existing pages should be targeted by directory_id or page_index because Elgato stores opaque page directory names there.streamdeck_write_page can accept raw native action objects, or use convenience fields like path, action_type, plugin_uuid, and action_uuid.~/.streamdeck-mcp/generated-icons/.~/StreamDeckScripts/.~/Library/Application Support/com.elgato.StreamDeck/Plugins/ on macOS, %APPDATA%\Elgato\StreamDeck\Plugins\ on Windows) once installed. It's a minimal shell whose only job is to declare encoder support so per-instance Encoder.Icon / Encoder.background writes survive an Elgato app restart. streamdeck_write_page installs it automatically the first time an encoder button needs it.The Elgato desktop app keeps every profile in memory and rewrites the on-disk manifests from that snapshot when it quits, so any edit made while the app is running is wiped the next time it closes. The profile writer enforces a quit → write → relaunch cycle:
auto_quit_app: true to streamdeck_write_page to have it quit the app for you (AppleScript first, killall fallback).streamdeck_write_page calls as you need — the app stays quit across them.streamdeck_restart_app when you are done. The device re-reads the manifests on launch and your changes appear.streamdeck_write_page raises a StreamDeckAppRunningError when the app is running and auto_quit_app is not set, so you cannot accidentally write changes that will be silently discarded.
If your Elgato app is installed somewhere other than /Applications/Elgato Stream Deck.app, set STREAMDECK_APP_PATH to the bundle path.
streamdeck_create_action is the safest way to build shell-command buttons because it writes a standalone script and returns the native Open action block for it.The original USB-direct server is preserved for backwards compatibility. It still provides:
streamdeck_connectstreamdeck_infostreamdeck_set_buttonstreamdeck_set_buttonsstreamdeck_clear_buttonstreamdeck_get_buttonstreamdeck_clear_allstreamdeck_set_brightnessstreamdeck_create_pagestreamdeck_switch_pagestreamdeck_list_pagesstreamdeck_delete_pagestreamdeck_disconnectUse that mode only when you want the MCP server to own the hardware directly and the Elgato desktop app is not running.
uv venv
uv pip install -e ".[dev]"
uv run pytest tests/ -v
uv run ruff check .
To audit this repo against the shared Very Good Plugins MCP standards:
../mcp-ecosystem/scripts/audit-server.sh .
For issues, questions, or suggestions:
Built with 🧡 by Very Good Plugins
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.