Home Assistant

Home Assistant

integration

Direct access to your Home Assistant entities, states, and services

Tier-1 integration with Home Assistant. Lists entities, reads states, and calls services on your local Home Assistant instance via the REST API. Designed to be composed by household agents โ€” but also chattable directly for ad-hoc lookups and one-off automation triggers.

Source: Home Assistant

Tools (36)

List entities

List entities in the user's Home Assistant. Returns entity_id, domain, friendly_name, and state for each. A typical install has hundreds of entities, and busy installs run into the thousands โ€” always pass at least one of `domain`, `domains`, or `search` so you don't blow the context window. The response is capped at `limit` (default 200, max 1000); when truncated the result includes `total_matched` and `truncated=true` so you know to narrow.

Get state

Fetch the full current state and attributes for a single Home Assistant entity. Use after list_entities to drill into a specific device โ€” returns brightness, temperature, supported features, and any other attributes the entity exposes.

Get history

Fetch state-change history for a Home Assistant entity over a time range. Use this to answer questions like 'how many times did the leak sensor trigger this week' or 'when was the garage door last opened'. Returns timestamped state transitions, chronological. A noisy sensor over a long window can run to thousands of rows: the response is capped at `limit` (default 200, max 1000); when truncated, the most recent transitions are kept and `truncated` is set so you know to narrow the window. Use list_entities first to find the entity_id.

Get logbook

Fetch the Home Assistant logbook: a human-readable event log showing what happened and when. A busy install can produce 20k+ entries per day โ€” always narrow before fetching raw entries. Two-step pattern for broad lookbacks: (1) call with `summary=true` to get counts by entity and domain, identify which entities fired in the window of interest, then (2) re-call with `entity_ids=[...]` (or `domains=[...]`, plus `exclude_*` to skip noise) to fetch the actual entries. For narrow questions ('what happened around 7pm in the sauna') skip the summary and call directly with a tight time window plus entity_ids. Raw entries are capped at `limit` (default 100, max 1000); when truncated the most recent are kept and `truncated=true` is set.

Call service

Call a Home Assistant service. Use for any state-changing action: turn_on, turn_off, toggle, set_temperature, play_media, add_item, etc. Examples: domain='light' service='turn_on' service_data={'entity_id': 'light.kitchen', 'brightness_pct': 30}; domain='climate' service='set_temperature' service_data={'entity_id': 'climate.living_room', 'temperature': 68}. Confirm destructive or noticeable actions with the user first. Call get_agent_instructions before the first write in a conversation.

Get todo items

Fetch all items from a Home Assistant todo list. Returns each item's uid, summary, status (needs_action or completed), description, and due date. Use list_entities with domain='todo' first to discover available lists. When you plan to call update_todo_item or remove_todo_item afterwards, pass the uid back as the `item` argument โ€” it's more reliable than name matching, especially across renames or duplicate summaries.

Add todo item

Add a new item to a Home Assistant todo list. Supports setting `due_date` (YYYY-MM-DD), `due_datetime` (ISO 8601 with offset), and `description` at creation time โ€” all optional. Returns the newly created item including its uid so follow-up edits can target it unambiguously.

Update todo item

Update any field on an existing todo item: rename it, mark it completed/needs_action, set or change the due date, set or change the due datetime, or edit the description. All fields are updatable in a single call. Pass uid or current summary in `item` โ€” uid is preferred (get it from get_todo_items). Returns the item after the update so you can confirm the change applied. Example: {entity_id: 'todo.erik', item: '<uid>', due_datetime: '2026-05-01T09:00:00-04:00', description: 'bring receipts'}. To clear fields, pass them in the `clear` array: 'due' removes both date and datetime; 'description' removes the description.

Move todo item

Reorder a todo item within its list. Moves the target item to a new position while preserving its uid, summary, status, due date, and description โ€” no delete/re-add needed. Pass `after_uid` to place the item immediately after another item in the list; omit it to move the item to the top of the list. Example โ€” move to top: {entity_id: 'todo.erik', uid: '<uid>'}. Example โ€” place after another item: {entity_id: 'todo.erik', uid: '<uid>', after_uid: '<other-uid>'}. For a full-list reorder, call this repeatedly in the desired final order: first move the intended #1 to the top, then move the intended #2 with after_uid=<#1>, and so on. Some todo integrations don't support reordering (notably CalDAV inbox lists). If a call fails with 'not_supported', check the entity's `supported_features` attribute via get_state โ€” reorder requires the MOVE flag (bit 8).

Remove todo item

Remove an item from a Home Assistant todo list. Pass uid (preferred) or current summary in `item` โ€” get uids from get_todo_items. Permanent; confirm with the user first.

List helpers

