MCP server for Home Assistant development tools providing file access, configuration management, entity state tracking, and system diagnostics
This Home Assistant MCP server demonstrates solid definition quality with 17 well-organized tools covering file access, entity states, services, and system configuration. All tools have explicit descriptions and input schemas with proper type definitions. However, there are notable gaps in output schema documentation, parameter constraints (enums, min/max), and error recovery guidance. Parameter descriptions are generally present but often lack format specifications and validation rules. The server follows a consistent verb_noun naming pattern (list_, read_, write_, get_, call_) which aids discoverability. Tool composition is appropriate, each tool has a single responsibility. The main weaknesses are: (1) output schemas are not documented in visible parameter descriptions or return type declarations; (2) several tools lack enum constraints where they should have them (e.g., log_source accepts only 'core' but this isn't enforced via an enum in the visible schema); (3) error handling descriptions are minimal, tools don't explain what to do if a call fails or how to recover; (4) some parameters with mutually exclusive relationships (save_local vs offset/limit in read_config_file) are documented but could be clearer. Despite these gaps, the 17 tools are well-named, logically grouped, and address a coherent problem domain (Home Assistant development). The definitions are production-adjacent but would benefit from stronger error guidance and output documentation before deployment to a large user base.
Get metadata for multiple configuration files in one request. Efficient for checking versions of multiple files.
Call a Home Assistant service
Check Home Assistant configuration validity
Get Home Assistant system configuration and setup
Get Home Assistant error log
Get metadata for a configuration file without reading content. Returns path, size, modification timestamp, and content hash for version checking.
Output schemas are not documented. Tools like get_states, get_config, list_events, and list_services lack documented return types. LLMs cannot plan downstream tool calls or extract relevant fields without knowing what data structure to expect.
Missing enum constraints where applicable. get_logs has 'log_source' that accepts only 'core', but this is not enforced via an enum in the visible schema. Similarly, 'level' parameter (DEBUG, INFO, WARNING, ERROR, CRITICAL) should be an enum. Enums are self-documenting and prevent hallucinated values.
Error handling guidance is absent. Tools do not describe what happens on failure, how to recover, or what the LLM should do next. For example, 'write_config_file' mentions YAML validation but does not explain the error message format or recovery path if validation fails.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Get historical state data for entities over a time period
Get Home Assistant logbook entries
Retrieve Home Assistant logs with optional filtering
Get entity states from Home Assistant. Returns all entities if no entity_id specified, or a specific entity's state.
List configuration files in Home Assistant instance
List Home Assistant events
List available Home Assistant services
Read configuration file content from Home Assistant with support for large files. For files >50KB, use save_local=true to save to local temp directory instead of returning content. For smaller files or viewing specific sections, use pagination (offset/limit) or return content directly. Note: save_local and pagination (offset/limit) are mutually exclusive.
Render a Home Assistant template
Validate a Home Assistant template for syntax errors
Write content to a configuration file on Home Assistant instance. Validates YAML syntax before writing and supports conflict detection.
Parameters lack explicit format and range specifications in descriptions. For example, 'start_time' in get_history says 'ISO 8601 format' but does not specify whether it accepts 'Z' suffix, milliseconds, or if there is a maximum age. 'lines' and 'limit' have min/max in schema but descriptions don't repeat constraints.
Mutually exclusive parameters (save_local vs offset/limit in read_config_file) are documented in individual parameter descriptions but lack a summary constraint stating they cannot be used together. LLMs may still attempt both.
No pagination guidance for list tools. list_config_files, list_events, and list_services do not have offset/limit/page parameters or document how to handle large result sets. Without pagination, large responses blow the context window.
Security: No explicit documentation of what permissions each tool requires (e.g., 'read:files', 'write:files', 'read:services', 'call:services'). Tools that call Home Assistant services (call_service) or write files should declare required scopes for least-privilege agent configuration.
call_service and render_template lack detail on what structure 'data' and 'template' should contain. 'data' is a free-form object, should it be a dict of key-value pairs? Template is a Jinja2 string, examples or constraints would help LLMs construct valid calls.