0.6.0pypi · hass-mcp · current release
Observed 2026-09-04T08:52:38.528Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.
{
"experimental": {},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"tools": {
"listChanged": false
}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
add_card
Add a card to a dashboard view (live)
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view — an integer index, or a string matching the view's
`path` or `title`.
card: The card config dict (must include a string `type`), e.g.
{"type": "markdown", "content": "Hello"}.
position: Insert index within the target card list (default: append).
section: For a "sections"-type view, which section to add into — an
index, section title, or heading text. REQUIRED for sections
views (use list_view_sections to see them); omit for classic
views.
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"card": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Card"
},
"position": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Position"
},
"section": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Section"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "add_cardArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "add_cardOutput",
"type": "object"
} | — | — · — | — |
add_view
Add a new view to a dashboard (live)
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view_config: The view config dict, e.g. {"title": "Garage", "path": "garage"}.
position: Insert index among views (default: append).
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view_config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "View Config"
},
"position": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Position"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "add_viewArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "add_viewOutput",
"type": "object"
} | — | — · — | — |
call_service_tool
Call any Home Assistant service (low-level API access)
Args:
domain: The domain of the service (e.g., 'light', 'switch', 'automation')
service: The service to call (e.g., 'turn_on', 'turn_off', 'toggle')
data: Optional data to pass to the service (e.g., {'entity_id': 'light.living_room'})
Returns:
A dictionary with success status, the domain/service called, and the
list of affected entity states returned by Home Assistant.
Examples:
domain='light', service='turn_on', data={'entity_id': 'light.x', 'brightness': 255}
domain='automation', service='reload'
domain='fan', service='set_percentage', data={'entity_id': 'fan.x', 'percentage': 50}
Input schema{
"properties": {
"domain": {
"title": "Domain",
"type": "string"
},
"service": {
"title": "Service",
"type": "string"
},
"data": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Data"
}
},
"required": [
"domain",
"service"
],
"title": "call_service_toolArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "call_service_toolOutput",
"type": "object"
} | — | — · — | — |
domain_summary_tool
Get a summary of entities in a specific domain
Args:
domain: The domain to summarize (e.g., 'light', 'switch', 'sensor')
example_limit: Maximum number of examples to include for each state
Returns:
A dictionary containing:
- total_count: Number of entities in the domain
- state_distribution: Count of entities in each state
- examples: Sample entities for each state
- common_attributes: Most frequently occurring attributes
Examples:
domain="light" - get light summary
domain="climate", example_limit=5 - climate summary with more examples
Best Practices:
- Use this before retrieving all entities in a domain to understand what's available Input schema{
"properties": {
"domain": {
"title": "Domain",
"type": "string"
},
"example_limit": {
"default": 3,
"title": "Example Limit",
"type": "integer"
}
},
"required": [
"domain"
],
"title": "domain_summary_toolArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "domain_summary_toolOutput",
"type": "object"
} | — | — · — | — |
entity_action
Perform an action on a Home Assistant entity (on, off, toggle)
Args:
entity_id: The entity ID to control (e.g. 'light.living_room')
action: The action to perform ('on', 'off', 'toggle')
params: Optional dictionary of additional parameters for the service call
Returns:
The response from Home Assistant
Examples:
entity_id="light.living_room", action="on", params={"brightness": 255}
entity_id="switch.garden_lights", action="off"
entity_id="climate.living_room", action="on", params={"temperature": 22.5}
Domain-Specific Parameters:
- Lights: brightness (0-255), color_temp, rgb_color, transition, effect
- Covers: position (0-100), tilt_position
- Climate: temperature, target_temp_high, target_temp_low, hvac_mode
- Media players: source, volume_level (0-1)
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"action": {
"title": "Action",
"type": "string"
},
"params": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Params"
}
},
"required": [
"entity_id",
"action"
],
"title": "entity_actionArguments",
"type": "object"
} | — | — · — | — |
get_dashboard_config
Get a dashboard's full configuration
Args:
url_path: The dashboard's URL path (e.g. "my-dash"). Omit or pass None
for the default "Overview" dashboard.
Returns:
The dashboard config dict (a top-level `views` list of cards). If the
dashboard has no stored config yet, returns an empty `{"views": []}`
scaffold with a `note`.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
}
},
"title": "get_dashboard_configArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_dashboard_configOutput",
"type": "object"
} | — | — · — | — |
get_entities_by_area
Get all entities assigned to a specific Home Assistant area (room).
Area lookup is case-insensitive and matches the area's name as configured
in Home Assistant (e.g., "Kitchen", "Living Room"). Entities inherit their
area from their parent device when no area is set directly, matching HA's
own resolution behavior.
Args:
area: Name of the area to filter by (case-insensitive)
domain: Optional domain to further filter results (e.g., 'light')
lean: If True (default), returns token-efficient entity records
Returns:
A dictionary containing:
- area: The matched area name (as canonicalized by HA)
- count: Number of matching entities
- entities: List of entity records with their state and area
Examples:
get_entities_by_area(area="Kitchen") - everything in the kitchen
get_entities_by_area(area="Living Room", domain="light") - lights only
Input schema{
"properties": {
"area": {
"title": "Area",
"type": "string"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"lean": {
"default": true,
"title": "Lean",
"type": "boolean"
}
},
"required": [
"area"
],
"title": "get_entities_by_areaArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_entities_by_areaOutput",
"type": "object"
} | — | — · — | — |
get_entity
Get the state of a Home Assistant entity with optional field filtering
Args:
entity_id: The entity ID to get (e.g. 'light.living_room')
fields: Optional list of fields to include (e.g. ['state', 'attr.brightness'])
detailed: If True, returns all entity fields without filtering
Examples:
entity_id="light.living_room" - basic state check
entity_id="light.living_room", fields=["state", "attr.brightness"] - specific fields
entity_id="light.living_room", detailed=True - all details
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"fields": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Fields"
},
"detailed": {
"default": false,
"title": "Detailed",
"type": "boolean"
}
},
"required": [
"entity_id"
],
"title": "get_entityArguments",
"type": "object"
} | — | — · — | — |
get_error_log
Get the Home Assistant error log for troubleshooting.
All filters are optional and combine (AND semantics). Stats
(error_count, warning_count, integration_mentions, total_lines) are
computed over the filtered output so they match what's returned.
Args:
level: Filter to lines containing this log level — ERROR, WARNING,
INFO, or DEBUG. Case-insensitive.
integration: Filter to lines mentioning this integration. Matches
`[name]` or `[homeassistant.components.name]`.
Case-insensitive.
search_term: Case-insensitive substring filter applied per line.
Useful for entity IDs, exception names, etc.
lines: Return only the most recent N lines (applied after other
filters). Useful when you only care about the tail.
Returns:
A dictionary containing:
- log_text: The (possibly filtered) error log text
- error_count: Number of ERROR entries in the filtered output
- warning_count: Number of WARNING entries in the filtered output
- integration_mentions: Map of integration names to mention counts
- total_lines: Number of lines in the filtered output
- filters_applied: Map of which filter args were supplied
- error: Error message if retrieval failed
Examples:
get_error_log() # full log
get_error_log(level="ERROR") # errors only
get_error_log(integration="zwave_js") # one integration
get_error_log(search_term="light.kitchen") # specific entity
get_error_log(level="ERROR", lines=50) # last 50 errors
Best Practices:
- Filter on the server side (here) rather than pulling the full
log into Claude's context — saves tokens on noisy logs.
- Combine `integration` + `level="ERROR"` to triage a single
integration that's misbehaving.
- Use `lines` to bound output when scanning a long-running HA.
Input schema{
"properties": {
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Level"
},
"integration": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Integration"
},
"search_term": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search Term"
},
"lines": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Lines"
}
},
"title": "get_error_logArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_error_logOutput",
"type": "object"
} | — | — · — | — |
get_history
Get the history of an entity's state changes
Args:
entity_id: The entity ID to get history for
hours: Number of hours of history to retrieve (default: 24)
Returns:
A dictionary containing:
- entity_id: The entity ID requested
- states: List of state objects with timestamps
- count: Number of state changes found
- first_changed: Timestamp of earliest state change
- last_changed: Timestamp of most recent state change
Examples:
entity_id="light.living_room" - get 24h history
entity_id="sensor.temperature", hours=168 - get 7 day history
Best Practices:
- Keep hours reasonable (24-72) for token efficiency
- Use for entities with discrete state changes rather than continuously changing sensors
- Consider the state distribution rather than every individual state
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"hours": {
"default": 24,
"title": "Hours",
"type": "integer"
}
},
"required": [
"entity_id"
],
"title": "get_historyArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_historyOutput",
"type": "object"
} | — | — · — | — |
get_history_range
Get raw state-change history for an entity over a date/time range.
Like `get_history`, but takes an explicit window instead of "N hours
from now". Useful for inspecting what happened on a specific day or
correlating with an external event.
Args:
entity_id: The entity to fetch history for.
start_time: ISO-8601 start (e.g. `2026-05-15` or
`2026-05-15T08:00:00Z`). Treated as UTC if no offset.
end_time: ISO-8601 end. Defaults to now (UTC).
Returns:
Same shape as `get_history`: `entity_id`, `states`, `count`,
`first_changed`, `last_changed`.
Examples:
get_history_range("light.kitchen", "2026-05-15")
get_history_range("sensor.power", "2026-05-15T00:00:00Z", "2026-05-16T00:00:00Z")
Best Practices:
- Bound the window — wider ranges return more data and more tokens.
- For aggregated long-term data, prefer `get_statistics_range`.
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"end_time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End Time"
}
},
"required": [
"entity_id",
"start_time"
],
"title": "get_history_rangeArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_history_rangeOutput",
"type": "object"
} | — | — · — | — |
get_statistics
Get long-term aggregated statistics for an entity over the last N hours.
Uses HA's recorder statistics (over WebSocket) — aggregated buckets
(mean / min / max per period) that survive the short-term retention
window. Use this instead of `get_history` when:
- You want data older than the recorder's default 10-day window.
- You want aggregated values rather than every individual change.
- The entity is a high-frequency sensor (temperature, power) and
raw history would be too many tokens.
Args:
entity_id: The entity (must have a `state_class` HA records as
statistics — `measurement`, `total`, `total_increasing`).
hours: How far back from now. Defaults to 24.
period: Bucket size — `5minute`, `hour`, `day`, `week`, `month`.
Defaults to `hour`.
Returns:
`entity_id`, `period`, `start_time`, `end_time`, `statistics`
(list of `{start, end, mean, min, max, ...}` points).
Examples:
get_statistics("sensor.power_usage", hours=168, period="day")
get_statistics("sensor.temperature", hours=24)
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"hours": {
"default": 24,
"title": "Hours",
"type": "integer"
},
"period": {
"default": "hour",
"title": "Period",
"type": "string"
}
},
"required": [
"entity_id"
],
"title": "get_statisticsArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_statisticsOutput",
"type": "object"
} | — | — · — | — |
get_statistics_range
Get long-term aggregated statistics for an entity over a date/time range.
Same data source as `get_statistics`, but with an explicit window —
useful for "what was my power usage from Jan 1 to Jan 31?" type
questions. Aggregated bucket data survives the short-term retention
window, so this works for data months/years old.
Args:
entity_id: The entity (must be statistics-tracked).
start_time: ISO-8601 start (`2026-01-01` or
`2026-01-01T00:00:00Z`). UTC if no offset.
end_time: ISO-8601 end. Defaults to now.
period: `5minute`, `hour`, `day`, `week`, or `month`.
Returns:
`entity_id`, `period`, `start_time`, `end_time`, `statistics`.
Examples:
get_statistics_range("sensor.energy", "2026-01-01", "2026-02-01", period="day")
get_statistics_range("sensor.temperature", "2026-05-01", period="hour")
Input schema{
"properties": {
"entity_id": {
"title": "Entity Id",
"type": "string"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"end_time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End Time"
},
"period": {
"default": "hour",
"title": "Period",
"type": "string"
}
},
"required": [
"entity_id",
"start_time"
],
"title": "get_statistics_rangeArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "get_statistics_rangeOutput",
"type": "object"
} | — | — · — | — |
get_version
Get the Home Assistant version
Returns:
A string with the Home Assistant version (e.g., "2025.3.0")
Input schema{
"properties": {},
"title": "get_versionArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"title": "Result",
"type": "string"
}
},
"required": [
"result"
],
"title": "get_versionOutput",
"type": "object"
} | — | — · — | — |
list_automations
Get a list of all automations from Home Assistant
This function retrieves all automations configured in Home Assistant,
including their IDs, entity IDs, state, and display names.
Returns:
A list of automation dictionaries, each containing id, entity_id,
state, and alias (friendly name) fields.
Examples:
Returns all automation objects with state and friendly names
Input schema{
"properties": {},
"title": "list_automationsArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_automationsOutput",
"type": "object"
} | — | — · — | — |
list_dashboard_backups
List on-disk backups of a dashboard's config
Backups are written automatically before every dashboard write. NOTE: in
Docker, backups persist only if HASS_MCP_BACKUP_DIR is volume-mounted.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
Returns:
A list of {backup_id, path}, oldest first.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
}
},
"title": "list_dashboard_backupsArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"items": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_dashboard_backupsOutput",
"type": "object"
} | — | — · — | — |
list_dashboards
List Home Assistant dashboards (Lovelace)
Returns:
A list of dashboards. Each entry has `url_path` (None for the default
"Overview" dashboard), `title`, and `mode` ("storage" or "yaml"). Only
"storage"-mode dashboards can be edited via these tools.
Input schema{
"properties": {},
"title": "list_dashboardsArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_dashboardsOutput",
"type": "object"
} | — | — · — | — |
list_entities
Get a list of Home Assistant entities with optional filtering
Args:
domain: Optional domain to filter by (e.g., 'light', 'switch', 'sensor')
search_query: Optional search term to filter entities by name, id, or attributes
(Note: Does not support wildcards. To get all entities, leave this empty)
limit: Maximum number of entities to return (default: 100)
fields: Optional list of specific fields to include in each entity
detailed: If True, returns all entity fields without filtering
Returns:
A list of entity dictionaries with lean formatting by default
Examples:
domain="light" - get all lights
search_query="kitchen", limit=20 - search entities
domain="sensor", detailed=True - full sensor details
Best Practices:
- Use lean format (default) for most operations
- Prefer domain filtering over no filtering
- For domain overviews, use domain_summary_tool instead of list_entities
- Only request detailed=True when necessary for full attribute inspection
- To get all entity types/domains, use list_entities without a domain filter,
then extract domains from entity_ids
Input schema{
"properties": {
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"search_query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search Query"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
},
"fields": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Fields"
},
"detailed": {
"default": false,
"title": "Detailed",
"type": "boolean"
}
},
"title": "list_entitiesArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_entitiesOutput",
"type": "object"
} | — | — · — | — |
list_view_sections
List the sections of a "sections"-type dashboard view
Modern Home Assistant views of `type: sections` hold their cards inside
sections (not a top-level card list). Use this to discover which section
to target with the card tools' `section` argument.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
Returns:
A list of {index, title, heading, card_count}, one per section. Errors
if the view is not a sections view.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
}
},
"title": "list_view_sectionsArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Result",
"type": "array"
}
},
"required": [
"result"
],
"title": "list_view_sectionsOutput",
"type": "object"
} | — | — · — | — |
move_card
Reorder a card within a dashboard view (live)
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
card_index: Current index of the card.
new_index: Destination index within the same card list.
section: For a "sections"-type view, which section the card is in
(index/title/heading). Required for sections views.
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"card_index": {
"default": 0,
"title": "Card Index",
"type": "integer"
},
"new_index": {
"default": 0,
"title": "New Index",
"type": "integer"
},
"section": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Section"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "move_cardArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "move_cardOutput",
"type": "object"
} | — | — · — | — |
remove_card
Remove a card from a dashboard view (live)
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
card_index: Index of the card to remove within the target card list.
section: For a "sections"-type view, which section the card is in
(index/title/heading). Required for sections views.
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"card_index": {
"default": 0,
"title": "Card Index",
"type": "integer"
},
"section": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Section"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "remove_cardArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "remove_cardOutput",
"type": "object"
} | — | — · — | — |
remove_view
Remove a view from a dashboard (live)
⚠️ Removes the view and all its cards.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "remove_viewArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "remove_viewOutput",
"type": "object"
} | — | — · — | — |
restart_ha
Restart Home Assistant
⚠️ WARNING: Temporarily disrupts all Home Assistant operations
Returns:
Result of restart operation
Input schema{
"properties": {},
"title": "restart_haArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "restart_haOutput",
"type": "object"
} | — | — · — | — |
restore_dashboard
Restore a dashboard from a backup (live)
Restores the most recent backup unless `backup_id` is given. The current
config is itself backed up first, so a restore can be undone.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
backup_id: A specific backup id from list_dashboard_backups (default:
newest).
dry_run: Preview without saving.
Returns:
Save result plus `restored_from`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"backup_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Backup Id"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "restore_dashboardArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "restore_dashboardOutput",
"type": "object"
} | — | — · — | — |
search_entities_tool
Search for entities matching a query string
Args:
query: The search query to match against entity IDs, names, and attributes.
(Note: Does not support wildcards. To get all entities, leave this blank or use list_entities tool)
limit: Maximum number of results to return (default: 20)
Returns:
A dictionary containing search results and metadata:
- count: Total number of matching entities found
- results: List of matching entities with essential information
- domains: Map of domains with counts (e.g. {"light": 3, "sensor": 2})
Examples:
query="temperature" - find temperature entities
query="living room", limit=10 - find living room entities
query="", limit=500 - list all entity types
Input schema{
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "search_entities_toolArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "search_entities_toolOutput",
"type": "object"
} | — | — · — | — |
set_dashboard_config
Replace a dashboard's full configuration (low-level write)
⚠️ WARNING: Overwrites the ENTIRE dashboard and updates every open browser
live. The prior config is backed up first (use restore_dashboard to undo).
Requires an admin token; only storage-mode dashboards can be saved.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
config: The complete new config dict (must contain a `views` list).
dry_run: If True, validate and return the resulting config + a change
summary WITHOUT saving.
Returns:
On save: {success, url_path, backup_id, summary}. On dry_run:
{dry_run: True, url_path, summary, config}.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Config"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "set_dashboard_configArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "set_dashboard_configOutput",
"type": "object"
} | — | — · — | — |
system_overview
Get a comprehensive overview of the entire Home Assistant system
Returns:
A dictionary containing:
- total_entities: Total count of all entities
- domains: Dictionary of domains with their entity counts and state distributions
- domain_samples: Representative sample entities for each domain (2-3 per domain)
- domain_attributes: Common attributes for each domain
- area_distribution: Entities grouped by area (if available)
Examples:
Returns domain counts, sample entities, and common attributes
Best Practices:
- Use this as the first call when exploring an unfamiliar Home Assistant instance
- Perfect for building context about the structure of the smart home
- After getting an overview, use domain_summary_tool to dig deeper into specific domains
Input schema{
"properties": {},
"title": "system_overviewArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "system_overviewOutput",
"type": "object"
} | — | — · — | — |
update_card
Replace a card in a dashboard view (live)
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
card_index: Index of the card to replace within the target card list.
card: The new card config dict (must include a string `type`).
section: For a "sections"-type view, which section the card is in
(index/title/heading). Required for sections views.
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"card_index": {
"default": 0,
"title": "Card Index",
"type": "integer"
},
"card": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Card"
},
"section": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Section"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "update_cardArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "update_cardOutput",
"type": "object"
} | — | — · — | — |
update_view
Update a view's properties — title, path, icon, etc. (live)
Cards in the view are preserved unless `changes` includes a `cards` key.
Args:
url_path: Dashboard URL path, or None for the default dashboard.
view: Target view (index, or matching `path`/`title`).
changes: Dict of view properties to merge in, e.g. {"title": "New Title"}.
dry_run: Preview without saving.
Returns:
Save result with a `backup_id`, or a dry-run preview.
Input schema{
"properties": {
"url_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Url Path"
},
"view": {
"anyOf": [
{
"type": "integer"
},
{
"type": "string"
}
],
"default": 0,
"title": "View"
},
"changes": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Changes"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "update_viewArguments",
"type": "object"
}Output schema{
"properties": {
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
}
},
"required": [
"result"
],
"title": "update_viewOutput",
"type": "object"
} | — | — · — | — |
Get a list of all Home Assistant entities as a resource This endpoint returns a complete list of all entities in Home Assistant, organized by domain. For token efficiency with large installations, consider using domain-specific endpoints or the domain summary instead. Returns: A markdown formatted string listing all entities grouped by domain Examples: ``` # Get all entities entities = mcp.get_resource("hass://entities") ``` Best Practices: - WARNING: This endpoint can return large amounts of data with many entities - Prefer domain-filtered endpoints: hass://entities/domain/{domain} - For overview information, use domain summaries instead of full entity lists - Consider starting with a search if looking for specific entities
{
"resource_key": "hass://entities",
"uri": "hass://entities",
"name": "get_all_entities_resource",
"description": "\nGet a list of all Home Assistant entities as a resource\n\nThis endpoint returns a complete list of all entities in Home Assistant, \norganized by domain. For token efficiency with large installations,\nconsider using domain-specific endpoints or the domain summary instead.\n\nReturns:\n A markdown formatted string listing all entities grouped by domain\n \nExamples:\n ```\n # Get all entities\n entities = mcp.get_resource(\"hass://entities\")\n ```\n \nBest Practices:\n - WARNING: This endpoint can return large amounts of data with many entities\n - Prefer domain-filtered endpoints: hass://entities/domain/{domain}\n - For overview information, use domain summaries instead of full entity lists\n - Consider starting with a search if looking for specific entities\n",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "5eb5737cab69b892d420ddb3377ad4d194d128ad89c66ba12621f6942bf18496"
}Get the state of a Home Assistant entity as a resource This endpoint provides a standard view with common entity information. For comprehensive attribute details, use the /detailed endpoint. Args: entity_id: The entity ID to get information for
{
"template_key": "hass://entities/{entity_id}",
"uri_template": "hass://entities/{entity_id}",
"name": "get_entity_resource",
"description": "\nGet the state of a Home Assistant entity as a resource\n\nThis endpoint provides a standard view with common entity information.\nFor comprehensive attribute details, use the /detailed endpoint.\n\nArgs:\n entity_id: The entity ID to get information for\n",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "35d504703c1eecbdf0c5fabc7e3195df1fa8f71dbb21e8641e45de424a2f8a32"
}Get detailed information about a Home Assistant entity as a resource Use this detailed view selectively when you need to: - Understand all available attributes of an entity - Debug entity behavior or capabilities - See comprehensive state information For routine operations where you only need basic state information, prefer the standard entity endpoint or specify fields in the get_entity tool. Args: entity_id: The entity ID to get information for
{
"template_key": "hass://entities/{entity_id}/detailed",
"uri_template": "hass://entities/{entity_id}/detailed",
"name": "get_entity_resource_detailed",
"description": "\nGet detailed information about a Home Assistant entity as a resource\n\nUse this detailed view selectively when you need to:\n- Understand all available attributes of an entity\n- Debug entity behavior or capabilities\n- See comprehensive state information\n\nFor routine operations where you only need basic state information,\nprefer the standard entity endpoint or specify fields in the get_entity tool.\n\nArgs:\n entity_id: The entity ID to get information for\n",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "9ef565002dc2bda63bc927071d39a9dd4c90006f6ba97889aada2edfc898da86"
}Get a list of entities for a specific domain as a resource This endpoint provides all entities of a specific type (domain). It's much more token-efficient than retrieving all entities when you only need entities of a specific type. Args: domain: The domain to filter by (e.g., 'light', 'switch', 'sensor') Returns: A markdown formatted string with all entities in the specified domain Examples: ``` # Get all lights lights = mcp.get_resource("hass://entities/domain/light") # Get all climate devices climate = mcp.get_resource("hass://entities/domain/climate") # Get all sensors sensors = mcp.get_resource("hass://entities/domain/sensor") ``` Best Practices: - Use this endpoint when you need detailed information about all entities of a specific type - For a more concise overview, use the domain summary endpoint: hass://entities/domain/{domain}/summary - For sensors and other high-count domains, consider using a search to further filter results
{
"template_key": "hass://entities/domain/{domain}",
"uri_template": "hass://entities/domain/{domain}",
"name": "list_states_by_domain_resource",
"description": "\nGet a list of entities for a specific domain as a resource\n\nThis endpoint provides all entities of a specific type (domain). It's much more\ntoken-efficient than retrieving all entities when you only need entities of a \nspecific type.\n\nArgs:\n domain: The domain to filter by (e.g., 'light', 'switch', 'sensor')\n\nReturns:\n A markdown formatted string with all entities in the specified domain\n \nExamples:\n ```\n # Get all lights\n lights = mcp.get_resource(\"hass://entities/domain/light\")\n \n # Get all climate devices\n climate = mcp.get_resource(\"hass://entities/domain/climate\")\n \n # Get all sensors\n sensors = mcp.get_resource(\"hass://entities/domain/sensor\")\n ```\n \nBest Practices:\n - Use this endpoint when you need detailed information about all entities of a specific type\n - For a more concise overview, use the domain summary endpoint: hass://entities/domain/{domain}/summary\n - For sensors and other high-count domains, consider using a search to further filter results\n",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "a4cc84496a8f0e45010075f26efde6a457d389dd594534f0e4f3d5f992d14928"
}Search for entities matching a query string with a specified result limit This endpoint extends the basic search functionality by allowing you to specify a custom limit on the number of results returned. It's useful for both broader searches (larger limit) and more focused searches (smaller limit). Args: query: The search query to match against entity IDs, names, and attributes limit: Maximum number of entities to return (as a string, will be converted to int) Returns: A markdown formatted string with search results and a JSON summary Examples: ``` # Search with a larger limit (up to 50 results) results = mcp.get_resource("hass://search/sensor/50") # Search with a smaller limit for focused results results = mcp.get_resource("hass://search/kitchen/5") ``` Best Practices: - Use smaller limits (5-10) for focused searches where you need just a few matches - Use larger limits (30-50) for broader searches when you need more comprehensive results - Balance larger limits against token usage - more results means more tokens - Consider domain-specific searches for better precision: "light kitchen" instead of just "kitchen"
{
"template_key": "hass://search/{query}/{limit}",
"uri_template": "hass://search/{query}/{limit}",
"name": "search_entities_resource_with_limit",
"description": "\nSearch for entities matching a query string with a specified result limit\n\nThis endpoint extends the basic search functionality by allowing you to specify\na custom limit on the number of results returned. It's useful for both broader\nsearches (larger limit) and more focused searches (smaller limit).\n\nArgs:\n query: The search query to match against entity IDs, names, and attributes\n limit: Maximum number of entities to return (as a string, will be converted to int)\n\nReturns:\n A markdown formatted string with search results and a JSON summary\n \nExamples:\n ```\n # Search with a larger limit (up to 50 results)\n results = mcp.get_resource(\"hass://search/sensor/50\")\n \n # Search with a smaller limit for focused results\n results = mcp.get_resource(\"hass://search/kitchen/5\")\n ```\n \nBest Practices:\n - Use smaller limits (5-10) for focused searches where you need just a few matches\n - Use larger limits (30-50) for broader searches when you need more comprehensive results\n - Balance larger limits against token usage - more results means more tokens\n - Consider domain-specific searches for better precision: \"light kitchen\" instead of just \"kitchen\"\n",
"mime_type": "text/plain",
"annotations": null,
"metadata_hash": "0e7c6cc5a12feb3e6e1897ef841491e608f29e34ebddb6b5bcab2073b9a02434"
}Review all automations, find conflicts, redundancies, or improvement opportunities This prompt helps users perform a comprehensive review of their Home Assistant automations to identify issues, optimize performance, and improve reliability. Returns: A list of messages for the interactive conversation
{
"prompt_key": "automation_health_check",
"name": "automation_health_check",
"description": "\nReview all automations, find conflicts, redundancies, or improvement opportunities\n\nThis prompt helps users perform a comprehensive review of their Home Assistant\nautomations to identify issues, optimize performance, and improve reliability.\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [],
"metadata_hash": "cc2e25523137647a6bc023129f544b4c64c31ee4deb22921e6148ee8ad3c4a3c"
}Guide a user through creating a Home Assistant automation This prompt provides a step-by-step guided conversation for creating a new automation in Home Assistant based on the specified trigger type. Args: trigger_type: The type of trigger for the automation (state, time, etc.) entity_id: Optional entity to use as the trigger source Returns: A list of messages for the interactive conversation
{
"prompt_key": "create_automation",
"name": "create_automation",
"description": "\nGuide a user through creating a Home Assistant automation\n\nThis prompt provides a step-by-step guided conversation for creating\na new automation in Home Assistant based on the specified trigger type.\n\nArgs:\n trigger_type: The type of trigger for the automation (state, time, etc.)\n entity_id: Optional entity to use as the trigger source\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [
{
"name": "trigger_type",
"required": true
},
{
"name": "entity_id",
"required": false
}
],
"metadata_hash": "a18e00ae6c3da9c026fc30f8958962b6e54636dbe0c81e3e1836b4705bf8f23b"
}Create optimized dashboards based on user preferences and usage patterns This prompt helps users design effective, user-friendly dashboards for their Home Assistant instance based on their specific needs. Returns: A list of messages for the interactive conversation
{
"prompt_key": "dashboard_layout_generator",
"name": "dashboard_layout_generator",
"description": "\nCreate optimized dashboards based on user preferences and usage patterns\n\nThis prompt helps users design effective, user-friendly dashboards\nfor their Home Assistant instance based on their specific needs.\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [],
"metadata_hash": "8506a73a1d4938807f3520112426a8fc347d009e506c78bc8b22ac4a8324a63d"
}Help a user troubleshoot an automation that isn't working This prompt guides the user through the process of diagnosing and fixing issues with an existing Home Assistant automation. Args: automation_id: The entity ID of the automation to troubleshoot Returns: A list of messages for the interactive conversation
{
"prompt_key": "debug_automation",
"name": "debug_automation",
"description": "\nHelp a user troubleshoot an automation that isn't working\n\nThis prompt guides the user through the process of diagnosing and fixing\nissues with an existing Home Assistant automation.\n\nArgs:\n automation_id: The entity ID of the automation to troubleshoot\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [
{
"name": "automation_id",
"required": true
}
],
"metadata_hash": "7332b906ee6436124a4ae5be3165656e94bd1e3543d6eb52a7b2957762369a3a"
}Audit entity names and suggest standardization improvements This prompt helps users analyze their entity naming conventions and create a more consistent, organized naming system across their Home Assistant instance. Returns: A list of messages for the interactive conversation
{
"prompt_key": "entity_naming_consistency",
"name": "entity_naming_consistency",
"description": "\nAudit entity names and suggest standardization improvements\n\nThis prompt helps users analyze their entity naming conventions and create\na more consistent, organized naming system across their Home Assistant instance.\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [],
"metadata_hash": "d7f2cb3ce733b6cc0378d198b361bc257190e70a8a8011bcc1f7ebc09b3a631f"
}Analyze usage patterns and suggest optimized routines based on actual behavior This prompt helps users analyze their Home Assistant usage patterns and create more efficient routines, automations, and schedules based on real usage data. Returns: A list of messages for the interactive conversation
{
"prompt_key": "routine_optimizer",
"name": "routine_optimizer",
"description": "\nAnalyze usage patterns and suggest optimized routines based on actual behavior\n\nThis prompt helps users analyze their Home Assistant usage patterns and create\nmore efficient routines, automations, and schedules based on real usage data.\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [],
"metadata_hash": "647ec3c65c12070be7f6bac663c4f8375e5521b23d0cc2db1b32c737ee745858"
}Guide a user through troubleshooting issues with an entity This prompt helps diagnose and resolve problems with a specific Home Assistant entity that isn't functioning correctly. Args: entity_id: The entity ID having issues Returns: A list of messages for the interactive conversation
{
"prompt_key": "troubleshoot_entity",
"name": "troubleshoot_entity",
"description": "\nGuide a user through troubleshooting issues with an entity\n\nThis prompt helps diagnose and resolve problems with a specific\nHome Assistant entity that isn't functioning correctly.\n\nArgs:\n entity_id: The entity ID having issues\n\nReturns:\n A list of messages for the interactive conversation\n",
"arguments": [
{
"name": "entity_id",
"required": true
}
],
"metadata_hash": "02e0759c8d75f8a9941cf723d33fa717d6b01720aaed984b992dfb548f32a543"
}