List UI-editable Home Assistant helpers (input_boolean, input_number, input_text, input_select, input_datetime, input_button, counter, timer, schedule). Returns each helper's storage `id` โ€” required by update_helper and delete_helper โ€” plus its name and config. YAML-defined helpers don't appear here (they have no storage entry); they show up in list_entities but can't be edited. For template sensors use list_template_helpers instead.

Create helper

Create a Home Assistant helper: input_boolean (toggle), input_number (slider/box), input_text, input_select (dropdown), input_datetime, input_button, counter, timer, or schedule. Pass the domain, a human-readable name, and any domain-specific config in `options`. Config fields by domain โ€” input_boolean: icon, initial. input_number: min (required), max (required), step, initial, unit_of_measurement, mode ('slider' or 'box'), icon. input_text: min, max, initial, pattern, mode ('text' or 'password'), icon. input_select: options (required, list of strings), initial, icon. input_datetime: has_date, has_time (at least one must be true), icon. input_button: icon. counter: initial, step, minimum, maximum, restore, icon. timer: duration ('HH:MM:SS'), restore, icon. schedule: monday..sunday (each a list of {from, to} time blocks), icon. Returns the created helper's storage id and (best-effort) its new entity_id. For template sensors use create_template_helper. Call get_agent_instructions before the first write in a conversation.

Update helper

Update a UI-editable helper's config: rename it or change any domain-specific field (min/max, options list, step, duration, ...). Only the fields you pass change. Accepts the helper's entity_id (e.g. 'counter.hvac_trip_count') or its storage id from list_helpers. Config fields by domain โ€” input_boolean: icon, initial. input_number: min (required), max (required), step, initial, unit_of_measurement, mode ('slider' or 'box'), icon. input_text: min, max, initial, pattern, mode ('text' or 'password'), icon. input_select: options (required, list of strings), initial, icon. input_datetime: has_date, has_time (at least one must be true), icon. input_button: icon. counter: initial, step, minimum, maximum, restore, icon. timer: duration ('HH:MM:SS'), restore, icon. schedule: monday..sunday (each a list of {from, to} time blocks), icon. Note this edits the helper's configuration, not its current state โ€” to set a counter's value or toggle an input_boolean, use call_service instead. Call get_agent_instructions before the first write in a conversation.

Delete helper

Delete a UI-editable helper and its entity. Accepts the helper's entity_id or its storage id from list_helpers. Permanent and removes the entity's history association โ€” always confirm with the user first. Call get_agent_instructions first.

Create template helper

Create a template helper โ€” most commonly a template sensor or template binary_sensor whose state is computed from a Jinja2 template over other entities. Pass the template_type, a name, and `config` with the type's fields. For sensor: state (required, Jinja2 template string), unit_of_measurement, device_class, state_class. For binary_sensor: state (required, template that renders true/false), device_class. Example: {template_type: 'binary_sensor', name: 'HVAC Trip', config: {state: "{{ states('sensor.odu_status') == 'tripped' }}", device_class: 'problem'}}. To attach the new entity to an existing device, include `device_id` in config (find it with list_devices) โ€” template helpers are the only helper type Home Assistant can attach to a device. Returns the config entry id and (best-effort) the new entity_id. Template edits after creation aren't supported from the agent side: delete the entry via delete_template_helper and recreate it with the same name to keep the entity_id. Call get_agent_instructions before the first write in a conversation.

List template helpers

List template helpers (UI-created template sensors and friends). Returns each one's config entry_id โ€” required by delete_template_helper โ€” plus its title and state. Template entities defined in YAML don't appear here. The entities themselves are visible via list_entities.

Delete template helper

Delete a template helper by its config entry_id (from list_template_helpers). Removes the template entity. Permanent โ€” always confirm with the user first. Call get_agent_instructions first.

List areas

List the areas (rooms/zones) defined in Home Assistant. Returns each area's area_id, name, and floor_id. Use this to resolve an area name to the area_id that update_entity and list_devices work with.

List devices

List devices in Home Assistant's device registry: device_id, name, manufacturer, model, and area_id. A busy install has hundreds of devices โ€” pass `search` to narrow. Use this to find a device's id (for create_template_helper's device_id) or its area_id (to co-locate a helper with the device via update_entity). The response is capped at `limit` (default 100, max 500) with `truncated=true` when there's more.

Update entity

Update an entity's registry settings: assign it to an area, rename it, change its icon or entity_id, or hide/unhide it. Works on any entity, including every helper type. This is how you group a helper with a device: Home Assistant cannot attach storage helpers (counter, input_*, timer, schedule) to a device, so assign the helper to the device's area instead (find it with list_devices, then pass its area_id here) and tell the user that's the supported association. Template helpers CAN be attached to a device, but only at creation via create_template_helper's device_id. Call get_agent_instructions before the first write in a conversation.

List addons

List the add-ons installed on the user's Home Assistant (Zigbee2MQTT, Mosquitto, Node-RED, ...). Returns each add-on's slug โ€” needed by get_addon_info, get_addon_logs, and control_addon โ€” plus name, version, running state, and whether an update is available. Only works on Home Assistant OS and Supervised installs; Container and venv installs have no add-on system.

Get addon info

Fetch detail for a single Home Assistant add-on: version, running state, boot mode, auto-update setting, watchdog, and description. Use list_addons first to find the slug. Good first stop when an add-on is misbehaving โ€” check it's actually running before reading its logs.

Get addon logs

Read an add-on's log โ€” the same text as Settings โ†’ Add-ons โ†’ Logs in the HA UI. The primary debugging tool for add-on problems (Zigbee2MQTT adapter errors, MQTT auth failures, crash loops). Logs can run to thousands of lines: the newest `lines` are kept (default 100, max 1000) and `search` filters lines by substring before tailing. Logs may contain sensitive values (hostnames, usernames, serial ids) โ€” quote only what the problem needs. Use list_addons first to find the slug.

Get system logs

Read Home Assistant system logs. `source` picks the stream: 'core' is the main Home Assistant log (integration errors, startup problems), 'supervisor' is the add-on manager's own log (add-on install/update failures), and 'error_log' is core's warning/error file โ€” the only stream available on Container and venv installs. 'core' automatically falls back to 'error_log' when there is no Supervisor. Newest `lines` are kept (default 100, max 1000) and `search` filters before tailing. For an add-on's log use get_addon_logs instead.

Control addon

Start, stop, or restart a Home Assistant add-on. Restart is the usual fix after an add-on wedges or after a config change. Stopping an add-on takes down whatever it runs (a stopped Zigbee2MQTT means every Zigbee device goes dark) โ€” always confirm with the user before stopping or restarting, and call get_agent_instructions before the first write in a conversation. Use list_addons first to find the slug.

List automations

List every automation in Home Assistant with its entity_id, friendly name, current on/off state, unique config id, last trigger time, and whether it was defined in the UI (storage) or in YAML. Only storage-mode automations can be edited via save_automation or delete_automation.

Get automation

Fetch the full YAML-equivalent config for a single automation: alias, description, trigger, condition, action, mode. Use list_automations first to find the automation's entity_id or unique config id. Required before save_automation so you can send back the complete body with your edits applied.

Save automation

Create or update a storage-mode Home Assistant automation. The config payload replaces the stored body wholesale โ€” partial updates are not supported, so fetch get_automation first when editing, mutate the returned object, then pass it back here. For new automations, pick a stable config_id (snake_case, e.g. 'garage_door_night_alert') and provide the full config. After a successful save HA is reloaded so the change takes effect immediately. Always call get_agent_instructions before the first write in a conversation, and confirm destructive or noticeable changes with the user.

Delete automation

Delete a storage-mode Home Assistant automation. Always confirm with the user before calling โ€” this removes the automation permanently and cannot be undone from the agent side. Call get_agent_instructions first.

Reload automations

Reload Home Assistant's automations from disk so recent edits take effect without a full restart. save_automation and delete_automation reload automatically by default โ€” use this tool only after a batch of edits where you passed reload=false.

List dashboards

List user-created Lovelace dashboards โ€” the ones that show up in the HA sidebar. Returns each dashboard's id, url_path, title, icon, mode (storage or yaml), and whether it's pinned to the sidebar. The built-in default dashboard at /lovelace is not returned here; read it with get_dashboard passing url_path=None.

Get dashboard

Fetch a Lovelace dashboard's full configuration. Dashboards can be large (hundreds of cards); by default this returns just a summary of views and card counts. Pass full=true to get the complete config, required before calling save_dashboard so you can edit and send back the whole object. Pass url_path=None (the default) for the main dashboard, or a slug like 'lovelace-family' for a named dashboard.

Save dashboard

Overwrite a Lovelace dashboard's full config. Call get_dashboard with full=true first, mutate the returned config, then pass it back here. HA replaces the stored config wholesale โ€” there is no partial update. Only works on storage-mode dashboards. Always call get_agent_instructions first and confirm destructive edits with the user before saving.

Create dashboard

Create a new empty Lovelace dashboard. After this call succeeds you can populate it with save_dashboard, passing its url_path and a config object with 'views'. The url_path is the sidebar slug (e.g. 'lovelace-family'); 'title' is the human-readable name. Call get_agent_instructions first.

Update dashboard

Update a dashboard's metadata: title, icon, sidebar visibility, or admin-only restriction. This does NOT modify the views or cards โ€” use save_dashboard for that. Needs the dashboard_id from list_dashboards. Call get_agent_instructions first.

Delete dashboard

Delete a user-created Lovelace dashboard. The default dashboard cannot be deleted. Always confirm with the user first โ€” this removes every view and card and cannot be undone from the agent side. Call get_agent_instructions first.

Chat with Home Assistant

Open chat