A reliability-first MCP server for Home Assistant implementing the LLM-as-untrusted-advisor architecture
Strong foundation with 15 well-named tools, clear descriptions (avg 120 chars), and complete input schemas with type definitions. All tools follow verb_noun naming (turn_on, get_entity_state, list_entities). Descriptions are action-oriented and explain WHAT and WHEN. However, output schemas are not documented in the visible code, responses are inferred from implementation. Parameter descriptions are present but some lack constraint details (e.g., entity_id format, time range limits). Error handling is present (validation, policy denial, circuit breaker) but recovery guidance is minimal. Security is strong (audit logging, policy evaluation, state capture) but not reflected in tool descriptions.
Activate a Home Assistant scene.
Analyse the current home state and report anomalies: unavailable entities, sensors at extreme values, devices that have not updated recently.
Get a summary of all devices and their states in a specific area.
Get the state history for an entity over a time range.
Get the current state and attributes of a single Home Assistant entity.
Get a high-level summary of the entire home state, grouped by domain.
Output schemas not documented. Tool descriptions do not specify what fields are returned or their types. LLMs cannot plan downstream calls or extract required data without knowing response structure.
Parameter constraints not fully specified. entity_id format (e.g., 'light.living_room'), time range limits for get_entity_history (ISO 8601 mentioned but no min/max), and numeric bounds for set_value are missing from descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Show the current policy tier assignments for all known entities.
Return the health status of ha-gatekeeper: circuit breaker state, Home Assistant connection, entity count, and error rates.
List Home Assistant entities with optional filtering by domain, area, or label.
Send a raw service call to Home Assistant.
Set a numeric value on an entity (brightness, temperature, position, etc.).
Toggle a light, switch, fan, media player, or other device.
Turn off a light, switch, fan, media player, or other device.
Turn on a light, switch, fan, media player, or other device.
Verify the integrity of the audit log hash chain. Each audit entry is cryptographically chained to the previous one. This tool checks that no entries have been tampered with.
Error recovery guidance minimal. Descriptions state what tools do but not what to do if they fail. E.g., 'Entity not found' should suggest 'Try list_entities() to find valid IDs' or 'Check entity_id format (domain.name)'.
Pagination not documented for list_entities. No mention of limit, offset, or total count in description. Large entity lists could exceed context window without pagination guidance.
send_command tool is generic and could accept arbitrary service_data. Description lacks guidance on valid domains, services, and parameter formats. Risk of LLM hallucinating invalid Home Assistant service calls.