MCP.Market

Home Assistant MCP server

by Vortitron·io.github.Vortitron/home-assistant-mcp·v0.11.0

Home Assistant and ESPHome for coding agents: states, services, automations, dashboards, flashing.

B83/100grade B
What users say
No reviews yet
Be the first
Safety scan
B83/100

full report

Adoption
Growing

0 stars114 downloads/wk

Reviews

Write one

Nobody has reviewed Home Assistant yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Home Assistant tools (100, 28 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • esphome_activity

    What the ESPHome build commands (validate, compile, upload, logs) started in this session are doing:

  • esphome_cleanwrite action

    Delete the cached build files for a configuration. Use this when a compile fails for reasons

  • esphome_compile

    Compile firmware for an ESPHome configuration and return the build output. Can take several minutes.

  • esphome_dashboard_info

    Report whether ESPHome is reachable and what is possible right now — listing and

  • esphome_edit_config

    Change part of an ESPHome configuration file in place: each edit replaces one exact piece of

  • esphome_get_config

    Read the YAML for an ESPHome configuration file (e.g. 'living-room.yaml').

  • esphome_list_devices

    List devices/configurations known to the ESPHome dashboard, including their configuration filenames (needed by the other ESPHome tools).

  • esphome_list_migrations

    Report the ESPHome spellings a device's YAML still uses that have since been

  • esphome_logs

    Stream the live logs from an ESPHome device and return what was captured. This is the way to

  • esphome_save_configwrite action

    Write YAML to an ESPHome configuration file, whole: for a new file. To change part of an existing one, use esphome_edit_config. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true. Follow with esphome_validate to confirm it compiles, then esphome_upload to flash it.

  • esphome_uploadwrite action

    Compile and flash firmware to a device over the air. This is how you update an ESPHome device — no cable, no manual step in the ESPHome UI. 'port' is the device address or 'OTA' (the default). Requires write access.

  • esphome_validate

    Validate (compile-check) an ESPHome configuration and return the output. The fast way to confirm a YAML edit is correct before compiling or flashing.

  • ha_addon_install_vome

    Developer helper: add the VomeSync GitHub add-on repository to the Supervisor store (if missing), install the Vome add-on, and start it. Requires HAOS/Supervised. In brokered mode the API key's ha:config scope is authoritative — no HA_ALLOW_WRITE env flag needed. After install, restart Home Assistant once so custom_components/vomesync is loaded, then add the Vome integration.

  • ha_call_service

    Call a Home Assistant service to change state (e.g. domain='light', service='turn_on', data={ brightness_pct: 60 }, target={ entity_id: 'light.kitchen' }). Refused unless writes are enabled, and blocked for denied domains. Returns the entities that changed, and service_response for services that return data.

  • ha_camera_frame

    A camera's current still decoded and shrunk to at most width x height pixels, returned as RGB

  • ha_camera_image

    Return a camera's current still as an image you can see — to check framing, exposure, or what the camera shows. For a camera entity that shows the latest snapshot file, this is that snapshot. Home Assistant scales it to 'width' pixels wide (default 1024). Through VomeHome the API key needs Cameras ticked under Sensitive devices.

  • ha_change_user_password

    Reset the password for a user that already has a local login (created via

  • ha_check_config

    Validate the current Home Assistant configuration (equivalent to Developer Tools -> Check configuration). Returns 'valid' or the specific errors. Run this after editing YAML and before reloading.

  • ha_clear_system_log

    Empty Home Assistant's structured error store. The point is the debug loop: clear, reproduce the problem, then ha_get_system_log shows only what your reproduction caused. Does not touch home-assistant.log on disk. Requires HA_ALLOW_WRITE=true in direct mode.

  • ha_config_entry_options

    Open a config entry's *options* flow — the per-integration settings panel — and

  • ha_config_flow

    Add or configure an integration via Home Assistant's config flow API.

  • ha_create_dashboardwrite action

    Register a new storage-mode Lovelace dashboard. After creating, call ha_save_dashboard to set its views/cards. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • ha_create_userwrite action

    Create a new Home Assistant user with no login yet — call ha_set_user_credentials

  • ha_delete_automationwrite action

    Delete an automation by its unique id. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • ha_delete_config_entrywrite action

    Permanently delete one config entry (integration instance) by id. This is the fix for

  • ha_delete_config_filewrite action

    Delete one file under the config directory — a throwaway test file, a superseded

  • ha_delete_dashboardwrite action

    Delete a storage-mode Lovelace dashboard by its id (from ha_list_dashboards or ha_create_dashboard). Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • ha_delete_helperwrite action

    Delete a stored Home Assistant helper by id (from ha_list_helpers). The entity

  • ha_delete_scriptwrite action

    Delete a script by id. Automations that call it will fail at that step, so remove those

  • ha_delete_userwrite action

    Permanently delete a user and any login credentials attached to it. Cannot delete the

  • ha_edit_config_file

    Change part of a text file under the config directory: each edit replaces one exact piece of

  • ha_fire_event

    Fire a custom event on the Home Assistant event bus (advanced). Useful for triggering event-based automations during testing. Requires writes to be enabled.

  • ha_get_automation

    Get the full configuration (triggers, conditions, actions) of an automation. Accepts either the entity_id (automation.xxx) or the unique id.

  • ha_get_config

    Return core Home Assistant configuration: version, location name, time zone, unit system and the list of loaded integrations/components. A good first call to understand the instance.

  • ha_get_dashboard

    Get the full Lovelace configuration for one dashboard (views, cards, etc.). Use url_path from ha_list_dashboards — e.g. 'lovelace' for the default overview, or a custom path like 'sam-energy'.

  • ha_get_entity_registry

    Inspect the entity registry: platform, area, device, unique-id metadata and whether entities are disabled or hidden. Useful for finding disabled entities or the area/device an entity belongs to.

  • ha_get_error_log

    Return the tail of the raw Home Assistant error log. ha_get_system_log is usually the better first stop (grouped and structured); reach for this one when you need the raw ordering, or lines the structured store drops.

  • ha_get_history

    Get historical state changes for one or more entities over a time window. Times are ISO 8601 (e.g. 2026-06-05T06:00:00+00:00). Defaults to the last day if no start_time is given; with a start_time and no end_time it runs up to now (Home Assistant on its own would stop 24 hours after the start).

  • ha_get_logbook

    Return human-readable logbook entries (what happened and when), optionally filtered to a single entity and time window.

  • ha_get_script

    Get a script's full configuration (alias, sequence, fields, mode). List scripts with

  • ha_get_state

    Get the full state and attributes for one or more entities. Use this to read exact current values before changing them or writing template/automation logic.

  • ha_get_supervisor_log

    Tail the logs of an add-on, Home Assistant Core, the Supervisor itself, or the host — for problems that never reach HA's own error log (an add-on crash-looping, a failed install, host-level trouble). Requires a Supervised / HAOS install. Works through the VomeHome broker too (read scope).

  • ha_get_system_log

    Home Assistant's deduplicated error store: one record per distinct problem, with level, logger, source file:line, occurrence count and first/last seen. Prefer this over ha_get_error_log — 20 grouped issues instead of 200 raw lines. Filter by minimum level, logger name or free text. Full tracebacks are omitted by default (you still get the final exception line); set include_exception=true, usually

  • ha_get_trace

    Step-by-step detail for one run: what triggered it, every condition and action in order with its result, and 'failed_at' naming the first step that errored or evaluated false. This is the tool for 'why didn't my automation run' — logs usually stay silent about a condition returning false. Give 'item' and omit run_id for its most recent run, or give a run_id from ha_list_traces (item is then option

  • ha_hacs_add_repository

    Add a custom repository to HACS by GitHub 'owner/repo' (or its URL) and category

  • ha_hacs_download_repository

    Install or update a repository HACS already knows about — this is the step that

  • ha_hacs_info

    Whether HACS is installed and its version, configured country, and whether it has pending

  • ha_hacs_list_repositories

    List repositories HACS knows about — both custom and default-store ones it has fetched

  • ha_hacs_remove_repositorywrite action

    Uninstall a HACS-managed repository's files and stop HACS tracking it as custom.

  • ha_integration_setup_vome

    Ensure the Vome custom component is set up as a config entry: start the vomesync

  • ha_list_areas

    List all Home Assistant areas (rooms/zones) with their ids, names and floor. Use the area_id or name to filter other tools.

  • ha_list_automations

    List all automations with their entity_id, unique id (needed to read/edit config), on/off state and last triggered time.

  • ha_list_config_entries

    List installed Home Assistant config entries (integrations). Optional domain filter, e.g. vomesync.

  • ha_list_config_files

    List a directory under Home Assistant's config directory. Omit 'path' for the root,

  • ha_list_dashboards

    List Home Assistant Lovelace dashboards (url_path, title, mode, sidebar visibility). Works in direct HA mode and VomeHome brokered mode.

  • ha_list_devices

    List Home Assistant devices from the device registry. Optionally filter by area (id or name) and/or a search string matching name, manufacturer or model.

  • ha_list_discovery_flows

    List config flows Home Assistant has started but not finished — chiefly integrations

  • ha_list_entities

    List entities with their current state. Filter by domain (e.g. 'light'), a free-text search over entity_id and friendly name, and/or an area (id or name). This is the fastest way to discover what exists before calling services or editing automations.

  • ha_list_helpers

    List the helpers Home Assistant stores — input_boolean, input_number, counter, timer

  • ha_list_services

    List callable Home Assistant services. Without a domain, returns every domain and its service names. With a domain, returns that domain's services including their fields/parameters so you know what data to pass to ha_call_service.

  • ha_list_traces

    List recent runs of an automation or script: when it ran, whether it finished, and how it stopped ('failed_condition' means a condition blocked it). Omit 'item' to list runs across everything in the domain. Home Assistant keeps a limited number of traces per item (5 by default), and none from before the last restart.

  • ha_list_users

    List every user on this Home Assistant instance: id, name, username (if they have a

  • ha_matter_reinterview

    Ask a Matter device to describe itself again — the device page's Re-interview button. Do this

  • ha_provision_service_loginwrite action

    Create a non-admin Home Assistant login for a program (an MQTT client such as

  • ha_read_config_file

    Read a file under Home Assistant's config directory — configuration.yaml, a package, an

  • ha_reload_automations

    Reload automations from configuration without restarting Home Assistant (calls automation.reload). Requires writes to be enabled.

  • ha_remove_entitywrite action

    Remove an entity's registry entry, for cleaning up orphans: an entity whose integration no

  • ha_remove_user_credentialswrite action

    Remove the local username/password login from a user, without deleting the user record

  • ha_render_template

    Render a Home Assistant Jinja2 template against live state and return the result. Ideal for iterating on template sensors, automation conditions and value_templates until they produce the expected output. Example: "{{ states('sensor.outside_temp') | float < 5 }}".

  • ha_save_dashboard

    Save (create or replace) the Lovelace configuration for a dashboard. 'config' is the dashboard body (title, views, …). Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • ha_set_automationwrite action

    Create or update an automation by unique id. 'config' is the automation body (alias, trigger, condition, action, mode). Home Assistant reloads automations automatically after saving. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • ha_set_helperwrite action

    Create a Home Assistant helper, or update one that exists. **This is how to add a helper

  • ha_set_log_level

    Raise or lower logging for one integration (or several) at runtime, via logger.set_level. Use this before reproducing a problem — debug on one integration, rather than global debug that drowns the log. Bare names are treated as core integrations ('hue' -> homeassistant.components.hue); anything containing a dot is used as-is ('custom_components.vomesync'). Levels reset on restart. Requires HA_ALLO

  • ha_set_scriptwrite action

    Create or update a script by id. 'config' is the script body ({ alias, sequence, fields,

  • ha_set_user_credentialswrite action

    Create a local username/password login and attach it to an existing user that has none

  • ha_supervisor_api

    Call a Supervisor endpoint through Home Assistant's supervisor/api WebSocket command (e.g. /addons, /store/addons, /store/repositories). Requires a Supervised / HAOS install and ha:config for mutating methods. Use this for add-on store operations.

  • ha_trigger_automation

    Manually run an automation's actions now (automation.trigger). Accepts entity_id or unique id. Set skip_condition=false to also evaluate conditions. Requires writes to be enabled.

  • ha_update_entitywrite action

    Change an entity's registry entry: its display name, its entity_id, its area, its icon, or

  • ha_update_userwrite action

    Change a user's name, role, active state, or local-only restriction. Omit a field to

  • ha_view_snapshot

    In one call, everything a dashboard view shows: the state and attributes of each entity, each

  • ha_write_config_filewrite action

    Write a file under Home Assistant's config directory. Defaults to UTF-8 text; pass

  • nodered_create_flowwrite action

    Add a new Node-RED flow (a new tab) with its nodes, leaving existing flows untouched. The 'flow' object should have a 'label' and a 'nodes' array (Node-RED node objects). Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true. Safer than nodered_set_flows because it cannot disturb other tabs.

  • nodered_delete_flowwrite action

    Delete an entire Node-RED flow (one tab) and all of its nodes by id. This cannot be undone from here. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • nodered_get_flow

    Get a single Node-RED flow (one editor tab) and its nodes by flow id. Use nodered_get_flows first to discover tab ids and labels.

  • nodered_get_flows

    Get the full Node-RED flow configuration (the JSON array of all nodes across every tab) plus the current revision string. Pass that 'rev' back to nodered_set_flows to avoid clobbering a concurrent change. Prefer nodered_get_flow / nodered_update_flow for single-tab edits.

  • nodered_list_nodes

    List the installed Node-RED node modules and the node types they provide (the palette). Use this to check which node types are available before writing a flow that references them.

  • nodered_set_flows

    Replace the ENTIRE Node-RED flow configuration and deploy. This overwrites every tab — prefer nodered_create_flow / nodered_update_flow unless you really mean to rewrite everything. Pass the 'rev' from nodered_get_flows to avoid clobbering a concurrent change. deployment_type controls how Node-RED applies it ('full' restarts all flows; 'flows'/'nodes' restart only what changed; 'reload' re-reads f

  • nodered_update_flowwrite action

    Replace a single Node-RED flow (one tab) and its nodes by id, leaving other tabs untouched. Read it first with nodered_get_flow, edit, then send the whole flow object back. Requires HA_ALLOW_WRITE=true and HA_ALLOW_CONFIG_WRITE=true.

  • vome_health_check

    Start a fresh Vome health check on this Home Assistant: after fixing findings, this is how the score

  • vome_health_report

    Vome's health score for this Home Assistant, out of 100, with everything its check found: each finding

  • vomehome_complete_onboarding

    Finish the outstanding setup-wizard steps on a VomeHome instance, so it opens on a

  • vomehome_create_guest_linkwrite action

    Create a non-admin (unless admin=true) Home Assistant user for this instance, plus a

  • vomehome_create_instancewrite action

    Create a new Home Assistant instance on VomeHome — useful for spinning up a throwaway test/sandbox install. In brokered mode the API key's create scope is authoritative (no local env flags required). Optionally set VOMEHOME_ALLOW_CREATE=false to block creation locally. The creating API key is granted full Home Assistant access on the new instance (ha:read, ha:write, ha:config, ha:files) and it bec

  • vomehome_get_instance

    Get one VomeHome instance by id, including live status and the Home Assistant URL. Requires VOMEHOME_TOKEN.

  • vomehome_get_login_url

    Get a one-click login URL that opens your VomeHome Home Assistant already signed in. Present the returned URL to the user as a link to open in a new browser tab/window. The URL embeds a short-lived credential, so treat it as a secret and do not log it. Requires VOMEHOME_TOKEN.

  • vomehome_get_onboarding

    Which Home Assistant setup-wizard steps are still outstanding on a VomeHome instance.

  • vomehome_list_guest_links

    List guest links created for this instance, including already-revoked ones (with

  • vomehome_list_instances

    List the Home Assistant instances on your VomeHome account, with status, tier, HA URL and (where available) live health. Requires VOMEHOME_TOKEN.

  • vomehome_reboot_instance

    Reboot a VomeHome Home Assistant instance (reboots the underlying VM). In brokered mode the API key's ha:write (or instances:write) scope is authoritative; an optional local VOMEHOME_INSTANCES write:false only adds a client-side block.

  • vomehome_use_instance

    Switch which VomeHome instance the Home Assistant tools target. Subsequent ha_* calls (states, services, automations, templates, check_config) operate on this instance, and write/config permission follows that instance's own flags (declared in VOMEHOME_INSTANCES, the default instance, or auto-granted on create). An undeclared but reachable instance inherits the global default, which in brokered mo

Public scan report

scanner v0.1.10 · 2026-10-14 · same rubric, same numbers if you re-run it

no findings
  • Code scan105 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitystatic API keys via environment variables6/15
  • Maintenancelast push 0 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 83/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Home Assistant compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
83/100
higher than 65% of 48,273 servers
Tools
100
the typical server has 7
Tools that change things
28%
typical: 0%. Fewer write tools means less an agent can break
Downloads a week
114
more than 66% of 11,915 servers with a package

What its tools let an agent do: 72 read · 28 change

Release history: 2 versions in the registry since 2026-10-04, latest 2026-10-14, typically one every 10 days.

Install Home Assistant in Claude Code, Cursor or VS Code

Runs npx -y @vortitron/home-assistant-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add home-assistant-mcp -- npx -y @vortitron/home-assistant-mcp
Add to Cursor

What the publisher says

From the Home Assistant repository's README, as published. We do not edit it. Read it on GitHub

home-assistant-mcp

A Model Context Protocol (MCP) server that lets coding agents — Cursor, VS Code (Copilot), Claude Desktop and anything else that speaks MCP — talk directly to Home Assistant and (optionally) the ESPHome dashboard.

Instead of copy-pasting entity ids, YAML and current values into your agent, the agent can discover entities, read live state, render templates, call services and edit automations itself — and iterate until the code actually works.

In Claude Code, four side panes show what Claude is doing to your home as it happens: the automation it is working on, the ESPHome device it is building, the home's health score and a dashboard that works. One command installs all four (below).

Part of the Vome family and an open-source companion to

VomeHome (managed Home Assistant). It is useful stand-alone for any Home

Assistant user.

Why

A typical "change an automation" loop today looks like: you tell the agent which entities exist, paste their current values, paste the YAML, apply the change, then manually check whether it worked. With this server the agent does all of that:

history and the logbook.

  • See — list entities/areas/devices, read exact states and attributes, pull

read the error log.

  • Experiment — render Jinja templates against live state, check configuration,

ESPHome) edit, validate, compile and flash device firmware.

  • Change — call services, create/update/delete/trigger automations, and (for

All write operations are off by default and gated behind an explicit safety policy (see Safety).

Tools

Home Assistant — read

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Home Assistant: common questions

Is Home Assistant MCP server safe?
Mostly: it is graded B (83/100). Read the Home Assistant safety report
How do I install Home Assistant?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Home Assistant need an API key?
Yes. The registry entry asks for HA_TOKEN, VOMEHOME_TOKEN.
Is Home Assistant maintained?
The last commit was 19 days ago (2026-10-14). The latest release is v0.11.0.
What can I use instead of Home Assistant?
Servers from other publishers that do the same job: Concord MCP server.
How does Home Assistant compare with other MCP servers?
safety score 83/100 (higher than 65% of 48,273 servers); tools 100 (the typical server has 7); tools that change things 28% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Home Assistant

Same job from other publishers: the closest match first, then the best rated.

  • Concord MCP
    Cross-harness communication and shared work-state for AI coding agents.
    A