Skip to main content

MCP server for Stream Deck profile writing with legacy USB control

Project description

Stream Deck MCP

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.

Installation

Default: Desktop Profile Writer

The default packaged entrypoint is the profile writer. It edits ProfilesV3 when present, then falls back to ProfilesV2.

uvx streamdeck-mcp

Local Repo Configuration

{
  "mcpServers": {
    "streamdeck": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/streamdeck-mcp",
        "run",
        "profile_server.py"
      ]
    }
  }
}

Legacy USB Server

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

Default Tools

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 72x72 PNG icon with text and colors
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

How the Profile Writer Works

  • 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.
  • Generated icons are stored in ~/.streamdeck-mcp/generated-icons/.
  • Generated shell scripts are stored in ~/StreamDeckScripts/.

Usage Notes

  • After writing profiles, the Elgato desktop app may need a restart to pick up the new manifests.
  • 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 profile writer does not require exclusive USB access.

Legacy USB Tools

The original USB-direct server is preserved for backwards compatibility. It still provides:

  • streamdeck_connect
  • streamdeck_info
  • streamdeck_set_button
  • streamdeck_set_buttons
  • streamdeck_clear_button
  • streamdeck_get_button
  • streamdeck_clear_all
  • streamdeck_set_brightness
  • streamdeck_create_page
  • streamdeck_switch_page
  • streamdeck_list_pages
  • streamdeck_delete_page
  • streamdeck_disconnect

Use that mode only when you want the MCP server to own the hardware directly and the Elgato desktop app is not running.

Development

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 .

Support

For issues, questions, or suggestions:


Built with 🧡 by Very Good Plugins

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamdeck_mcp-0.2.0.tar.gz (29.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamdeck_mcp-0.2.0-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file streamdeck_mcp-0.2.0.tar.gz.

File metadata

  • Download URL: streamdeck_mcp-0.2.0.tar.gz
  • Upload date:
  • Size: 29.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for streamdeck_mcp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 45bdb099b7738259fa40b453e550ea7a245aa8a5d03e1607607cfeb73c9cceff
MD5 fb433ad3d1136cc1bd335f0ec0222f47
BLAKE2b-256 a4402aa7f555b3fc0d1fc95e41faf24c95cd1078df0538d2f820679ce64392b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for streamdeck_mcp-0.2.0.tar.gz:

Publisher: release.yml on verygoodplugins/streamdeck-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file streamdeck_mcp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: streamdeck_mcp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for streamdeck_mcp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5710718d6ca2320aa6b0d1feaa7bee2982663abe9a5425fc5e5dac9e0f755d40
MD5 fc3136048cd458af92152710b733c5fa
BLAKE2b-256 fbd9fa15fc3d692fbb913f73cd719b596b9be86f4af8b919b80584c36b5c2f2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for streamdeck_mcp-0.2.0-py3-none-any.whl:

Publisher: release.yml on verygoodplugins/streamdeck-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page