Skip to main content
Glama
homeassistant-ai

Home Assistant MCP Server

Official

Get Dashboard

ha_config_get_dashboard
Read-onlyIdempotent

List Home Assistant Lovelace dashboards, read dashboard or view configs, and search cards by query, entity, type, or heading.

Instructions

Get Lovelace dashboards: list them, read one config, or search their cards.

Not for a render alone: ha_get_dashboard_screenshot (screenshot beta feature) returns images without the config. Not for entity discovery: use ha_search.

The parameters pick the mode:

  • list_only=True: storage and YAML dashboards alike.

  • Any of query / entity_id / card_type / heading searches cards and header cards, AND-ing the criteria, in url_path or, when it is omitted, every storage dashboard. View badges answer entity_id and query, and heading excludes them. Cards nested at any depth count, including custom cards' own keys such as groups[].cards[].card. Each match has a jq_path and a python_path to append to config in ha_config_set_dashboard(python_transform=...), e.g. f'config{m["python_path"]}["icon"] = "mdi:x"'. Each match carries its dashboard's url_path and config_hash; a one-dashboard search also returns the config_hash at the top level.

  • Otherwise the full config of url_path (the default dashboard when omitted) is returned; with view_path only that view, while config_hash still covers the full config.

Caveats: config_hash stays the same across reads of an unchanged config. Searches stop at 200 matches (truncated). A search across dashboards skips YAML dashboards (HA resolves !secret in them) and, without a current ha_mcp_tools component, the default dashboard (with a warning); name either by url_path. Strategy dashboards have no stored cards to search. An unknown view_path errors and lists the available ones.

EXAMPLES:

  • List all dashboards: ha_config_get_dashboard(list_only=True)

  • Get one view only: ha_config_get_dashboard(url_path="lovelace-mobile", view_path="office")

  • Find cards by entity (wildcards allowed): ha_config_get_dashboard(url_path="my-dash", entity_id="sensor.temperature_*")

  • Find heading: ha_config_get_dashboard(url_path="my-dash", heading="Climate", card_type="heading")

  • Which dashboards use an entity: ha_config_get_dashboard(query="light.bedroom")

  • Fields of a card type before writing one (omit card_type to list types): ha_config_get_dashboard(card_type="tile", describe=True)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNoSearch: text or entity ID contained in any value a card holds (case-insensitive); the matching values are listed under `matched`.
