Skip to main content
Glama

streamdeck-mcp

The Stream Deck MCP server that finally treats your developer workflow seriously.

Control your Elgato Stream Deck from Claude Code with high-quality icons, full profile management, and task context aggregation from Slack, Notion, and GitHub.

Why this over other Stream Deck MCPs?

  • Icons that don't look like programmer art — SVG rendered at 144×144 retina with Lucide icons, macOS app icon extraction, gradients, and badges. No more Pillow text on solid colors.

  • Task context aggregation — One command pulls your current task's Slack thread, Notion doc, GitHub PR, and Figma files into a single folder on your Stream Deck. No more hunting across five tools.

  • Folder-based navigation — Sub-pages you can actually create programmatically, with a working /task skill that handles the whole flow.

  • Claude Code native — Built as a first-class MCP server, not a port of someone's USB control library.

Related MCP server: ClickUp MCP Server

Install

npm install -g streamdeck-mcp

Or clone and build:

git clone https://github.com/jxxh204/streamdeck-mcp.git
cd streamdeck-mcp
npm install
npm run build

Configure

Add to your project's .mcp.json (or Claude Code settings):

{
  "mcpServers": {
    "streamdeck": {
      "command": "streamdeck-mcp"
    }
  }
}

If you installed from source, point to the built file instead:

{
  "mcpServers": {
    "streamdeck": {
      "command": "node",
      "args": ["/path/to/streamdeck-mcp/dist/index.js"]
    }
  }
}

Quick start

After restarting Claude Code, try these in a conversation:

List my Stream Deck profiles
Create a 144x144 icon with the git-branch Lucide icon on a purple gradient,
text "main", and save it as branch-icon
Extract the Cursor app icon and make it a Stream Deck button

MCP tools

Tool

Description

streamdeck_read_profiles

List all profiles with pages and metadata

streamdeck_read_page

Read page details with button layout

streamdeck_write_page

Create or update pages with buttons

streamdeck_create_icon

Generate 144×144 PNG icons (Lucide, app icons, gradients, badges, emoji)

streamdeck_create_action

Create shell script actions for buttons

streamdeck_restart_app

Restart Stream Deck to apply changes

streamdeck_list_icons

List built-in Lucide icon names

streamdeck_manage_profile

Create, rename, delete, or duplicate profiles

streamdeck_delete_page

Delete a page from a profile

streamdeck_live_dashboard

Start/stop a live dashboard daemon

Icon examples

// Lucide icon with gradient background
{ lucide: "terminal", text: "Claude",
  bg_color: "linear-gradient(#D97706, #B45309)" }

// macOS app icon extraction (uses sips under the hood)
{ app_icon: "Docker", subtitle: "Docker",
  bg_color: "linear-gradient(#2496ED, #1D7AC4)" }

// Notification badge
{ lucide: "eye", text: "Reviews",
  badge: "5", badge_color: "#9333EA" }

// Text with custom font size
{ text: "Push", bg_color: "#F05032", font_size: 24 }

// Emoji
{ emoji: "🚀", text: "Deploy",
  bg_color: "linear-gradient(#16A34A, #15803D)" }

/task skill — the killer feature

Claude Code slash command that aggregates your current task's context and sets up a Stream Deck folder.

Install

mkdir -p ~/.claude/commands
cp node_modules/streamdeck-mcp/commands/task.md ~/.claude/commands/

Or if installed from source:

cp commands/task.md ~/.claude/commands/

Usage

# Search Notion → extract PR/Slack/Figma links automatically
/task PROJ-123

# Read Slack thread → extract all URLs (Notion, GitHub, Figma, Sheets)
/task https://slack.com/archives/...

# Create a plain task folder
/task PR review cleanup

# Auto-detect from current Git branch
/task

# Clear slot 3
/task clear 3

The skill supports up to 7 task folders (Row 1 + Row 2) and row-based issue layout for folders containing multiple related issues.

Requirements

  • Node.js 18 or newer

  • macOS — the ProfilesV3 path, app icon extraction (sips), and Elgato Stream Deck.app control are all macOS-specific

  • Elgato Stream Deck with the desktop app installed

Windows and Linux support is planned but not yet implemented.

Architecture

src/
├── index.ts                  # MCP server entry
├── core/
│   ├── profile-manager.ts    # ProfilesV3 manifest read/write
│   └── icon-renderer.ts      # SVG → PNG pipeline (@resvg/resvg-js)
└── live/                     # Optional background daemon
    ├── standalone.ts
    └── sources/              # Claude Monitor, Git, processes, GitHub PRs

Known limitations

  • Folder creation — Stream Deck folders (child profiles) cannot be created purely from manifest files. The Elgato app validates folder references against its internal state. Workaround: create empty folders in the app UI once, then use /task to fill them.

  • Live dashboard restart flicker — Applying live updates requires restarting the Stream Deck app, which causes a brief blackout. A native Elgato SDK plugin (Phase 5) would eliminate this.

License

MIT © jxxh204

Available Tools

10 tools
streamdeck_create_actionA

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

Inputs: name (required), command (required), filename, working_directory.

streamdeck_create_iconA

Generate a high-quality 144x144 PNG icon. Supports: text, Lucide icons, app icons, emoji, gradients, badges. Returns the file path.

Inputs: svg, text, badge, emoji, +10 more.

streamdeck_delete_pageC

Delete a page from a Stream Deck profile.

Inputs: page_index, profile_id, directory_id, profile_name.

streamdeck_list_iconsA

List all available built-in Lucide icon names for use with streamdeck_create_icon.

Inputs: no named parameters.

streamdeck_live_dashboardB

Start/stop a live dashboard that auto-updates Stream Deck buttons based on active Claude sessions, Git status, and running processes.

Inputs: action (required), profile_name (required), sources, git_repos, +2 more.

streamdeck_manage_profileB

Manage Stream Deck profiles: create, rename, delete, or duplicate.

Inputs: action (required), new_name, profile_id, device_model, +1 more.

streamdeck_read_pageB

Read a profile page by profile name/ID and page index or directory ID. Returns buttons, layout, and raw manifest.

Inputs: page_index, profile_id, directory_id, profile_name.

streamdeck_read_profilesA

List all Stream Deck desktop profiles with pages, device info, and metadata.

Inputs: no named parameters.

streamdeck_restart_appA

Restart the macOS Stream Deck desktop app to apply profile changes.

Inputs: no named parameters.

streamdeck_write_pageC

Create a new page or replace/update an existing Stream Deck page.

Inputs: buttons, page_name, create_new, page_index, +5 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 10 tools

    Disambiguation5/5

    Each tool targets a clearly distinct resource or action: profiles, pages, icons, actions, app restart, and live dashboard are fully separated. Even related tools like streamdeck_read_profiles and streamdeck_read_page are unambiguous because one lists profiles while the other reads page content.

    Naming Consistency4/5

    All tools share the streamdeck_ prefix and mostly follow a verb_noun pattern. Minor deviations exist: streamdeck_manage_profile uses the generic verb 'manage', and streamdeck_live_dashboard omits a verb entirely, but the overall pattern remains predictable.

    Tool Count5/5

    Ten tools is well-scoped for a Stream Deck customization server. Each tool covers a meaningful part of the profile, page, icon, action, and app-management workflow without feeling bloated or redundant.

    Completeness4/5

    The tool set covers the core lifecycle: read/write/delete pages, manage profiles, create icons and actions, and restart the app. Some minor gaps exist, such as no listing/updating/deleting generated actions or icons, but these are not critical to the primary workflow.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers