Skip to main content
Glama
aderik

ha-automation-mcp

by aderik

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HA_URLYesBase URL, e.g. http://homeassistant.local:8123
HA_TOKENYesLong-lived access token of an administrator, used for every call

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_automationsA

List every automation known to Home Assistant.

Returns the entity_id, slug id, friendly name, current state, and last trigger timestamp for each automation (as reported by the state machine).

get_automationA

Get a single automation by id (e.g. 'solaredge_power_notify').

Returns live state + attributes. Use get_automation_yaml for the raw YAML config (triggers / conditions / actions).

get_automation_yamlA

Return raw YAML config from automations.yaml.

Pass automation_id for a single automation, or omit to get everything.

create_or_update_automationB

Create or update an automation (written to automations.yaml + reloaded).

Args: id: Stable slug (no 'automation.' prefix), e.g. 'living_room_lights_on'. name: Friendly name shown in the UI. trigger: List of HA trigger dicts. action: List of HA action dicts. condition: Optional list of HA condition dicts. description: Free-form description. mode: HA mode — 'single', 'restart', 'queued', or 'parallel'.

delete_automationB

Delete an automation by id (removes it from automations.yaml).

trigger_automationA

Manually fire an automation's actions, bypassing triggers + conditions.

Accepts either the slug ('my_auto') or the full entity_id ('automation.my_auto').

list_areasA

List every area (room) defined in Home Assistant.

list_entitiesB

List Home Assistant entities with optional filters.

Args: domain: Filter by domain, e.g. 'light', 'switch', 'sensor'. area: Filter by area name (case-insensitive), e.g. 'Woonkamer'. search: Substring match against entity_id or friendly name.

get_automation_api_logB

Return the Automation API log file (automation_api.log).

Contains a record of every create/update/delete/trigger the integration has performed via REST, WebSocket, or service calls.

get_managed_packageB

Return the full managed package file as JSON (helpers, templates, etc.).

overwrite_managed_packageA

Overwrite the entire managed package file (expert / bulk migration use).

Triggers homeassistant.reload_all afterwards. Prefer the targeted upsert_* tools for day-to-day changes.

upsert_helperA

Create or update a helper (reloads the domain automatically).

Args: domain: One of input_boolean / input_datetime / input_number / input_select / input_text / input_button. helper_id: Slug used as the helper id, e.g. 'moestuin_startdatum'. config: Full YAML config dict for the helper. Examples: input_boolean → {"name": "...", "initial": true, "icon": "mdi:bell"} input_datetime → {"name": "...", "has_date": true, "has_time": false} input_number → {"name": "...", "min": 0, "max": 100, "step": 1}

delete_helperC

Delete a helper from the managed package and reload the domain.

list_helpersC

List helpers of the given domain in the managed package.

get_helperC

Return the config of a single helper in the managed package.

upsert_template_entityB

Create or update a template entity (reloads the template domain).

Args: template_type: One of sensor / binary_sensor / switch / button / number / select. name: Display name; also the unique key used for upsert. config: Template config (e.g. {"state": "{{ ... }}", "unit_of_measurement": "d", "icon": "mdi:sprout", "unique_id": "...", ...}).

delete_template_entityB

Delete a template entity by type + name (reloads template domain).

list_template_entitiesC

List all template entities of the given type in the managed package.

get_template_entityC

Return the config of a single template entity by type + name.

upsert_history_stats_sensorA

Create or update a history_stats sensor entry.

A HA restart is required for it to take effect (response includes restart_required=true). Example config: {"entity_id": "binary_sensor.moestuin_regent", "state": "on", "type": "time", "end": "{{ now() }}", "duration": {"hours": 2}}

delete_history_stats_sensorB

Delete a history_stats sensor (HA restart required).

list_history_stats_sensorsB

List all history_stats sensors in the managed package.

get_history_stats_sensorC

Return the config of a single history_stats sensor.

upsert_notify_groupA

Create or update a notify platform:group entry.

After writing, HA must be restarted before notify.<name> becomes available (notify does not support hot reload).

Args: name: Group name; service becomes notify.<name>. services: List of notify services to aggregate, e.g. ["mobile_app_sm_s911b", "mobile_app_s25"]. extra: Optional extra top-level keys to include on the group entry.

delete_notify_groupB

Delete a notify group (HA restart required).

list_notify_groupsA

List all notify groups in the managed package.

get_notify_groupC

Return the config of a single notify group.

reload_configA

Reload HA config.

With no arguments → calls homeassistant.reload_all. With a list of domains → reloads each individually (input_boolean, input_datetime, template, automation, script, scene, ...).

restart_home_assistantA

Schedule a Home Assistant restart (fire-and-forget).

Use after creating/updating/deleting notify groups or history_stats sensors, which have no reload service.

list_dashboardsA

List every Lovelace dashboard (url_path, title, mode, icon).

create_dashboardA

Create a new storage-mode Lovelace dashboard.

The dashboard is immediately visible under Settings → Dashboards and at /lovelace-<url_path>. It starts empty; add views and cards separately.

Args: url_path: URL slug — e.g. 'moestuin' yields /lovelace-moestuin. title: Sidebar title. icon: MDI icon, e.g. 'mdi:sprout'. show_in_sidebar: Whether to show in the left sidebar. require_admin: Admin‑only access.

update_dashboard_metadataB

Update dashboard metadata (title, icon, show_in_sidebar, require_admin).

Cannot modify the default/Overview dashboard's metadata.

delete_dashboardA

Delete a custom dashboard. The default Overview cannot be deleted.

get_dashboard_configB

Return the full Lovelace config of a dashboard.

Structure: {"title": ..., "views": [{"title": ..., "cards": [...]}, ...]}.

set_dashboard_configA

Overwrite the entire Lovelace config of a dashboard.

config must contain at least {"views": [...]}.

append_dashboard_viewC

Append a view to a dashboard.

A view looks like:: {"title": "Moestuin", "path": "moestuin", "icon": "mdi:sprout", "cards": [ ... ]}

replace_dashboard_viewC

Replace the view at the given index.

delete_dashboard_viewC

Delete the view at the given index.

append_dashboard_cardC

Append a card to the given view.

card is any valid Lovelace card config (e.g. {"type": "entities", ...}).

replace_dashboard_cardC

Replace a specific card within a view.

delete_dashboard_cardC

Delete a specific card from a view.

list_registry_entitiesB

List entries from HA's entity_registry with full details.

Returns each entity with unique_id, platform (integration name), device_id, area_id, name (user-set), original_name (from integration), disabled_by, hidden_by, config_entry_id. Use this to find duplicates, orphans, or filter by integration.

get_registry_entityC

Get full registry details for a single entity_id.

update_registry_entityB

Mutate a registry entity. Supported keys in changes: name, icon, area_id, new_entity_id (rename), disabled_by (bool), hidden_by (bool).

delete_registry_entityA

Remove an entity from the registry. Active integrations may re-add it on reload — use delete_device or remove_config_entry instead if the entity belongs to a still-active integration.

list_devicesB

List devices from HA's device_registry.

Each item has id, name, name_by_user, manufacturer, model, area_id, config_entries (list of entry ids), identifiers, connections, disabled_by. Filter by integration to scope (e.g. 'tuya' to find all Tuya devices).

get_deviceC

Get full registry details for a single device id.

update_deviceC

Mutate a device. Supported keys: name_by_user, area_id, disabled_by (bool).

delete_deviceA

Remove a device from the registry. Cascades to all entities of that device. The owning integration may re-add it on next discovery.

list_config_entriesA

List installed integrations (config entries).

Each item has entry_id, domain, title, state, disabled_by, supports_unload, supports_remove_device. Filter by domain (integration name like 'tuya' or 'wiz').

get_config_entryC

Get full details for a single config entry.

reload_config_entryB

Reload an integration without restarting HA.

disable_config_entryA

Soft-disable an integration (its devices/entities go unavailable but registry entries remain).

enable_config_entryC

Re-enable a previously disabled integration.

remove_config_entryA

Fully remove an integration. Cascades: all its devices and entities are removed from the registries. Irreversible — to restore, re-add the integration via Settings → Devices & services.

get_historyA

Fetch state-change history for one or more entities from HA's recorder.

Default window: last 24 hours. Use this to diagnose flapping sensors (count of changes) or to inspect when an automation last ran.

Args: entity_id: A single entity id, or comma-separated list for multiple (e.g. 'sensor.x,sensor.y'). hours: Window length in hours, ending at end (default now). days: Window length in days. Ignored if hours is set. start: ISO-format start datetime (e.g. '2026-05-22T00:00:00+00:00'). Overrides hours/days. end: ISO-format end datetime (default: now). significant: If true, use get_significant_states (HA's filtered view). Default false = every recorded state change. minimal: Smaller response shape (state + last_changed only). Default true. no_attributes: Strip attributes from the response. Default true.

Returns: {start, end, counts: {entity_id: n}, items: {entity_id: [...]}}. counts is the quickest way to see how often a sensor flipped.

get_stateC

Get the current state of any HA entity via the native REST API.

call_serviceC

Call any Home Assistant service via the native REST API.

Example: domain='light', service='turn_on', data={'entity_id': 'light.kitchen', 'brightness': 200}.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.1/5.0

Scored across 58 tools

Disambiguation4/5

Tools are largely grouped into clear CRUD families by resource (automations, helpers, dashboards, registry, etc.), but some overlaps exist: list_entities vs list_registry_entities, get_state vs get_history, and multiple upsert_* families can be confused without consulting descriptions. Descriptions help distinguish intent, so an agent can usually pick correctly.

Naming Consistency4/5

Names are predominantly snake_case with a verb_noun pattern (list_*, get_*, delete_*, etc.), making the set readable. However, there is an inconsistent mix of create_or_update_automation versus the upsert_* convention used for other resources, plus varied verbs like set, append, replace, and overwrite.

Tool Count2/5

With 58 tools, the server far exceeds the recommended 3–15 range and spans many disparate Home Assistant admin domains beyond automations (dashboards, registry, devices, config entries). The large number of CRUD groups multiplies the surface and makes the server heavy and harder to navigate.

Completeness4/5

The tool surface thoroughly covers automations, helpers, template entities, notify groups, history stats sensors, dashboards (down to view/card level), registry entities, devices, and config entries. Gaps remain for script and scene management, and there is no area creation/deletion, but core automation workflows are complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues