An open API service indexing awesome lists of open source software.

https://github.com/verygoodplugins/streamdeck-mcp

MCP server for Elgato Stream Deck control โ€” set buttons, manage pages, wire actions
https://github.com/verygoodplugins/streamdeck-mcp

elgato home-automation mcp mcp-server modelcontextprotocol streamdeck

Last synced: 5 days ago
JSON representation

MCP server for Elgato Stream Deck control โ€” set buttons, manage pages, wire actions

Awesome Lists containing this project

README

          

# ๐ŸŽ›๏ธ Stream Deck MCP ยท v0.1.0

> **Let AI design your Stream Deck setup** โ€” Describe what you want in plain English. Your AI builds it.

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

## The Problem

Stream Deck is powerful, but configuring it is tedious. Clicking through the GUI, finding icons, setting up multi-page workflows โ€” it takes forever.

## The Solution

Tell your AI what you want:

```
"Design a podcast studio layout with pages for recording, editing, and publishing.
Include buttons for mic mute, recording start/stop, sound effects, and scene switching."
```

Your AI designs the strategy, creates the pages, and configures every button. Done.

## โœจ What You Can Do

๐ŸŽ™๏ธ **"Set up my Stream Deck for podcasting"** โ€” AI designs a multi-page system
๐Ÿ  **"Create a home automation page"** โ€” Buttons for lights, scenes, climate
๐ŸŽฎ **"Build a gaming profile with Discord, OBS, and Spotify"** โ€” One prompt, full setup
๐Ÿ”„ **"Redesign my layout to be more intuitive"** โ€” AI understands workflow, suggests improvements

Works with: Stream Deck, Stream Deck Mini, Stream Deck XL, Stream Deck MK.2, Stream Deck +

## โš ๏ธ Important: Quit Elgato Software First

**This MCP server requires exclusive USB access.** You must quit the Elgato Stream Deck software before using it:

```bash
# macOS โ€” quit Elgato software
killall "Stream Deck" 2>/dev/null || true
```

The Stream Deck can only be controlled by one application at a time. While using this MCP server, the Elgato software cannot run (and vice versa).

---

## ๐Ÿƒ Quick Start โ€” 2 Minutes to Buttons

### 1๏ธโƒฃ Prerequisites

```bash
# macOS
brew install hidapi

# Linux (Debian/Ubuntu)
sudo apt install libhidapi-libusb0

# Linux udev rule (required for non-root access)
sudo tee /etc/udev/rules.d/10-streamdeck.rules << EOF
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0fd9", GROUP="users", MODE="0666"
EOF
sudo udevadm control --reload-rules
```

### 2๏ธโƒฃ Install

```bash
git clone https://github.com/verygoodplugins/streamdeck-mcp.git
cd streamdeck-mcp
uv venv && uv pip install -e .
```

### 3๏ธโƒฃ Add to Claude Desktop

Edit `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

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

### 4๏ธโƒฃ Use It

In Claude:
```
Connect to my Stream Deck
```

Then:
```
Set button 0 to "Lights" with a blue background
Set button 1 to "Music" with action "open -a Spotify"
Create a page called "gaming" and switch to it
```

That's it! ๐ŸŽ‰

## ๐Ÿ› ๏ธ Available Tools

| Tool | What it does |
|------|-------------|
| `streamdeck_connect` | Connect to first available deck |
| `streamdeck_info` | Get deck model, key count, current page |
| `streamdeck_set_button` | Set text, image, colors, and action |
| `streamdeck_clear_button` | Clear a single button |
| `streamdeck_set_brightness` | 0-100% brightness |
| `streamdeck_create_page` | Create a new button profile |
| `streamdeck_switch_page` | Switch active page |
| `streamdeck_list_pages` | List all pages |
| `streamdeck_delete_page` | Delete a page (except "main") |
| `streamdeck_disconnect` | Clean disconnect |

### Natural Language Examples

Just tell Claude what you want:

- "Connect to my Stream Deck and show me the layout"
- "Set button 0 to say 'Lights' with a blue background"
- "Make button 4 open Spotify when I press it"
- "Create a 'gaming' page with Discord, Steam, and OBS buttons"
- "Switch to the gaming page"
- "Set brightness to 50%"

## ๐Ÿ“ Button Layout

Buttons are numbered left-to-right, top-to-bottom:

**Stream Deck (15 keys, 5ร—3):**
```
[0] [1] [2] [3] [4]
[5] [6] [7] [8] [9]
[10] [11] [12] [13] [14]
```

**Stream Deck Mini (6 keys, 3ร—2):**
```
[0] [1] [2]
[3] [4] [5]
```

**Stream Deck XL (32 keys, 8ร—4):**
```
[0] [1] [2] [3] [4] [5] [6] [7]
[8] [9] [10] [11] [12] [13] [14] [15]
[16] [17] [18] [19] [20] [21] [22] [23]
[24] [25] [26] [27] [28] [29] [30] [31]
```

## ๐Ÿ  Home Assistant Integration

Wire buttons to your HA entities. Example prompt:

```
Set up my Stream Deck for home control:
- Button 0: "Office Lights" that toggles light.office_ceiling
- Button 1: "All Off" that runs a scene
- Button 4: Page switch to "media" page
```

The action field accepts any shell command โ€” use `curl` to hit HA webhooks or the HA CLI.

## ๐ŸŽจ Custom Icons

Drop PNG/JPG files anywhere and reference them:

```
Set button 5 with image ~/icons/spotify.png
```

Images auto-scale to button size (72ร—72 or 96ร—96 depending on deck model).

## ๐Ÿ“ State Storage

Configs persist at `~/.streamdeck-mcp/`:
- `pages.json` โ€” Button appearances per page
- `buttons.json` โ€” Button actions per page

## โš ๏ธ Troubleshooting

**"No Stream Deck found"**
- Check USB connection
- On Linux: Did you add the udev rule and reload?
- On macOS: Grant terminal USB access in System Preferences โ†’ Security & Privacy

**"streamdeck library not installed"**
```bash
uv pip install streamdeck pillow
```

**Buttons don't respond to presses**
- Physical button callbacks require the MCP server to stay running
- The server runs while Claude Desktop is open

**"Deck disconnected" errors**
- The server handles USB disconnections gracefully
- Just say "Connect to my Stream Deck" again to reconnect

## ๐Ÿงช Development

```bash
# Setup
uv venv && uv pip install -e ".[dev]"

# Run server
uv run server.py

# Run tests (no hardware required)
uv run pytest tests/ -v

# Lint
uv run ruff check .
```

## ๐Ÿ”ฎ Roadmap

- [ ] Home Assistant entity browser integration
- [ ] Icon generation from emoji
- [ ] Button press webhooks
- [ ] Multi-deck support

## License

MIT โ€” Because hardware control should be free.

---

*Built by [Jack Arturo](https://verygoodplugins.com/?utm_source=github) at Very Good Plugins* ๐Ÿงก

[![X (Twitter)](https://img.shields.io/badge/follow-@jjack__arturo-black?logo=x)](https://x.com/jjack_arturo)