Skip to main content
Glama
homeassistant-ai

Home Assistant MCP Server

Official

Get System Health (incl. ZHA/Z-Wave/integration diagnostics)

ha_get_system_health
Read-onlyIdempotent

Retrieves Home Assistant system health and diagnostics: Zigbee, Z-Wave, Thread, Matter networks, repairs, config check, and per-integration diagnostics. Also reports ha-mcp update availability.

Instructions

Get Home Assistant system health, including Zigbee (ZHA), Z-Wave JS, and per-integration diagnostics dumps.

Returns health check results from integrations, system resources, and connectivity. Available information varies by installation type and loaded integrations.

The result also carries an ha_mcp_update object — {current, latest, update_available} — reporting whether a newer ha-mcp release is available (from PyPI for pip/Docker, or the Supervisor add-on store for the add-on), so you can proactively tell the user to upgrade. Present on every install type including the HA add-on (so a user who missed the Supervisor's update prompt still hears about it); omitted only for the unknown version and when HA_MCP_DISABLE_UPDATE_CHECK is set.

Parameters:

  • include: Optional comma-separated list of additional data to include.

    • "repairs": Repair items from Settings > System > Repairs (active only by default; pass include_dismissed_repairs=True for all). To dismiss/ignore a repair, call ha_call_service(ws_command="repairs/ignore_issue", data={"domain": <domain>, "issue_id": <issue_id>, "ignore": true}).

    • "zha_network": ZHA Zigbee devices with radio signal summary (name, LQI, RSSI)

    • "zha_network_full": ZHA Zigbee devices with all device details (can be large on 100+ device networks; prefer "zha_network" for summary)

    • "zwave_network": Z-Wave JS network status and node summary (status, security, routing)

    • "thread_network": Thread/OpenThread Border Router (OTBR) summary — per border-router channel, extended_pan_id, and border_agent_id (integration-presence + radio-network view, not per-node Thread health)

    • "matter_network": Matter integration presence summary — config_entry_id, state, and title (per-node health is exposed separately via Matter node diagnostics, not here)

    • "themes": Installed theme names and defaults (sorted list of theme names, count, default_theme, default_dark_theme)

    • "diagnostics": Per-integration diagnostics dump — integration-defined JSON (commonly includes redacted config, device list, state snapshots; exact top-level keys vary by integration). REQUIRES config_entry_id. The canonical artifact users grab via Settings → Devices & Services → [integration] → ⋯ → Download diagnostics. Use this when triaging integration bugs or filing ha_report_issue for a specific integration. Payloads can be large (Hue ~290 KB, ZHA/MQTT/ESPHome several MB) — pair with diagnostics_fields or diagnostics_truncate_at_bytes to fit the LLM context budget.

    • "config_check": Validate HA configuration via POST /config/core/check_config (the pre-restart safety check; ha_restart runs it automatically). Returns {result: valid|invalid, is_valid, errors}; read-only/idempotent, takes no args.

    • "dead_entities": Surface orphaned/stale entity-registry entries by diffing the registry against the state machine and the live config-entries set. Returns confidence-tiered buckets — config_entry_orphans (owning integration instance gone; definitively dead) and stale_restored (HA restored the entity from the registry on startup but the loaded integration no longer provides it). Each item carries entity_id + platform so a client can propose cleanup with ha_remove_entity. Deliberately excludes unknown-state entities and merely-offline devices to keep false positives low. Read-only; takes no args.

    • Example: include="repairs,zha_network,zwave_network,config_check"

    • Example: include="diagnostics", config_entry_id="abc123..."

  • include_dismissed_repairs: Include user-dismissed/ignored repairs (default: False). Only meaningful when "repairs" is in include.

  • config_entry_id: Required when include contains diagnostics. The config entry ID of the integration (find via ha_get_integration).

  • device_id: Optional. When set with include=diagnostics, returns the device-scoped diagnostics dump for that specific device under the integration (rather than the full integration dump). Some integrations only expose config-entry-level dumps; others expose both.

  • diagnostics_fields: Optional list of top-level keys to keep from the diagnostics data payload (e.g. ["home_assistant", "issues"]). Accepts a JSON list or comma-separated string. Only applies with include=diagnostics.

  • diagnostics_truncate_at_bytes: Optional byte cap on the serialized diagnostics payload (post-projection / post-data_path). On hit, drops data and emits truncated=true, bytes_total, byte_cap, plus available_fields (when the capped value is a dict). Only applies when include contains diagnostics. Recommended starting point: 20000 bytes.

  • diagnostics_data_path: Optional dotted path into the diagnostics data sub-tree (e.g. "data.devices" for ZHA per-device records). Walks into the post-fields payload. Resolution failures replace data with null and surface data_path_error. Only applies when include contains diagnostics.

  • diagnostics_data_offset / diagnostics_data_limit: Pagination on list-valued diagnostics_data_path results. When data_limit is set and the resolved path is a list, data becomes {"path", "items", "offset", "limit", "total", "has_more"}. Only applies when include contains diagnostics.

    Example workflow (walk a list-valued sub-tree one page at a time; the exact data_path varies by integration version): ha_get_system_health(include="diagnostics", config_entry_id="abc", diagnostics_data_path="<list-valued path>", diagnostics_data_limit=10) → inspect the page envelope's total / has_more → repeat with diagnostics_data_offset=10 for the next slice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
includeNo
device_idNo
config_entry_idNo
diagnostics_fieldsNo
diagnostics_data_pathNo
diagnostics_data_limitNo
diagnostics_data_offsetNo
include_dismissed_repairsNo
diagnostics_truncate_at_bytesNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate readOnlyHint, openWorldHint, and idempotentHint=true. The description adds significant behavioral context, including the return of the ha_mcp_update object, caveats about payload sizes for diagnostics, and that operations like config_check are read-only and idempotent. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy due to the tool's complexity, but it is well-structured with a clear lead sentence, a separate paragraph for the ha_mcp_update object, and bullet-point-like explanations for include options. While every sentence earns its place, some redundancy exists (e.g., repeating 'Only applies when include contains diagnostics'). Minor trimming could improve conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, no schema coverage, no enums), the description is exceptionally complete. It covers all parameters, explains return values (including the ha_mcp_update object), provides workflow examples, and addresses edge cases (e.g., omission when version is unknown or HA_MCP_DISABLE_UPDATE_CHECK set). The presence of an output schema does not reduce the need for this detail, and the description delivers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description fully explains all 9 parameters. It lists every possible value for include, describes the behavior of each parameter (e.g., diagnostics_data_path, diagnostics_truncate_at_bytes), provides examples, and clarifies dependencies (e.g., config_entry_id required for diagnostics). This exceeds the minimum required and compensates for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get Home Assistant system health, including Zigbee (ZHA), Z-Wave JS, and per-integration diagnostics dumps.' It specifies the resource (system health) and the specific integrations covered, effectively distinguishing it from sibling tools that focus on individual integrations or other aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance for specific include options, such as 'Use this when triaging integration bugs or filing ha_report_issue for a specific integration' for diagnostics. It also hints at appropriate contexts for other options like dead_entities. However, it lacks a general statement on when to use this tool versus alternatives, which would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/homeassistant-ai/ha-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server