Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TZNoTimezone (e.g., America/Los_Angeles)
HA_URLYesHome Assistant URL (e.g., http://192.168.1.100:8123)
HA_TOKENYesHome Assistant Long-Lived Access Token
HA_VERIFY_SSLNoSet to true to enable SSL certificate verification (default: false). Useful when using HTTPS with self-signed certificates.false

Capabilities

Features and capabilities supported by this server

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

Tools

Functions exposed to the LLM to take actions

NameDescription
get_version

Get the Home Assistant version.

get_entity

Get the state of a Home Assistant entity with optional field filtering.

Args: entity_id: Entity ID (e.g. 'light.living_room') fields: Fields to include (e.g. ['state', 'attr.brightness']) detailed: If True, returns all fields unfiltered

Examples: get_entity("light.living_room", fields=["state", "attr.brightness"])

entity_action

Perform an action on a Home Assistant entity (on, off, toggle).

Args: entity_id: Entity ID to control (e.g. 'light.living_room') action: 'on', 'off', or 'toggle' params: Additional service parameters (e.g. {"brightness": 255, "temperature": 22.5})

Domain-specific params: 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)

Examples: entity_action("light.living_room", "on", {"brightness": 255}) entity_action("switch.garden_lights", "off")

list_entities

List Home Assistant entities with optional filtering.

Args: domain: Domain filter (e.g. 'light', 'switch', 'sensor') search_query: Search by name, id, or attributes (no wildcards) limit: Max entities to return (default: 100) fields: Specific fields to include per entity detailed: If True, returns all fields unfiltered compact: If True, returns only entity_id/state/friendly_name (overrides detailed/fields)

Examples: list_entities(domain="light") list_entities(search_query="kitchen", limit=20) list_entities(compact=True)

search_entities

Search for entities matching a query string across IDs, names, and attributes.

Args: query: Search term (no wildcards; empty string returns all entities) limit: Max results (default: 20)

Examples: search_entities("temperature") search_entities("living room", limit=10)

domain_summary

Get a summary of entities in a domain (counts, state distribution, examples).

Args: domain: Domain to summarize (e.g. 'light', 'switch', 'sensor') example_limit: Max examples per state (default: 3)

Examples: domain_summary("light") domain_summary("climate", example_limit=5)

system_overview

Get a comprehensive overview of the Home Assistant system (domain counts, samples, areas).

Good first call when exploring an unfamiliar instance. Use domain_summary to drill deeper.

list_automations

List automations with their IDs, entity IDs, state, and aliases.

Args: limit: Max automations to return (1-200, default: 50)

Examples: list_automations() list_automations(limit=200)

list_automation_traces

List recent execution traces for a specific automation.

Args: automation_id: Automation ID (e.g. 'motion_light' or 'automation.motion_light') domain: 'automation' or 'script' (default: 'automation') limit: Max traces to return (default: 10, max: 50)

Use run_id from results with get_automation_trace for full details.

Examples: list_automation_traces("motion_light") list_automation_traces("kitchen_lights", limit=5)

get_automation_trace

Get detailed trace for a specific automation run (trigger, conditions, actions, errors).

Args: automation_id: Automation ID (e.g. 'motion_light') run_id: Run/trace ID from list_automation_traces domain: 'automation' or 'script' (default: 'automation')

Examples: get_automation_trace("motion_light", "1700000000.123456")

restart_ha

Restart Home Assistant. WARNING: Temporarily disrupts all operations.

call_service

Call any Home Assistant service directly (low-level API).

Args: domain: Service domain (e.g. 'light', 'automation') service: Service name (e.g. 'turn_on', 'reload') data: Service data (e.g. {'entity_id': 'light.x', 'brightness': 255})

Examples: call_service("light", "turn_on", {"entity_id": "light.x", "brightness": 255}) call_service("automation", "reload")

get_history

Get raw state changes for an entity. For aggregated trends, use get_statistics instead.

By default returns last N hours. Provide start_time to query a specific date range instead. Best for: exact state change timestamps, infrequently-changing entities (doors, switches), short time periods. NOT for: long ranges on frequently-updating sensors — use get_statistics.

Args: entity_id: Entity ID to get history for hours: Hours of history (default: 24). Ignored if start_time is provided. start_time: ISO 8601, date only, or 'yesterday'/'today'. If set, uses range mode instead of hours. end_time: End of range (default: 'now'). Only used with start_time. limit: Max records (1-500, default: 100) sample_strategy: 'recent' (default), 'first', or 'even' — how to sample if over limit minimal_response: Reduce response size in range mode (default: true)

Examples: get_history("binary_sensor.front_door") get_history("sensor.temperature", hours=1, limit=50) get_history("sensor.temp", start_time="2025-10-28T10:00:00Z", end_time="2025-10-28T11:00:00Z") get_history("light.living_room", start_time="yesterday", end_time="today")

get_statistics