headingNoSearch: cards whose heading/title contains this text (case-insensitive).
describeNoReturn card_type's fields from HA's card editor
url_pathNoDashboard URL path (e.g. 'lovelace-home'); 'default' for the default dashboard.
card_typeNoSearch: cards of this type, e.g. 'tile'; 'badge' selects view badges instead (alone, it lists them all). With describe=True: the type to describe.
entity_idNoSearch: cards whose entity/entities field holds this entity ID; '*' matches any run of characters (including none) and the whole ID must match (e.g. 'sensor.temperature_*').
list_onlyNoList every dashboard's metadata instead of reading one; ignored when a search parameter is given.
view_pathNoGet mode: return ONLY the view whose Lovelace views[].path matches (response carries 'view' + 'view_index' instead of the full 'config'). With include_screenshot, also selects the view to render.
force_reloadNoGet only: bypass the config cache (searches always read fresh config).
include_configNoSearch: include each matched card's own config. A container's body includes its nested cards, which are also matches, so nested stacks multiply the payload. Withheld, with a warning, for a dashboard not provably storage-mode (a YAML config may carry resolved !secret values).
include_screenshotNoGet mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine app (add-on)/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changedv8.7.0
    • changedInput schema / properties / card_type / description
      Previous value: -"Find cards by type, e.g. 'tile', 'button', 'heading'."New value: +"Search: cards of this type, e.g. 'tile'; 'badge' selects view badges instead (alone, it lists them all). With describe=True: the type to describe."
    • addedInput schema / properties / describe
      Added value: +{
      +  "default": false,
      +  "description": "Return card_type's fields from HA's card editor",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / entity_id / description
      Previous value: -"Find cards by entity ID. Supports wildcards, e.g. 'sensor.temperature_*'. Matches cards with this entity in 'entity' or 'entities' field, view-level badges, and header cards."New value: +"Search: cards whose entity/entities field holds this entity ID; '*' matches any run of characters (including none) and the whole ID must match (e.g. 'sensor.temperature_*')."
    • changedInput schema / properties / force_reload / description
      Previous value: -"Force reload from storage (bypass cache). Not applicable in search mode."New value: +"Get only: bypass the config cache (searches always read fresh config)."
    • changedInput schema / properties / heading / description
      Previous value: -"Find cards by heading/title text (case-insensitive partial match)."New value: +"Search: cards whose heading/title contains this text (case-insensitive)."
    • changedInput schema / properties / include_config / description
      Previous value: -"In search mode: include each matched card's own configuration object in results. A container card's body includes its descendants, which are also separate matches with their own bodies, so nested stacks multiply the payload. Bodies are returned only for dashboards provably in storage mode; for a YAML or unconfirmed dashboard they are withheld (they may carry resolved !secret values) and the response says so, with match locations still reported. Ignored outside search mode."New value: +"Search: include each matched card's own config. A container's body includes its nested cards, which are also matches, so nested stacks multiply the payload. Withheld, with a warning, for a dashboard not provably storage-mode (a YAML config may carry resolved !secret values)."
    • changedInput schema / properties / include_screenshot / description
      Previous value: -"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine app (add-on)/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors. Ignored in list/search mode."New value: +"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine app (add-on)/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors."
    • changedInput schema / properties / list_only / description
      Previous value: -"When True, url_path is ignored."New value: +"List every dashboard's metadata instead of reading one; ignored when a search parameter is given."
    • removedInput schema / properties / mode
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "const": "search",
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Set to 'search' (requires query)."
      -}
    • changedInput schema / properties / query / description
      Previous value: -"With mode='search': the entity_id or substring to find across all storage-mode dashboards. Ignored otherwise."New value: +"Search: text or entity ID contained in any value a card holds (case-insensitive); the matching values are listed under `matched`."
    • changedInput schema / properties / url_path / description
      Previous value: -"Dashboard URL path (e.g., 'lovelace-home'). Use 'default' for default dashboard."New value: +"Dashboard URL path (e.g. 'lovelace-home'); 'default' for the default dashboard."
    • changedInput schema / properties / view_path / description
      Previous value: -"Get mode: return ONLY the view whose Lovelace views[].path matches (response carries 'view' + 'view_index' instead of the full 'config'). With include_screenshot, also selects the view to render. Ignored in list/search mode."New value: +"Get mode: return ONLY the view whose Lovelace views[].path matches (response carries 'view' + 'view_index' instead of the full 'config'). With include_screenshot, also selects the view to render."
  2. Changed10 schema fields changedv8.6.0
    • changedInput schema / properties / card_type / description
      Previous value: -"Find cards by type, e.g. 'tile', 'button', 'heading'. When provided, activates search mode."New value: +"Find cards by type, e.g. 'tile', 'button', 'heading'."
    • changedInput schema / properties / entity_id / description
      Previous value: -"Find cards by entity ID. Supports wildcards, e.g. 'sensor.temperature_*'. Matches cards with this entity in 'entity' or 'entities' field, view-level badges, and header cards. When provided, activates search mode (returns matches, not full config)."New value: +"Find cards by entity ID. Supports wildcards, e.g. 'sensor.temperature_*'. Matches cards with this entity in 'entity' or 'entities' field, view-level badges, and header cards."
    • changedInput schema / properties / force_reload / description
      Previous value: -"Force reload from storage (bypass cache). Not applicable in search mode, which always reads fresh config."New value: +"Force reload from storage (bypass cache). Not applicable in search mode."
    • changedInput schema / properties / heading / description
      Previous value: -"Find cards by heading/title text (case-insensitive partial match). When provided, activates search mode."New value: +"Find cards by heading/title text (case-insensitive partial match)."
    • changedInput schema / properties / include_config / description
      Previous value: -"In search mode: include each matched card's own configuration object in results (increases output size). Note that a matched container card's config contains its descendants, which are themselves separate matches with their own config, so deeply-nested stacks multiply the payload — keep the default (False) unless you need the bodies. Does not affect whether the full dashboard config is returned — search mode always returns matches only, not the full dashboard. Config bodies are surfaced only for dashboards provably in storage mode; for a YAML or unconfirmed dashboard the bodies are withheld (they may carry resolved !secret values) and the response says so, with match locations still reported. Ignored outside search mode."New value: +"In search mode: include each matched card's own configuration object in results. A container card's body includes its descendants, which are also separate matches with their own bodies, so nested stacks multiply the payload. Bodies are returned only for dashboards provably in storage mode; for a YAML or unconfirmed dashboard they are withheld (they may carry resolved !secret values) and the response says so, with match locations still reported. Ignored outside search mode."
    • changedInput schema / properties / include_screenshot / description
      Previous value: -"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine add-on/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors (the screenshot is the requested payload). Ignored in list/search mode. When you already have the config and only need the render, use the dedicated ha_get_dashboard_screenshot tool (registered when the same beta feature is on) — it returns images without echoing the config."New value: +"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine app (add-on)/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors. Ignored in list/search mode."
    • changedInput schema / properties / list_only / description
      Previous value: -"If True, list all dashboards instead of getting config. When True, url_path is ignored."New value: +"When True, url_path is ignored."
    • changedInput schema / properties / mode / description
      Previous value: -"Set to 'search' for a CROSS-dashboard search: which dashboards contain a given entity_id or text (requires query). Leave unset for the default list/get/single-dashboard-search behavior selected by list_only / entity_id / card_type / heading."New value: +"Set to 'search' (requires query)."
    • changedInput schema / properties / url_path / description
      Previous value: -"Dashboard URL path (e.g., 'lovelace-home'). Use 'default' for default dashboard. If omitted with list_only=True, lists all dashboards."New value: +"Dashboard URL path (e.g., 'lovelace-home'). Use 'default' for default dashboard."
    • changedInput schema / properties / view_path / description
      Previous value: -"Get mode: return ONLY the view whose Lovelace views[].path matches (response carries 'view' + 'view_index' instead of the full 'config') — use this to keep multi-view dashboards from blowing up the response when you only need one view. Does not require any beta feature. With include_screenshot, also selects the view to render. Ignored in list/search mode. Omit for the full config."New value: +"Get mode: return ONLY the view whose Lovelace views[].path matches (response carries 'view' + 'view_index' instead of the full 'config'). With include_screenshot, also selects the view to render. Ignored in list/search mode."
  3. Changed1 schema field changedv8.5.0
    • changedInput schema / properties / force_reload / description
      Previous value: -"Force reload from storage (bypass cache). Not applicable in search mode (search always uses force=True for fresh results)."New value: +"Force reload from storage (bypass cache). Not applicable in search mode, which always reads fresh config."
  4. Changed1 schema field changedv8.4.1
    • changedInput schema / properties / include_screenshot / description
      Previous value: -"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine add-on/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors (the screenshot is the requested payload). Ignored in list/search mode."New value: +"Get mode only: also return rendered image(s) of the dashboard for visual verification. Requires the 'dashboard screenshot' beta feature + engine add-on/sidecar. If the feature is disabled the config is returned with a warning; if the engine is configured but the render fails, the call errors (the screenshot is the requested payload). Ignored in list/search mode. When you already have the config and only need the render, use the dedicated ha_get_dashboard_screenshot tool (registered when the same beta feature is on) — it returns images without echoing the config."
  5. First observedv7.14.2

