MCP Tools
The add-on ships a built-in MCP server that Claude Code launches automatically, giving it live read/write access to your Home Assistant instance. This is Claude’s only pair of hands — everything it does to your live home goes through these tools, which is what makes deny-lists and voice scoping enforceable in one place (how the layers fit). Verify every tool on your install with brain doctor.
Reading your home
| Tool | What it does |
|---|---|
get_entity_state | Current state + attributes of any entity |
get_all_states | All entities, filterable by domain and name (capped at 300) |
get_areas | Areas with their entity ids — resolves “the kitchen lights” |
get_registry | Registry listings: areas, floors, labels, devices, entities, integrations, users — with the ids Power Tools need. The safe replacement for reading .storage |
get_history | Recent state history (up to 7 days), min/max for numerics |
get_statistics | Long-term statistics — “how cold did it get last week?” |
get_weather_forecast | Daily/hourly forecast |
get_camera_snapshot | Sees a camera — returns the image so Claude can describe it |
get_logbook / get_error_log | Logbook entries; HA logs from the Supervisor journal |
get_automations / get_automation_trace | Automations with status; stored execution traces for debugging |
get_ha_config / get_services / get_supervisor_info | Config details, service catalog, system info |
get_device_registry | Per-domain entity count summary |
list_dashboards / get_dashboard | Enumerate dashboards; read one’s full config — the reading half of the fetch-modify-save flow behind Power Tools’ update_dashboard |
Acting on it
| Tool | What it does |
|---|---|
call_service | Any HA service. With return_response: true it routes over the WebSocket API and returns service response data — how Claude captures the area_id from brain.create_area or a todo list’s items |
get_service_details | Full field schema for a domain’s services |
control_light / control_climate / control_media_player / control_cover / control_fan / control_switch / control_lock / control_alarm / control_vacuum | Purpose-built device control for every major domain |
activate_scene / run_script / send_notification / fire_event / reload_config | Scenes, scripts (with variables), notifications, custom events, config reloads |
render_template | Render Jinja2 — test a template before it goes in an automation |
remember_fact | Store a durable household fact in the memory inbox |
Scoping & safety
- Every control tool funnels through the
call_servicechokepoint, so per-agent service deny-lists (e.g. nolock.unlockfor a bedroom satellite) cover all of them at once. Since 1.26.0 the chokepoint also resolveshomeassistant.*meta-calls to their targets’ domains —homeassistant.turn_onaimed at a cover is a cover call — refuses targets it can’t resolve (a whole area), and refusesfire_eventoutright on restricted channels. - Voice agents default to
mcp_onlytool access — HA tools yes, shell and file edits no. - Insight and study runs, which run unattended, are scoped from both ends: an explicit read-only allow-list of these tools and an explicit deny-list of every acting one. Both are needed because
--allowedToolsonly governs what runs without a prompt, and a headless run can’t be prompted — so an un-listed tool merely fails rather than being forbidden, which is not the same guarantee with a real house behind it.fire_eventandremember_factare why it’s an explicit list and not a name prefix: both are shaped like reads, and neither is one. The deny list is checked against the server’s own tool names in CI, so a newly added acting tool can’t quietly reach an unattended run. brain.*Power Tools add their own layer: admin gating and id validation inside the service, regardless of who calls.
Generated context
With auto_generate_context on (default), the add-on regenerates /config/CLAUDE.md at startup — a snapshot of your install (entities by domain, automations and their states, add-ons, integrations, directory guide) plus instructions for using the MCP tools and the Power Tools workflow. Claude reads it at the start of every session, which is why it never has to ask what a sensor.lumi_lumi_weather_temperature_3 is doing in your kitchen.