An MCP server for controlling smart home devices including lights, fans, AC units, chimneys, and TVs via MQTT and ADB protocols
Server has 10 tools with basic schemas and descriptions, but significant quality gaps. Most tool descriptions are under 50 chars (well below the 194-char baseline for A+ tools). Parameter descriptions are minimal or absent. No output schemas documented. Error handling is generic ('Device not found') with no recovery guidance. The 'validate' tool has an empty schema and cryptic purpose. TV-specific tools (tv_volume_up, tv_volume_down, tv_mute, tv_open_app) lack parameter constraints (e.g., app enum for tv_open_app). No tool declares idempotency, destructiveness, or read-only hints. Room/device name resolution is undocumented in tool descriptions, forcing LLMs to guess. Overall, definitions are functional but far below production quality.
Get the state of all devices in the smart home.
Get the current state of a specific device.
Set a specific parameter for a device. Example: brightness for light, speed for fan, temperature for AC.
Turn OFF a device in a given room.
Turn ON a device in a given room.
Mute/unmute TV.
Open an app on TV (netflix, youtube, home).
validate tool has empty input schema {} and vague description 'Validation tool required by Puch for authentication.' LLM cannot infer purpose or when to call it.
All tool descriptions are 10 - 40 characters, far below the 194-char baseline for A+ tools. Descriptions lack WHAT the tool does, WHEN to use it, and any prerequisites. Example: 'Turn ON a device in a given room' omits whether this is idempotent, what happens if device is already on, or how room names are normalized.
tv_open_app accepts 'app' as a free-form string with no enum constraint. Description says 'netflix, youtube, home' but LLM may hallucinate 'hulu', 'prime', or other values. Should declare enum: ['netflix', 'youtube', 'home'].
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Decrease TV volume.
Increase TV volume.
Validation tool required by Puch for authentication.
No output schemas documented. Tools return JSON strings (e.g., get_device_state returns JSON) but LLM has no schema to parse expected fields. Should document: 'Returns JSON object with device state fields (e.g., {"status": "on", "brightness": 80})'.
Error messages are generic ('Device not found in room') with no recovery guidance. Should follow pattern: 'Device X not found in room Y. Available devices: [list]. Try get_all_states() to discover devices.'