MCP server for controlling QLC+ (Q Light Controller Plus) lighting control software via WebSocket and HTTP APIs, with audio analysis capabilities
Server has 24 tools with basic naming and descriptions, but significant quality gaps. Tool names follow verb_noun convention (qlc_get_*, qlc_set_*, qlc_list_*), which is good. However, descriptions are often generic (10-50 chars) and lack context about when to use each tool or what happens on error. Parameter descriptions exist but are minimal. No output schemas documented. Error handling is absent, tools return raw HTTP responses without recovery guidance. The qlc_generate_workspace tool has complex nested input but no output schema. Audio analysis tool (qlc_analyze_audio) lacks detail on return format. Overall, definitions are functional but would not pass production code review.
Analyze audio file to extract BPM and beat information
Control Animation (RGB Matrix) widget preset buttons
Control cue list playback (PLAY/NEXT/PREV)
Jump to a specific cue step in a cue list
Navigate multipage Frame widget pages
Generate a QLC+ workspace (.qxw) file with fixtures, scenes, and optional chasers. Creates the XML structure and saves to disk.
Get DMX channel values for a range in a universe
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. qlc_list_functions, qlc_get_universe_snapshot, qlc_analyze_audio lack return type specifications.
Descriptions are generic and under 50 characters for most tools (e.g., 'Get the total number of functions loaded in QLC+'). Lack context on when to use, what happens on error, or dependencies between tools.
No error handling or recovery guidance. Tools return raw HTTP responses without actionable error messages. If qlc_start_function fails (function not found, already running), LLM has no guidance on next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Get running status of a function (Running, Stopped, or Undefined)
Get the type of a specific function (Scene, Chaser, EFX, etc.)
Get the total number of functions loaded in QLC+
Get all 512 DMX channel values for a universe
Get the current status of a Virtual Console widget
Get sub-widgets (presets) of a Virtual Console widget
Get the type of a Virtual Console widget (Button, Slider, CueList, etc.)
Get the total number of Virtual Console widgets
Check if QLC+ is accessible via HTTP
Get list of all functions with their IDs and names
Get list of all Virtual Console widgets with their IDs and names
Set a single DMX channel value in Simple Desk (uses absolute addressing)
Set function status by ID (0=stop, 1=start)
Set multiple DMX channels at once in a universe
Set widget value (Buttons: 0/255, Sliders: 0-255, Audio Triggers: 0/255)
Start a function by name (searches by name, then starts)
Stop a function by name (searches by name, then stops)
qlc_generate_workspace has complex nested input schema (fixtures array with properties, scenes, chasers) but no output schema. Unclear what file path is returned or how to verify success.
qlc_analyze_audio description is vague ('Analyze audio file to extract BPM and beat information'). No detail on return format (JSON object? array? fields?), supported audio formats, or error cases (invalid file, unsupported codec).