TDQS

A4.6/5.0
Behavior4/5

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

Annotations establish the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: 200-match truncation via `truncated`, cache-invariant config_hash, YAML/strategy/default-dashboard search exclusions, and view_path error behavior. It is rich, though a full accounting of every caveat is impossible to verify, so it stops short of a clean 5.

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 opening line front-loads the three modes and the exclusions before the detailed mode breakdown and caveats, and the examples are cleanly separated. It is long, but for an 11-parameter, multi-mode tool nearly every sentence carries load; density is the only minor cost.

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?

With no output schema, the description carries the return-value burden and does so: it names matched values, jq_path/python_path, config_hash, view/view_index, and truncated. Combined with the caveats section, an agent has everything needed to call and interpret this tool across all modes.

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

Parameters4/5

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

Schema coverage is 100%, so the per-parameter descriptions are already complete and the baseline would be 3. The description nevertheless adds cross-parameter semantics the schema does not: that search criteria are AND-ed, that list_only is ignored when a search parameter is given, and how each mode is triggered. That mode-selection logic genuinely exceeds the individual 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?

Opens with a specific verb+resource: 'Get Lovelace dashboards' and enumerates its three modes (list, read one config, search cards). It explicitly distinguishes itself from siblings ha_get_dashboard_screenshot and ha_search, so an agent can place it without opening the schema.

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

Usage Guidelines5/5

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

Provides explicit when-not guidance ('Not for a render alone... Not for entity discovery: use ha_search') and explains that the parameters select the mode, with examples covering each mode. The alternatives and selection conditions are stated, not inferred.

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

Deploy Server

Other Tools