Get aggregated statistics (mean/min/max) for an entity. Best tool for historical data — no token limits.

By default returns last N hours. Provide start_time to query a specific date range instead. Handles any range efficiently (days, months, years). If get_history hits token limits, use this tool with the same time range instead.

Args: entity_id: Entity ID to get statistics for hours: Hours of data (default: 24). Ignored if start_time is provided. start_time: ISO 8601, date only, or 'yesterday'/'today'. If set, uses range mode instead of hours. end_time: End of range (default: 'now'). Only used with start_time. period: Aggregation period (default: 'hour'): '5minute' (~12 points/hr), 'hour' (24/day), 'day' (monthly views), 'week' (quarterly), 'month' (yearly). Match period to time range.

Examples: get_statistics("sensor.temperature", hours=24, period="hour") get_statistics("sensor.power_usage", hours=168, period="day") get_statistics("sensor.temperature", start_time="2024-10-01", end_time="2024-10-31", period="day") get_statistics("sensor.humidity", start_time="yesterday", period="5minute")

get_error_log

Get the Home Assistant error log (WebSocket API). Stacktraces truncated by default.

Args: limit: Max records (1-100, default: 50) integration: Filter by integration (e.g. "mqtt", "zwave") level: Filter by level: "ERROR" or "WARNING" since_minutes: Only errors from last N minutes truncate_traces: Truncate stacktraces to 3 lines (default: True)

Examples: get_error_log(integration="mqtt") get_error_log(level="ERROR", since_minutes=60)

get_core_logs

Get Home Assistant core logs (all levels) from the Supervisor journal, with fallback to error log.

Args: limit: Max records (1-200, default: 50) level: Filter: "DEBUG", "INFO", "WARNING", or "ERROR" integration: Filter by integration (e.g. "mqtt", "llmvision") pattern: Case-insensitive substring match on message since_minutes: Only logs from last N minutes lines: Journal lines to request (default: 500) truncate_traces: Truncate stacktraces to 3 lines (default: True)

Use set_log_level to enable DEBUG before reading debug logs; reset to WARNING after.

Examples: get_core_logs(level="DEBUG", integration="llmvision") get_core_logs(pattern="timeout", since_minutes=60)

set_log_level

Set the log level for a Home Assistant integration.

Args: integration: Integration name (e.g. "mqtt", "llmvision") level: "debug", "info", "warning", or "error" custom_component: If True, targets custom_components.X (for HACS integrations)

Examples: set_log_level("mqtt", "debug") set_log_level("llmvision", "debug", custom_component=True) set_log_level("mqtt", "warning") # reset to normal

remove_entity

Remove an entity from the entity registry. Two-phase safety: preview first, then confirm.

By default returns a preview. Set confirm=True to actually delete. Entity may reappear if integration recreates it; consider disable instead.

Args: entity_id: Entity ID to remove (e.g. 'light.old_device') confirm: False=preview (default), True=permanently remove

Examples: remove_entity("light.orphaned_device") # preview remove_entity("light.orphaned_device", confirm=True) # delete

update_entity

Update entity registry properties (name, icon, area, disable/enable, hide/unhide, rename).

For fields that can be cleared, pass "none" as the string value to set to null.

Args: entity_id: Entity ID to update name: Friendly name (or "none" to clear) icon: Icon (e.g. 'mdi:lamp', or "none" to clear) disabled_by: "user" to disable, "none" to re-enable hidden_by: "user" to hide, "none" to unhide area_id: Area ID (or "none" to remove) new_entity_id: Rename entity ID (e.g. 'light.new_name') options: Platform options dict

Examples: update_entity("sensor.old", disabled_by="user") update_entity("sensor.old", disabled_by="none") # re-enable update_entity("light.x", name="Living Room Lamp", area_id="kitchen")

get_entity_registry

Get the full entity registry entry (platform, config, device, disabled/hidden, area).

Args: entity_id: Entity ID to look up (e.g. 'light.living_room')

Examples: get_entity_registry("light.living_room")

list_entity_registry

List entity registry entries (platform, config, disabled/hidden, area). Not states — use list_entities for states.

Args: domain: Domain filter (e.g. 'light', 'sensor') limit: Max entries (default: 100, max: 5000)

Examples: list_entity_registry(domain="light") list_entity_registry(domain="sensor", limit=50)

query_entities

Query entities using CEL (Common Expression Language) expressions.

CEL context: entity_id (string), state (numeric if possible, else string), domain (string), attributes (dict).

Args: domain: Domain pre-filter (e.g. "sensor", "light") expression: CEL filter expression limit: Max entities (default: 50) lean: Minimal fields with domain-specific attrs (default: True) compact: Only entity_id/state/friendly_name (default: False)

CEL examples: domain="sensor", expression='state < 30 && attributes.device_class == "battery"' domain="light", expression='state == "on" && attributes.brightness < 50' expression='state == "unavailable" || state == "unknown"'

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/rmaher001/hass-mcp-plus'

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