`read_only: true` in the config makes the whole thing observational, but the more useful knob is the tool filter: a blacklist takes glob patterns down to the action level, so `manage_*:delete` blocks deletion across every management tool while leaving creation and editing intact. That is the setting worth reaching for — full lifecycle control over automations is powerful precisely because it can also remove them. The consolidated tool count is a deliberate trade: fewer, broader tools to reduce an LLM's selection errors, at the cost of each one taking a mode argument.
A Home Assistant server written in Go that goes well past reading entity states: it creates, edits and deletes automations, scripts, scenes and helpers, queries the registries, validates configuration and reads the logbook. It uses WebSocket for most operations and the REST API for automation, script and scene changes.
- Entities — `query_entities` covers history, statistics and health, with `get_state` and `analyze_entity` alongside
- Registries — `get_registry` plus `manage_area`, `manage_label`, `manage_floor`, `manage_zone`, `manage_person`, `manage_tag`, `manage_entity` and `manage_device`
- `manage_automation` is one tool for the whole lifecycle — create, read, update, delete, toggle, coverage, and both JSON Patch and semantic patch
- `manage_helper` covers 26 helper types, with `helper_action` to drive them; `manage_script` and `manage_scene` do CRUD plus execute and activate
- Analysis — `get_entity_dependencies`, `analyze_target` and `find_references` answer what depends on what before you change it
- Services — `call_service` and `list_services`; history — `get_logbook` with entry correlation
- Dashboards and media — `manage_dashboard`, `browse_media`, `manage_camera`, `sign_media_path`
- System — `get_system_info`, `validate_config`, `manage_update`, `manage_blueprint`, `manage_system_log`, `manage_hacs`
- Seven guidance topics are readable as resources under `skill://ha-mcp/<slug>` — format selection, automation patterns, template resilience, helper selection, dashboard safety, entity renaming and debugging workflow
- After a create, update or delete, the server polls state to confirm the change actually landed
A Home Assistant instance and a long-lived access token from your profile page. Distribution is a single binary from the releases page, with RPM and DEB packages, a Docker image (`docker pull zorak1103/ha-mcp:latest`, port 8080, `HA_URL` set to your instance), or a source build needing Go 1.26 or later. Start it with `--ha-url` and `--ha-token`, or run `ha-mcp init` to write `config.yaml` and `.env` first. Reconnection is automatic with exponential backoff.
One command plus a key — docker pull zorak1103/ha-mcp:latest, then supply credentials
