streamdeck-mcp
Provides integration to control Elgato Stream Deck devices, including profile management, button creation with high-quality icons (SVG rendered at 144×144), and live dashboard daemon for monitoring.
Provides integration to extract Figma file links for task context aggregation, enabling retrieval of design files associated with tasks.
Provides integration to extract GitHub pull request links for task context aggregation, enabling retrieval of PR details associated with tasks.
Provides integration to search Notion and extract document links for task context aggregation, allowing retrieval of relevant Notion pages.
Provides integration to read Slack threads and extract URLs for task context aggregation, enabling retrieval of Slack conversations linked to tasks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@streamdeck-mcpList my Stream Deck profiles"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
/taskskill 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: streamdeck-mcp
Install
npm install -g streamdeck-mcpOr clone and build:
git clone https://github.com/jxxh204/streamdeck-mcp.git
cd streamdeck-mcp
npm install
npm run buildConfigure
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 profilesCreate a 144x144 icon with the git-branch Lucide icon on a purple gradient,
text "main", and save it as branch-iconExtract the Cursor app icon and make it a Stream Deck buttonMCP tools
Tool | Description |
| List all profiles with pages and metadata |
| Read page details with button layout |
| Create or update pages with buttons |
| Generate 144×144 PNG icons (Lucide, app icons, gradients, badges, emoji) |
| Create shell script actions for buttons |
| Restart Stream Deck to apply changes |
| List built-in Lucide icon names |
| Create, rename, delete, or duplicate profiles |
| Delete a page from a profile |
| 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 3The 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), andElgato Stream Deck.appcontrol are all macOS-specificElgato 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 PRsKnown 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
/taskto 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 toolsstreamdeck_create_actionA
Create an executable shell script in ~/StreamDeckScripts and return a native Open action block.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable action name (used for filename and label). | |
| command | Yes | Shell command to execute on button press. | |
| filename | No | Override script filename. | |
| working_directory | No | cd into this directory before running. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It does disclose the main side effect (creating an executable script in a fixed directory) and the return value. It does not mention overwriting behavior, idempotency, permissions, or whether the StreamDeck app needs a restart or refresh.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It states the action and location before the return type, and every word contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting tool with no annotations and no output schema, it covers the most important facts: script location, executability, and return block type. But it leaves gaps around overwrite semantics and the exact structure of the returned Open action block, making it adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (name, command, filename, working_directory) is already documented in the schema. The description adds no extra parameter-level meaning, which is acceptable at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ('Create') with a clear resource ('executable shell script in ~/StreamDeckScripts') and a distinct return type ('native Open action block'). This differentiates it from sibling tools like streamdeck_create_icon and streamdeck_write_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent can infer this is for creating script-backed actions. However, there is no explicit when-to-use or when-not-to-use guidance, such as when to prefer streamdeck_create_icon for icon assets or streamdeck_manage_profile for profile-level operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_create_iconA
Generate a high-quality 144x144 PNG icon. Supports: text, Lucide icons, app icons, emoji, gradients, badges. Returns the file path.
| Name | Required | Description | Default |
|---|---|---|---|
| svg | No | Custom SVG markup (24x24 viewBox). | |
| text | No | Main text on the icon. | |
| badge | No | Badge text (top-right corner): '3', '!'. | |
| emoji | No | Emoji character: '🚀', '🔥'. | |
| lucide | No | Lucide icon name: 'git-branch', 'terminal', 'slack', 'database', etc. | |
| app_icon | No | macOS app name to extract icon: 'Cursor', 'Docker', 'Slack'. | |
| bg_color | No | Background: hex '#1a1a2e' or gradient 'linear-gradient(#FF6B6B, #C44569)'. | |
| filename | No | Output filename (without extension). | |
| subtitle | No | Subtitle text below the main content. | |
| font_size | No | Font size for main text. | |
| icon_size | No | Icon size in pixels (default 64). | |
| image_path | No | Path to a local image file. | |
| text_color | No | Text/icon color (hex). | |
| badge_color | No | Badge background color (hex). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the behavioral burden. It does disclose the output format, resolution, and the fact that the result is a file path, which is meaningful. However, it does not mention possible side effects like overwriting an existing file, where the file is written, or how conflicting content parameters are resolved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with high-value information front-loaded: purpose and output first, supported use cases and return value second. It contains no filler or repetition and every phrase carries meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the core deliverable and return value, which is important because there is no output schema. However, the schema has 14 optional parameters and no required ones, yet the description gives no guidance about defaults, required content selection, or what happens if multiple content sources are supplied. For such a flexible schema, the description is competent but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Every parameter already has a schema description (100% coverage), so the baseline is 3. The tool description adds an extra layer by grouping parameters into supported content modes (text, Lucide icons, app icons, emoji, gradients, badges), which is not obvious from the flat schema and helps an agent choose the intent. It still does not explain exclusivity or combination rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Generate'), a precise output ('144x144 PNG icon'), and a return value (file path). It also lists the supported content types, which clearly distinguishes it from sibling tools that read/write pages, profiles, or actions, or list icons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of supported content types (text, Lucide icons, app icons, emoji, gradients, badges) implies when this tool is appropriate, and sibling names confirm it is the icon-creation tool. However, there is no explicit when-not-to-use guidance, no alternatives for fetching or listing icons, and no mention of prerequisites such as needing an existing icon.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_delete_pageC
Delete a page from a Stream Deck profile.
| Name | Required | Description | Default |
|---|---|---|---|
| page_index | No | ||
| profile_id | No | ||
| directory_id | No | ||
| profile_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only states the action. It does not disclose irreversibility, side effects on the profile, behavior when page_index is invalid, or whether confirmation is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single, direct sentence with no redundant filler and identifies the core operation early. However, its brevity borders on underspecification, so not a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations, no output schema, zero parameter descriptions, and four optional identifier fields, this description is inadequate. It does not specify which parameter is required, what happens after deletion, or how the target page is resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter information. It does not explain how the four all-optional properties relate (page_index vs profile_id/profile_name/directory_id), which is critical for choosing the correct identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the action (delete) and the object (page from a Stream Deck profile), making it distinct from siblings that read or write pages. It does not add scope detail such as which profile or how the page is identified, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or exclusionary guidance is provided. An agent must infer from the verb 'Delete' that this is for removing pages, and there is no comparison with streamdeck_manage_profile or streamdeck_write_page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_list_iconsA
List all available built-in Lucide icon names for use with streamdeck_create_icon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description itself conveys that this is a read-only operation listing available names. 'List' implies no side effects; 'built-in' clarifies scope. It could mention return format or pagination, but for a zero-parameter list tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action ('List all...') and immediately explains the use context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description adequately explains what the agent will get: available built-in Lucide icon names. It could specify the return format more explicitly, but the tool's simplicity and clear purpose make it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema coverage, so there are no parameter semantics to clarify. The description correctly focuses on the purpose and result rather than parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('all available built-in Lucide icon names'), and explicitly ties it to streamdeck_create_icon. This clearly distinguishes it from sibling tools like read_profiles, write_page, or create_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states its purpose: to retrieve icon names for use with streamdeck_create_icon. It does not explicitly say when not to use it, but the context and sibling list make the appropriate use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_live_dashboardB
Start/stop a live dashboard that auto-updates Stream Deck buttons based on active Claude sessions, Git status, and running processes.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | start/stop/status | |
| sources | No | Data sources: claude, git, processes (default: all). | |
| git_repos | No | Git repo paths to monitor. | |
| page_name | No | Page name for live dashboard (default: Live). | |
| profile_name | Yes | Target Stream Deck profile name. | |
| refresh_interval | No | Refresh interval in seconds (default: 15). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It reveals only the auto-updating nature of the dashboard but says nothing about side effects: whether starting overwrites in-progress button layouts, whether stopping restors previous state, or what the status action reports. For a tool that toggles a live process, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core operation ('Start/stop') and then clarifies the resource and data sources. There is no filler or repetition; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, two required, no annotations, and no output schema, the one-sentence description is not enough for an agent to fully understand action semantics, persistence, error conditions, or expected return values. The omission of the 'status' action and any behavioral consequences makes the description incomplete for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents parameter meanings, defaults, and the action enum. The tool description adds some context by linking sources to 'Claude sessions, Git status, and running processes', but it does not clarify the 'status' action or add to the parameter semantics beyond that. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as managing a live dashboard that auto-updates Stream Deck buttons from live data sources, which is a distinct function from the sibling tools that handle static pages, profiles, and icons. The verb 'Start/stop' plus the resource 'live dashboard' makes the core purpose unambiguous. It does not mention the 'status' action, but the primary purpose is still fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for live auto-updating dashboards rather than static profile/page manipulation, and the sibling names make the distinction fairly evident. However, it provides no explicit guidance on when to choose this tool over alternatives, no conditions, and no exclusions, so usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_manage_profileB
Manage Stream Deck profiles: create, rename, delete, or duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform. | |
| new_name | No | New name (for create/rename/duplicate). | |
| profile_id | No | Target profile ID (for rename/delete/duplicate). | |
| device_model | No | Device model override (for create). | |
| profile_name | No | Target profile name (for rename/delete/duplicate). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description alone must disclose behavior. It only lists mutating actions and does not explain side effects such as whether deletion is permanent, what duplication copies, or whether renaming requires an existing ID. This is a significant gap for a CRUD tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the resource and the four actions without wasted words. The structure makes the tool's purpose instantly scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four operation modes, five parameters, and no annotations or output schema, the description is too thin. It does not clarify how action selects which parameters are required, nor the relationship between profile_id, profile_name, and new_name, leaving an agent to guess for reanme/delete/duplicate calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents each parameter's purpose (e.g., new_name for create/rename/duplicate). The description adds no extra meaning, but also does not need to because the schema is sufficient; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (Stream Deck profiles) and enumerates the supported operations: create, rename, delete, or duplicate. This clearly sets it apart from sibling tools like streamdeck_read_profiles or streamdeck_write_page. However, the verb 'manage' is generic and no explicit contrast with siblings is provided.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation list implies when to use the tool (whenever a profile needs to be created, reanmed, detected, or dupliced), but there is no explicit guidance about prerequisites or when to prefer sibling read/write tools. Usage must be inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_read_pageB
Read a profile page by profile name/ID and page index or directory ID. Returns buttons, layout, and raw manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| page_index | No | Zero-based page index. | |
| profile_id | No | Directory-based profile ID (.sdProfile folder name without suffix). | |
| directory_id | No | Page directory ID — safest target for updates. | |
| profile_name | No | Exact profile name as shown in the Elgato app. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It clearly indicates a read-only operation and names the returned data categories, but does not address error behavior, identifier resolution rules, or side effects beyond the obvious read nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and resource, then lists the key returned artifacts. Every word contributes value; there is no filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 optional parameters and no required fields, the description does not clarify which parameter combination is necessary (e.g., profile_name/profile_id plus page_index vs directory_id alone). It also provides only a high-level return summary and no output schema or further invocation guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter already has a meaningful description. The tool description adds only a high-level hint about identifier-based lookup ('by profile name/ID and page index or directory ID') without explaining parameter combinations or precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (read a profile page), a clear resource (profile page), and the expected outputs (buttons, layout, raw manifest). It is easily distinguishable from siblings like streamdeck_read_profiles and streamdeck_write_page even without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as streamdeck_read_profiles or streamdeck_write_page. There is no mention of prerequisites, exclusions, or scenarios favoring this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_read_profilesA
List all Stream Deck desktop profiles with pages, device info, and metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'List' and 'read_profiles' imply a read-only operation, and the description states what data is returned, but it does not explicitly confirm there are no side effects or describe any runtime behavior like pagination or live-device dependence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that immediately states the action, the resource, and the included information. There is no filler or repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter listing tool with no output schema, the description conveys the key return contents ('profiles with pages, device info, and metadata'). It does not detail the exact response format, but the tool's simplicity and clear scope make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema description coverage is 100%, so the schema leaves nothing ambiguous. The description does not need to add parameter-level detail, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies the exact resource ('all Stream Deck desktop profiles') with the fields included ('pages, device info, and metadata'). This clearly differentiates it from siblings like streamdeck_read_page, which targets a single page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List all' implies this is the right tool for retrieving an overview of profiles, but there is no explicit guidance on when to prefer this over streamdeck_read_page or streamdeck_manage_profile. For a zero-parameter read tool, the intended usage is reasonably implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_restart_appA
Restart the macOS Stream Deck desktop app to apply profile changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing behavior. The verb 'Restart' clearly communicates the primary effect, and the purpose is stated. However, it does not mention possible side effects (e.g., brief unavailability, unsaved state, or whether this works if the app is not running), which would be valuable for a tool with no annotation safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that leads with the action and follows with the purpose. Every word earns its place; there is no elaboration, repetition, or noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema tool, the description is nearly complete: it explains the action, the target platform, and the reason. The only omission is an explicit statement of behavioral impact (e.g., that the running app will be terminated and relaunched), which is slightly beyond the one-line summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is no parameter meaning to communicate. The baseline for zero parameters is 4, and the description appropriately avoids inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Restart') and resource ('the macOS Sream Deck desktop app') together with its purpose ('to apply profile changes'). This clearly distinguishes it from sibling tools that read, write, or manage profiles, pages, icons, and actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to apply profile changes' gives a clear context for when this tool should be invoked—after profile modifications that require an app restart. It does not explicitly name alternatives or exclusions, but the zero-parameter nature and sibling list make the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
streamdeck_write_pageC
Create a new page or replace/update an existing Stream Deck page.
| Name | Required | Description | Default |
|---|---|---|---|
| buttons | No | Buttons to write. | |
| page_name | No | Page name stored in manifest. | |
| create_new | No | Create a new page. | |
| page_index | No | ||
| profile_id | No | ||
| directory_id | No | ||
| make_current | No | Make this the active page. | |
| profile_name | No | ||
| clear_existing | No | Replace page contents (default: true). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It conveys mutation ('replace/update') but fails to disclose the destructive default clear_existing=true ('Replace page contents (default: true)') buried in the schema, nor what happens to the active page or existing buttons. For a write tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core verbs front-loaded ('Create a new page') and zero filler. Every word earns its place. It sacrifices substance for brevity, but on this dimension alone the structure is clean and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, one sentence is inadequate. It omits how to distinguish the new-page flow from the update flow, the destructive clear_existing default, parameter dependencies, and interaction with profile-management siblings. An agent cannot invoke this correctly without reverse-engineering the schema and guessing intent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 56%, so the description should compensate for the undocumented parameters (page_index, profile_id, directory_id, profile_name). The create-vs-update framing maps loosely to create_new and clear_existing, adding marginal meaning, but nothing is said about the four undocumented fields. Some value over the schema, but it doesn't fill the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs — 'Create', 'replace/update' — with a concrete resource, 'Stream Deck page'. It clearly identifies this as the page write operation, distinguishable from siblings like streamdeck_read_page and streamdeck_delete_page by verb+resource. It doesn't explicitly name sibling tools, so it stops just short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided. The description doesn't state when to choose this over streamdeck_manage_profile, streamdeck_create_action, or streamdeck_delete_page, nor does it mention prerequisites such as needing a profile_id or directory_id before writing. Usage context must be inferred entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.0- First observed
streamdeck_create_action - First observed
streamdeck_create_icon - First observed
streamdeck_delete_page - First observed
streamdeck_list_icons - First observed
streamdeck_live_dashboard - First observed
streamdeck_manage_profile - First observed
streamdeck_read_page - First observed
streamdeck_read_profiles - First observed
streamdeck_restart_app - First observed
streamdeck_write_page
TDQS
Scored across 10 tools
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.
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.
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.
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
Related MCP Connectors
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Agent personas for Claude. 16 tools, 13 personas, 3 workflows. Zero extra API cost. Free.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Related MCP Servers
- FlicenseBqualityDmaintenanceBridges Claude Desktop with Claude Code CLI to delegate complex coding tasks like creating React apps, building APIs, and debugging scripts while maintaining interaction through the Desktop interface.51-
- AlicenseAqualityBmaintenanceEnables AI to generate fully authored Elgato Stream Deck profiles with buttons, icons, colors, dials, and shell scripts from natural language prompts.742MIT
- FlicenseBqualityDmaintenanceExposes macOS system controls and Apple apps as structured tools for Claude, enabling control of volume, music, files, browser tabs, and more via natural language with configurable permissions and rate limiting.311-
- AlicenseAqualityDmaintenanceEnables natural language management of ClickUp workspaces, including task CRUD operations, task listing, and user profile retrieval via Claude Desktop.61MIT