Model Context Protocol server for controlling Philips Hue lighting systems via the v2 API
This server has well-structured tool registration with consistent naming conventions (verb_noun pattern), but suffers from critical gaps in schema documentation, parameter descriptions, and output specification. All 20 tools follow a clear naming pattern (light_*, group_*, list_*, etc.), which is a strength. However, the source code provided does not show complete input schemas for parameters, we see parameter names and basic type hints in main.go, but crucial schema details are missing from the visible code. The descriptions are minimal (avg ~20-40 chars) and lack actionable guidance for LLM selection. Most critically: (1) output schemas are completely undocumented, we have no visibility into what these tools return, (2) error handling is invisible, (3) no descriptions explain WHEN to use each tool or WHY it differs from related tools, (4) parameter constraints (ranges, enums, formats) are absent from descriptions. The 'group_brightness' tool has a malformed input schema in the spec (group_id parameter is described as 'Brightness percentage (0-100)', copy-paste error). Tools like 'light_effect' and 'group_effect' lack enum constraints on the 'effect' parameter, inviting hallucination. The server appears to be a functional CLI wrapper around the Hue API, but the tool interface has not been optimized for LLM usability per the 54 patterns.
Activate a scene
Get bridge information and capabilities
Create a new scene from current light states
Get current state of a light
Set group brightness
Set group color
Set a dynamic effect on a group
Output schemas completely undocumented. No visible specification of what any tool returns (fields, types, structure). LLMs cannot plan downstream calls or extract required data without knowing return structure.
Parameter descriptions lack actionable constraints. Numeric parameters (brightness, duration) have no min/max ranges documented. Effect parameter accepts free-form strings with no enum constraint, inviting hallucinated effect names.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Turn a group of lights off
Turn a group of lights on
Make a light blink to identify it
Set light brightness
Set light color
Set a dynamic effect on a light
Turn a light off
Turn a light on
List all available groups/rooms
List all available lights
List all rooms with their lights
List all available scenes
List all zones
Malformed input schema in spec: group_brightness tool has parameter 'group_id' with description 'Brightness percentage (0-100)', clear copy-paste error. The 'brightness' parameter is missing from the spec.
Descriptions are extremely brief (15-40 chars avg). None explain WHEN to use the tool, what problem it solves, or how it differs from similar tools. E.g., 'Turn a light on' vs 'Turn a group of lights on', unclear when to call each. Descriptions under 50 chars provide insufficient context for LLM selection.
No error handling documentation visible. Tools provide no guidance on what can fail (invalid light_id, network timeout, bridge unreachable) or how to recover. LLMs will not know whether to retry, ask the user, or abandon the plan.
Vague parameter names and lack of type suffixes. 'light_id' is clear, but discovery tools like 'list_scenes', 'list_lights', 'list_groups' do not document what fields they return or whether responses support pagination/limits. No 'limit' or 'offset' parameters visible.
No tool composition guidance. Related tools (e.g., 'get_light_state' returns what? Does it include 'light_id' so it can be passed to 'light_brightness'?) cannot be chained without knowing output structure.
No distinction between destructive and read-only operations in tool definitions. 'light_on' and 'get_light_state' are both listed with 'Risk: WRITE' or 'READ_ONLY' in the spec summary, but tool annotations (readOnlyHint, destructiveHint) are not visible in source code. This blocks LLM ability to reason about side effects.
Overlapping tool names invite confusion. 'list_lights', 'list_groups', 'list_rooms', 'list_zones' are four different enumeration tools with no clear distinction in descriptions. When are rooms used vs groups? What is the relationship between zones and groups?