streamdeck_create_icon
Generate PNG icons for Stream Deck buttons and touchstrip segments from Material Design Icons or text; batch mode creates entire decks in one call.
Instructions
Generate one or many PNG icons. Button icons are 72x72 px; touchstrip segment icons are 200x100 px (use shape='touchstrip'). For a single icon: pass 'icon' (a Material Design Icons name like 'mdi:cpu-64-bit') OR 'text' (mutually exclusive with 'icon' — titles go on streamdeck_write_page's 'title' field since Elgato overlays them on images). For a full deck (often 30+ icons): pass 'icons' as a list of spec dicts to generate them all in one call and avoid the round-trip timeouts serial calls hit. ~7400 MDI icons bundled offline; unknown names return close-match suggestions. Returns either a single {path, size, ...} dict or {"icons": [...]} when 'icons' is used (each list element is a per-icon result or an {"error"} entry for that spec).
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "streamdeck_create_icon"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Material Design Icons name, e.g. 'mdi:cpu-64-bit', 'mdi:volume-high', 'mdi:microphone'. The 'mdi:' prefix is optional. Aliases are honored. | |
| text | No | Text for a centered text-only icon. Mutually exclusive with 'icon'. For icon buttons that need a label, use the button's 'title' field on streamdeck_write_page. | |
| icons | No | Batch generation: a list of icon spec objects, each carrying the same fields as a single-icon call (icon/text/icon_color/bg_color/icon_scale/shape/transparent_bg/text_color/font_size/filename). When this field is present, all other single-icon fields at the top level are ignored and the response shape becomes {"icons": [per-spec result]}. Use this for 30+ icon decks to avoid per-call round-trip cost. Accepts either a JSON array or a JSON-encoded string containing an array — some MCP clients stringify nested arrays in transit. | |
| shape | No | Output canvas. 'button' (default) is 72x72 — keypad keys and encoder dial faces. 'touchstrip' is 200x100 — per-segment background above a Stream Deck + / + XL dial; pair with a button's strip_background_path on streamdeck_write_page. | |
| bg_color | No | ||
| filename | No | ||
| font_size | No | ||
| icon_color | No | Hex color for the icon glyph, e.g. '#00ff88'. Defaults to text_color. | |
| icon_scale | No | Fraction of the canvas the glyph bounding box fills (0.1-1.0). Defaults to 1.0 — edge-to-edge, matching how Elgato's own icons fill the touchstrip slot. Reduce to ~0.75-0.85 for keypad buttons that also have a bottom title so the glyph doesn't touch the label. | |
| text_color | No | ||
| transparent_bg | No | Generate an RGBA PNG with a transparent canvas instead of filling with bg_color. Use this for dial Icons that overlay a touchstrip background so the glyph composes naturally. Leave false (default) for keypad faces and touchstrip backgrounds. |