Skip to main content
Glama

Hass-MCP

MCP Toplist

A Model Context Protocol (MCP) server for Home Assistant integration with Claude and other LLMs.

Overview

Hass-MCP enables AI assistants like Claude to interact directly with your Home Assistant instance, allowing them to:

  • Query the state of devices and sensors

  • Control lights, switches, and other entities

  • Get summaries of your smart home

  • Troubleshoot automations and entities

  • Search for specific entities

  • Create guided conversations for common tasks

Related MCP server: Home Assistant MCP Server

Screenshots

Features

  • Entity Management: Get states, control devices, and search for entities

  • Domain Summaries: Get high-level information about entity types

  • Automation Support: List and control automations

  • Guided Conversations: Use prompts for common tasks like creating automations

  • Smart Search: Find entities by name, type, or state

  • Live Dashboard Editing: Read and edit Lovelace dashboards (cards and views) over Home Assistant's WebSocket API — changes appear instantly in open browsers, with automatic backups and a dry-run preview

  • Token Efficiency: Lean JSON responses to minimize token usage

Installation

Prerequisites

  • Home Assistant instance with Long-Lived Access Token

  • One of the following:

    • Docker (recommended)

    • Python 3.13+ and uv

Setting Up With Claude Desktop

  1. Pull the Docker image:

    docker pull voska/hass-mcp:latest
  2. Add the MCP server to Claude Desktop:

    a. Open Claude Desktop and go to Settings b. Navigate to Developer > Edit Config c. Add the following configuration to your claude_desktop_config.json file:

    {
      "mcpServers": {
        "hass-mcp": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-e",
            "HA_URL",
            "-e",
            "HA_TOKEN",
            "voska/hass-mcp"
          ],
          "env": {
            "HA_URL": "http://homeassistant.local:8123",
            "HA_TOKEN": "YOUR_LONG_LIVED_TOKEN"
          }
        }
      }
    }

    d. Replace YOUR_LONG_LIVED_TOKEN with your actual Home Assistant long-lived access token e. Update the HA_URL:

    • If running Home Assistant on the same machine: use http://host.docker.internal:8123 (Docker Desktop on Mac/Windows)

    • If running Home Assistant on another machine: use the actual IP or hostname

    f. Save the file and restart Claude Desktop

  3. The "Hass-MCP" tool should now appear in your Claude Desktop tools menu

Note: If you're running Home Assistant in Docker on the same machine, you may need to add --network host to the Docker args for the container to access Home Assistant. Alternatively, use the IP address of your machine instead of host.docker.internal.

uv/uvx

  1. Install uv on your system.

  2. Add the MCP server to Claude Desktop:

    a. Open Claude Desktop and go to Settings b. Navigate to Developer > Edit Config c. Add the following configuration to your claude_desktop_config.json file:

    {
      "mcpServers": {
        "hass-mcp": {
          "command": "uvx",
          "args": ["hass-mcp"],
          "env": {
            "HA_URL": "http://homeassistant.local:8123",
            "HA_TOKEN": "YOUR_LONG_LIVED_TOKEN"
          }
        }
      }
    }

    d. Replace YOUR_LONG_LIVED_TOKEN with your actual Home Assistant long-lived access token e. Update the HA_URL:

    • If running Home Assistant on the same machine: use http://host.docker.internal:8123 (Docker Desktop on Mac/Windows)

    • If running Home Assistant on another machine: use the actual IP or hostname

    f. Save the file and restart Claude Desktop

  3. The "Hass-MCP" tool should now appear in your Claude Desktop tools menu

Other MCP Clients

Cursor

  1. Go to Cursor Settings > MCP > Add New MCP Server

  2. Fill in the form:

    • Name: Hass-MCP

    • Type: command

    • Command:

      docker run -i --rm -e HA_URL=http://homeassistant.local:8123 -e HA_TOKEN=YOUR_LONG_LIVED_TOKEN voska/hass-mcp
    • Replace YOUR_LONG_LIVED_TOKEN with your actual Home Assistant token

    • Update the HA_URL to match your Home Assistant instance address

  3. Click "Add" to save

Claude Code (CLI)

To use with Claude Code CLI, you can add the MCP server directly using the mcp add command:

Using Docker (recommended):

claude mcp add hass-mcp -e HA_URL=http://homeassistant.local:8123 -e HA_TOKEN=YOUR_LONG_LIVED_TOKEN -- docker run -i --rm -e HA_URL -e HA_TOKEN voska/hass-mcp

Replace YOUR_LONG_LIVED_TOKEN with your actual Home Assistant token and update the HA_URL to match your Home Assistant instance address.

HTTP Transport (Streamable)

For deployments that can't use stdio — running behind an MCP gateway, hosting on Smithery, sharing one server across multiple clients, or connecting from network-based tools like LibreChat or OpenWebUI — Hass-MCP supports the MCP streamable HTTP transport. The server runs in stateless mode (no Mcp-Session-Id, JSON responses), suitable for horizontally-scaled hosts.

CAUTION

HTTP mode exposes full Home Assistant control over the network. Anyone who can reach the port can call any tool — turn off lights, unlock doors, trigger automations, restart HA. The MCP spec does not yet ship a built-in auth layer in this server. Until it does, you must put it behind one of:

  • A reverse proxy (nginx, Caddy, Traefik) doing basic-auth or bearer-token validation

  • A VPN or zero-trust network (Tailscale, WireGuard, Cloudflare Access)

  • Localhost binding only (the default — change --host only if you know what you're doing)

Do not expose :8000 to the open internet without auth.

Running locally

Using uvx:

HA_URL=http://homeassistant.local:8123 \
HA_TOKEN=YOUR_LONG_LIVED_TOKEN \
uvx hass-mcp --http --port 8000

The server binds 127.0.0.1 by default. Override with --host 0.0.0.0 only when you've also configured auth in front of it.

Running in Docker

docker run --rm -p 8000:8000 \
  -e HA_URL=http://homeassistant.local:8123 \
  -e HA_TOKEN=YOUR_LONG_LIVED_TOKEN \
  voska/hass-mcp:latest --http --host 0.0.0.0 --port 8000

--host 0.0.0.0 is required inside Docker so the port is reachable through the bridge. Bind the publish (-p) to 127.0.0.1:8000:8000 if you only want it reachable from the host, or put a reverse proxy in front.

Endpoint

The MCP endpoint is at /mcp. Point your client at http://<host>:<port>/mcp.

Smithery / PaaS

The server honors the PORT environment variable (Smithery's convention) in addition to MCP_PORT. Smithery deployment requires --http mode and reads PORT automatically.

Custom / private CA

If your Home Assistant instance serves a certificate signed by your own CA (step-ca, smallstep, homelab OpenSSL), hass-mcp can verify it without disabling TLS:

  • Locally: install the CA root in your OS trust store (macOS Keychain, Windows Cert Store, or update-ca-certificates on Linux). hass-mcp picks it up automatically via truststore.

  • In Docker (or any sandboxed runtime): bind-mount the CA file and point SSL_CERT_FILE at it.

docker run --rm \
  -v /path/to/your-ca.crt:/etc/ssl/certs/your-ca.crt:ro \
  -e SSL_CERT_FILE=/etc/ssl/certs/your-ca.crt \
  -e HA_URL=https://homeassistant.example.internal:8123 \
  -e HA_TOKEN=YOUR_LONG_LIVED_TOKEN \
  voska/hass-mcp:latest

SSL_CERT_FILE always takes precedence over the OS store when set. verify=False is intentionally not supported — use HA_URL=http://... if you genuinely want unencrypted local LAN traffic.

Usage Examples

Here are some examples of prompts you can use with Claude once Hass-MCP is set up:

  • "What's the current state of my living room lights?"

  • "Turn off all the lights in the kitchen"

  • "What's the temperature in the master bedroom?"

  • "List everything in the guest room"

  • "List all my sensors that contain temperature data"

  • "Give me a summary of my climate entities"

  • "Create an automation that turns on the lights at sunset"

  • "Help me troubleshoot why my bedroom motion sensor automation isn't working"

  • "Search for entities related to my living room"

  • "Show me the last 50 ERROR lines from the Home Assistant log"

  • "What's been failing on the mqtt integration today?"

  • "Show me power usage by day for the last month"

  • "What happened with the front door sensor last Tuesday?"

Available Tools

Hass-MCP provides several tools for interacting with Home Assistant:

  • get_version: Get the Home Assistant version

  • get_entity: Get the state of a specific entity with optional field filtering

  • entity_action: Perform actions on entities (turn on, off, toggle)

  • list_entities: Get a list of entities with optional domain filtering and search

  • search_entities_tool: Search for entities matching a query

  • domain_summary_tool: Get a summary of a domain's entities

  • list_automations: Get a list of all automations

  • call_service_tool: Call any Home Assistant service

  • restart_ha: Restart Home Assistant

  • get_history: Get the state history of an entity (last N hours)

  • get_history_range: Get state-change history for an entity over an explicit date/time range (start_time / end_time, ISO-8601)

  • get_statistics: Get long-term aggregated statistics (mean / min / max per bucket) for an entity over the last N hours — works for data older than the recorder's short-term retention window

  • get_statistics_range: Same, but for an explicit date/time range — useful for monthly / yearly trend queries

  • get_error_log: Get the Home Assistant error log, with optional level / integration / search_term / lines filters applied server-side so noisy logs don't blow Claude's context

  • get_entities_by_area: List entities in a specific area / room

Dashboard (Lovelace) Editing

Read and live-edit dashboards over Home Assistant's WebSocket API. Saving pushes the change to every open browser instantly — no restart.

  • list_dashboards: List dashboards (the default plus any user dashboards), each with its url_path and mode (storage / yaml)

  • get_dashboard_config: Get a dashboard's full config

  • set_dashboard_config: Replace a dashboard's full config (low-level)

  • add_card / update_card / remove_card / move_card: Edit cards within a view (the view is selected by index, or by its path / title)

  • list_view_sections: List the sections of a "sections"-type view

  • add_view / remove_view / update_view: Edit a dashboard's views

  • list_dashboard_backups / restore_dashboard: List and roll back to the automatic pre-save backups

Sections views: Home Assistant's modern view type (type: sections) stores its cards inside sections rather than a single top-level list. For those views, call list_view_sections and pass the section argument (index, title, or heading) to the card tools. Card edits on a sections view without a section are rejected with the list of available sections — rather than silently saving a card where it would never render.

Every editing tool accepts dry_run=true to preview the resulting config and a change summary without saving.

Important notes:

  • Admin token required. Saving Lovelace config requires the long-lived token to belong to an admin user.

  • Storage-mode only. Only UI-managed ("storage") dashboards can be edited. YAML-mode dashboards are detected and rejected with a clear message — edit their YAML files directly instead.

  • Whole-config writes. Home Assistant has no partial-edit API; every change is a read-modify-write of the entire dashboard. The high-level card/view tools handle this for you.

  • Automatic backups. Before each write, the current config is saved to HASS_MCP_BACKUP_DIR (default ~/.hass-mcp/dashboard-backups/). When running in Docker, mount a volume at this path or backups are lost when the container is recreated.

Prompts for Guided Conversations

Hass-MCP includes several prompts for guided conversations:

  • create_automation: Guide for creating Home Assistant automations based on trigger type

  • debug_automation: Troubleshooting help for automations that aren't working

  • troubleshoot_entity: Diagnose issues with entities

  • routine_optimizer: Analyze usage patterns and suggest optimized routines based on actual behavior

  • automation_health_check: Review all automations, find conflicts, redundancies, or improvement opportunities

  • entity_naming_consistency: Audit entity names and suggest standardization improvements

  • dashboard_layout_generator: Create optimized dashboards based on user preferences and usage patterns

Available Resources

Hass-MCP provides the following resource endpoints:

  • hass://entities/{entity_id}: Get the state of a specific entity

  • hass://entities/{entity_id}/detailed: Get detailed information about an entity with all attributes

  • hass://entities: List all Home Assistant entities grouped by domain

  • hass://entities/domain/{domain}: Get a list of entities for a specific domain

  • hass://search/{query}/{limit}: Search for entities matching a query with custom result limit

Development

Running Tests

uv run pytest tests/

License

MIT License

Available Tools

16 tools
call_service_toolA

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}

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
domainYes
serviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

There are no annotations, so the description must carry the full burden of behavioral disclosure. It mentions 'low-level API access' but does not disclose potential side effects, permissions, reversibility, or error handling. Given the generic nature of the tool, this is insufficient transparency.

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

Conciseness5/5

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

The description is concise and well-structured with clear sections (Args, Returns, Examples). It avoids unnecessary verbosity while providing essential usage information, making it easy to parse.

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

Completeness4/5

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

For a generic service-call tool, the description provides sufficient context: what the tool does, how to use parameters, what to expect in the return value, and clear examples. It does not cover edge cases or failure modes, but given the broad scope ('any service'), the level of detail is adequate.

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?

The description explains each parameter (domain, service, data) with examples, adding meaning beyond the bare schema (which only has titles). It clarifies how to structure the data dictionary, though it does not exhaustively list allowed service names or data fields, which is reasonable for a generic tool.

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 purpose: 'Call any Home Assistant service (low-level API access)'. It identifies the verb (call) and the resource (Home Assistant service), and distinguishes itself from sibling tools that are more specific (e.g., list, get, update).

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

Usage Guidelines3/5

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

The description provides examples of usage but does not explicitly state when to use this tool versus more specific sibling tools. It implies it is a catch-all for services without dedicated tools, but this is not explicitly stated, leaving some ambiguity.

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

domain_summary_toolA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYes
example_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description must convey the tool's behavior. It states it returns a summary, which implies a read-only operation, but it does not explicitly mention that it is non-destructive, any side effects, or permissions required. Given the read-only nature, a 3 is appropriate as it covers the essential behavior but lacks explicit guarantees.

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

Conciseness5/5

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

The description is concise and well-organized. It includes the purpose, parameter descriptions, return structure, an example, and a best practice—all in a compact format with no unnecessary verbiage. The structure is clear and easy to parse.

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

Completeness4/5

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

The description covers the tool's purpose, arguments, return values, and a usage example, which is sufficient for a simple summary tool. It does not discuss error handling or edge cases, but these are not critical for the tool's primary function. The return structure is described in the 'Returns' section, making the output expectations clear.

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?

Both parameters are explained in the description: 'domain' is described as 'The domain to summarize' with examples, and 'example_limit' as 'Maximum number of examples to include for each state.' This provides sufficient meaning beyond the raw schema, though the concept of 'state' is not elaborated further.

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 function: 'Get a summary of entities in a specific domain.' It uses a specific verb ('get') and resource ('summary of entities'), and is distinct from sibling tools like list_entities or get_entity by focusing on aggregated summary data rather than individual records.

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 a specific best practice: 'Use this before retrieving all entities to understand what's available.' This gives clear guidance on when to use the tool, though it does not explicitly mention when not to use it or compare with alternative tools. The example also demonstrates typical usage.

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

entity_actionA

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
paramsNo
entity_idYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description is the sole source of behavioral disclosure. It mentions the action and return value but does not disclose side effects, required permissions, error behavior for invalid actions or missing entities, or whether the operation is reversible. For a mutation tool, this is a safety-relevant gap.

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 well-organized with a one-line summary, argument breakdown, return statement, examples, and domain-specific details. It remains scannable, though the domain-specific section slightly duplicates what the examples already show (e.g., brightness appears in both). No unnecessary filler.

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

Completeness3/5

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

For a tool with no annotations and no output schema, the description thoroughly covers parameter semantics but leaves important gaps: the return value is vaguely 'The response from Home Assistant', error and edge-case behavior is absent, and it does not clarify when to use this versus call_service_tool. It is adequate but not fully complete.

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?

Schema description coverage is 0%, so the description is the only source of parameter meaning. It explains each argument, provides concrete entity_id examples, enumerates valid action values, defines params as an optional dictionary, and gives domain-specific parameter details (brightness, temperature, position, etc.) — far exceeding the bare schema.

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 opening sentence clearly states the tool's function: 'Perform an action on a Home Assistant entity (on, off, toggle)'. The examples with entity_id and action values make the scope unmistakable, and the domain-specific parameters distinguish it from read tools like get_entity and the broader call_service_tool.

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

Usage Guidelines3/5

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

The examples and domain-specific parameter list imply usage contexts (lights, covers, climate, media players), but the description never explicitly compares this tool to sibling call_service_tool or states when to prefer one over the other. The usage guidance is mostly inferred rather than explicit.

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

get_entities_by_areaA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
areaYes
leanNo
domainNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full disclosure burden and largely succeeds: it reveals the non-obvious parent-device inheritance behavior, case-insensitive matching, and the meaning of the lean parameter's token efficiency. It clearly describes the return structure. Only minor gaps remain (e.g., behavior for nonexistent areas, pagination), keeping it just short of a 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 description is well-organized with a one-line summary followed by standard docstring sections (Args, Returns, Examples) that are easily scannable. It is slightly verbose for a tool description, but every section earns its place, and the examples are instructive without being padded.

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?

For a 3-parameter query tool, the description is thorough: all parameters are documented with extra semantics, the return structure is specified, behavioral edge cases (inheritance, case folding) are covered, and actionable examples are provided. With an output schema available, nothing material is left unaddressed.

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 must compensate — and it does thoroughly. It adds case-insensitivity semantics to 'area', clarifies 'domain' as a secondary filter with an example, and explains 'lean' as producing 'token-efficient entity records.' The examples further demonstrate parameter composition, adding meaning well beyond the bare boolean/string types in the schema.

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?

"Get all entities assigned to a specific Home Assistant area (room)" uses a specific verb+resource and clearly scopes the operation to area-based lookups, distinguishing it from siblings like get_entity (single entity), search_entities_tool, and domain_summary_tool. The opening line is immediately identifiable in purpose with no ambiguity.

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

Usage Guidelines3/5

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

The description provides solid functional context (case-insensitive matching, parent-device inheritance) but never explicitly guides tool selection versus overlapping siblings like search_entities_tool, list_entities, or domain_summary_tool. Usage is implied through the detailed behavior rather than stated — no when-to-use or when-not-to-use guidance or named alternatives.

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

get_entityA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
detailedNo
entity_idYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains optional field filtering, the meaning of detailed=True, and provides concrete examples. It does not discuss error behavior or permissions, but for a simple read-oriented getter the core behavior is transparently described.

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

Conciseness5/5

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

The description is front-loaded with a one-sentence summary, followed by a compact Args section and three illustrative examples. Every sentence adds value, and the structure makes the tool's behavior immediately scannable.

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

Completeness4/5

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

For a tool with three parameters, no output schema, and no annotations, the description covers the main usage patterns and return behavior reasonably well. It could be more explicit about the exact shape of the response for a basic state check, but the examples and detailed flag explanation make it sufficiently complete for an agent to invoke correctly.

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?

Schema description coverage is 0%, so the description must compensate, and it does thoroughly. Each parameter is explained with type context and examples: entity_id is shown as 'light.living_room', fields as ['state', 'attr.brightness'], and detailed is described as returning all fields without filtering. This adds significant meaning beyond the bare schema.

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 opens with a specific verb and resource: 'Get the state of a Home Assistant entity with optional field filtering.' This clearly distinguishes it from sibling tools like list_entities or search_entities_tool, which operate over collections rather than a single entity.

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

Usage Guidelines3/5

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

The description implies usage for retrieving a single entity's state, and examples clarify common calls, but it does not explicitly state when to prefer this tool over alternatives like list_entities or get_entities_by_area, nor does it mention exclusions. Usage guidance is only implied, not explicit.

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

get_error_logA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNo
linesNo
integrationNo
search_termNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With NO annotations, the full burden falls on the description — and it delivers. Key subtleties are disclosed: 'All filters are optional and combine (AND semantics)', and stats 'are computed over the filtered output so they match what's returned' (prevents the classic off-by-one confusion of counts vs. full log). Case-insensitivity is noted per filter, the return dict is fully documented including the `error` key for failure, and the Examples clarify default behavior with no args.

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

Conciseness5/5

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

Perfectly front-loaded single sentence, then a logical docstring structure: semantics → Args → Returns → Examples → Best Practices. Every section earns its place — the 'AND semantics' and 'computed over the filtered output' notes are exactly the kind of non-obvious detail an agent needs. It's long, but at this density, the length is information-carrying, not waste.

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?

For a 4-optional-param read-only tool, the coverage is exhaustive: parameter semantics, return-value structure, error key, and 5 concrete usage examples. Covers edge considerations like token efficiency when scanning long-running HAs. Given a documented return schema (output_schema exists) the returns section reaffirms rather than compensates. The only marginal gaps (e.g., rate limits, auth scope) are not applicable to a local log reader.

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?

Schema description coverage is 0% (types only), so the description was required to compensate — and it does so comprehensively. Each of the 4 parameters is documented with its valid values (``ERROR, WARNING, INFO, or DEBUG``), matching patterns (``[name]`` or ``[homeassistant.components.name]``), case-insensitivity, and ordering semantics ('applied after other filters'). The 'Examples' section demonstrates useful combinations and the Examples make the semantics concrete. This is a model of how to document params when the schema is uninformative.

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 opening sentence — 'Get the Home Assistant error log for troubleshooting' — uses a specific verb (Get) + specific resource (Home Assistant error log) + clear purpose (troubleshooting). The description clearly separates this from sibling tools like get_history, get_statistics, and list_entities. No ambiguity about what this tool does.

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 Best Practices section gives actionable runtime guidance: server-side filtering 'to save tokens on noisy logs,' a triage pattern ('Combine integration + level="ERROR"'), and bounding output with `lines`. However, it never explicitly names alternatives or tells the agent when NOT to use this tool versus a sibling like get_history. Strong parameter-usage guidance, but no 'when to use alternative X instead' framing.

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

get_historyA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
entity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return structure and offers practical advice (e.g., keep hours 24-72 for token efficiency), but it does not explicitly state that the operation is read-only, what happens on invalid entity IDs, or any rate limits. This partial disclosure warrants a middle score.

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 well-organized into Args, Returns, Examples, and Best Practices, with the core purpose front-loaded. It is slightly verbose in the return section, but every sentence adds useful context and the structure is easy to scan.

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

Completeness4/5

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

For a simple read tool with a 2-parameter schema, the description covers purpose, parameters, output structure, examples, and performance guidance. However, it omits error conditions and does not clarify how this tool differs from the sibling get_history_range, leaving a contextual gap.

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 description coverage, the description fully compensates by explaining entity_id and hours, including the default value and example usages. This goes far beyond the schema field names and provides clear operational semantics.

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

Purpose4/5

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

The description clearly states 'Get the history of an entity's state changes' with a specific verb and resource, and the arguments define the scope. It does not explicitly contrast with the sibling get_history_range, so it cannot earn a 5.

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

Usage Guidelines2/5

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

The description provides 'Best Practices' about entity types and token efficiency, but it never states when to use get_history versus the alternative get_history_range or get_statistics. Without explicit exclusionary or alternative guidance, usage context remains unclear.

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

get_history_rangeA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_timeNo
entity_idYes
start_timeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds context about the single-timestamp invocation (start_time defaults end to now), UTC-casting of naive timestamps, the return shape, and the performance/token tradeoff of wide windows. It stops short of explicitly declaring read-only semantics, but the behavior is adequately disclosed.

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

Conciseness5/5

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

The description uses clear Markdown-style section headers (Args, Returns, Examples, Best Practices) that front-load the purpose while keeping details scannable. Two runnable examples demonstrate both single-date and explicit-timestamp forms, and every sentence earns its place — no filler or redundant restatements.

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?

For a 3-parameter tool with no schema documentation, the description covers all necessary operational concerns: parameter formats, output shape, performance implications, and when to prefer an alternative. The return type is acknowledged and tied to the sibling `get_history`, reinforcing consistency. Nothing material is left unaddressed.

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?

Despite 0% schema coverage, the description fully documents all three parameters with ISO-8601 format examples (`2026-05-15` vs `2026-05-15T08:00:00Z`), timezone handling ('Treated as UTC if no offset'), and the default for end_time ('Defaults to now (UTC)'). This exactly compensates for the schema's minimal property metadata and even enriches it with semantic details like 'raw' history.

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 opening line 'Get raw state-change history for an entity over a date/time range' uses a specific verb plus resource and clearly differentiates from the sibling `get_history` by emphasizing the explicit window parameter. The phrasing 'Like get_history, but takes an explicit window' explicitly distinguishes it from its sibling, making the purpose unmistakable.

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?

The description explicitly states when to use this tool ('inspecting what happened on a specific day or correlating with an external event') and names an alternative: 'For aggregated long-term data, prefer get_statistics_range instead.' This gives the agent clear, actionable selection criteria beyond what any structured field could convey.

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

get_statisticsA

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNo
periodNohour
entity_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the transparency burden and handles it well: it explains the underlying mechanism (HA recorder statistics over WebSocket), the retention-window behavior, and the prerequisite state_class requirement. It does not explicitly state side-effect or rate-limit behavior, though 'Get' and the described mechanics clearly imply a read-only operation.

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

Conciseness5/5

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

The description is longer than average but is tightly organized into purpose, usage guidance, args, return shape, and examples. Every section contributes necessary information, and the key purpose and alternative guidance are front-loaded.

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?

For a three-parameter statistics tool with no annotations, the description provides complete context: when to use it, all parameter details, the expected return structure, and two realistic examples. The output shape is described even though an output schema is present, making the tool self-contained.

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?

Schema description coverage is 0%, but the Args section fully compensates by documenting entity_id's required state_class values, hours' meaning and default, and period's allowed bucket sizes and default. This adds substantial meaning beyond the bare schema and gives the agent actionable constraints.

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 first sentence clearly states the tool's action ('Get'), resource type ('long-term aggregated statistics for an entity'), and scope ('over the last N hours'). It also explicitly contrasts with the get_history sibling by naming the alternative, making the purpose distinct.

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?

The description explicitly says 'Use this instead of get_history when' and lists three concrete conditions: data older than the 10-day window, aggregate values needed, or high-frequency sensors with token-heavy raw history. This gives clear guidance on when this tool is preferred over a key sibling.

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

get_statistics_rangeA

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNohour
end_timeNo
entity_idYes
start_timeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It explains that aggregated bucket data survives the short-term retention window, which is useful. However, it does not disclose potential errors (e.g., if entity is not statistics-tracked beyond a general note), rate limits, or whether this is a read-only operation. Since the context implies a read-only query, but no explicit statement is made, the transparency is adequate but not comprehensive.

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 well-structured with sections for purpose, args, returns, and examples. It is detailed but not bloated. It includes exactly the necessary information without repetition. The only minor issue is the extra line about retention, which is useful but could be seen as slightly beyond essential, but it still earns its place. Overall it is efficient and well-organized.

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

Completeness4/5

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

The tool has a moderate complexity with 4 parameters, an output schema exists, and no annotations. The description covers the essential context: what it does, parameter semantics, examples, and a comparison to a sibling. The only missing piece is explicit error conditions or limitations (e.g., what if end_time is before start_time), but the provided info is sufficient for most use cases. Given the presence of an output schema, the description doesn't need to explain return values in detail. It is complete for a typical agent's needs.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It provides definitions for all four parameters: entity_id ('must be statistics-tracked'), start_time (ISO-8601 format with UTC default), end_time (defaults to now), and period (lists valid values). The examples also illustrate usage. This adds value beyond the schema, which only has titles. However, it doesn't add details like end_time inclusion/exclusion semantics or period effect on output granularity, so a 3 is appropriate.

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 explicitly states 'Get long-term aggregated statistics for an entity over a date/time range.' It names the resource (statistics for an entity) and the action (retrieve over a range), and distinguishes itself from the sibling `get_statistics` by clarifying it uses an explicit window. This clearly separates it from other tools like `get_history_range`.

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?

The description provides a clear comparison to `get_statistics` (same data source but with explicit window) and includes concrete use case examples ('what was my power usage from Jan 1 to Jan 31?'). It also notes the data survival beyond short-term retention, implying when to use this tool for historical data. While it doesn't explicitly say 'when not to use', the contrast with `get_statistics` and the focus on long-term range queries provide strong guidance.

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

get_versionA

Get the Home Assistant version

Returns: A string with the Home Assistant version (e.g., "2025.3.0")

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. The description does mention the return value type (a string) and provides an example format, which is helpful. However, it does not disclose any potential side effects (unlikely), authentication requirements, or error behavior. For a simple read-only tool, this is somewhat acceptable, but it could be more explicit about being a read-only, non-mutating operation. With no annotations, a score of 3 is reasonable as the description adds value by specifying the output format, but it lacks deeper behavioral context.

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

Conciseness5/5

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

The description is extremely concise: one line stating the purpose and one line describing the return value with an example. Every sentence earns its place. It is front-loaded with the purpose, making it easy for an agent to quickly understand what the tool does.

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

Completeness4/5

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

The tool is extremely simple: no parameters, no complex logic, and it has an output schema. The description is complete enough for an agent to understand what it does and what it returns. However, it lacks any guidance on when to use it (e.g., 'Use to verify connectivity' or 'Use before version-specific calls'). Given the complexity is low, this is nearly complete, but a small piece of usage context would make it fully complete.

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?

The tool has zero parameters, and schema description coverage is 100% (auto). The description doesn't need to explain parameters. It does add meaning by describing the return value and providing an example, which is beneficial given the tool's simplicity. With no parameters, the baseline is 4, and the description meets that baseline by clarifying the output.

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

Purpose4/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: to get the Home Assistant version. It uses a specific verb and resource, and it's distinct from the sibling tools (e.g., system_overview, get_error_log). The description could be improved by explicitly stating that it returns the core version string of Home Assistant, but the purpose is evident.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention any specific context or prerequisites. For a simple version-check tool, some implied usage exists (e.g., checking compatibility before calling other tools), but it is not explicit. Given the sibling tools like system_overview or restart_ha, it might be useful to note that this tool is a lightweight way to confirm the Home Assistant instance is accessible and its version.

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

list_automationsA

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of disclosing behavior. It states it returns a list of dictionaries with specific fields, which is useful. However, it does not mention that the operation is read-only (implied but not stated), any performance implications, or potential for large result sets. The description adds minimal behavioral context beyond the return structure.

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

Conciseness3/5

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

The description has redundancy: the first sentence 'Get a list of all automations' is repeated by 'This function retrieves all automations'. The 'Examples' section is not an example but a restatement of behavior. The Returns section is informative, but the overall structure could be more efficient without losing meaning.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, no nested objects) and availability of an output schema, the description provides sufficient coverage: it states exactly what it returns and the fields included. It lacks details like ordering or pagination, but these are likely irrelevant for a list of automations. The description is complete enough for an agent to understand the tool's function and output.

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?

The tool has zero parameters and the schema coverage is 100% (vacuously). The description correctly omits parameter details since there are none. According to the calibration, a baseline of 4 is appropriate for 0 parameters, and the description does not need to compensate for anything missing.

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 first sentence clearly states the verb ('Get a list') and the resource ('all automations from Home Assistant'). The second sentence reinforces the scope and includes specific fields ('IDs, entity IDs, state, and display names'). This distinguishes it from sibling tools like list_entities or list_dashboards, which target different resource types.

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 implicitly communicates that this tool is for automations, not other entities, which distinguishes it from sibling tools. However, it does not explicitly state when not to use it or provide alternative guidance. Given the simplicity of the tool, the implied context is adequate but not fully explicit.

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

list_entitiesA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
domainNo
fieldsNo
detailedNo
search_queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that search_query does not support wildcards, that default returns lean formatting, and that detailed=True returns all fields. It also notes that to get all entities, leave search_query empty. This is good behavioral context, though it doesn't mention pagination or rate limits, which are not critical for a list operation.

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 well-structured with sections for Args, Returns, Examples, and Best Practices. It is front-loaded with the core purpose and then provides details. It is slightly verbose with the best practices section, but each sentence adds value. The examples are concise and illustrative.

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

Completeness4/5

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

Given the tool's complexity (5 optional parameters, no required ones) and the presence of an output schema, the description is fairly complete. It covers parameter semantics, return format (lean vs detailed), and usage guidance. It could mention the output schema's structure, but the output schema itself provides that. The description adequately prepares the agent for correct invocation.

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 description coverage is 0%, so the description must compensate. It explains each parameter's purpose: domain, search_query (with wildcard note), limit (default 100), fields, and detailed. It also provides examples showing parameter combinations. This adds significant meaning beyond the schema, though it could be more explicit about the fields parameter's format.

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 a list of Home Assistant entities with optional filtering.' It specifies the resource (Home Assistant entities) and the action (list), and distinguishes it from siblings like search_entities_tool and domain_summary_tool by mentioning filtering and domain overviews.

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?

The description provides explicit usage guidance: it includes best practices such as 'Prefer domain filtering over no filtering' and 'For domain overviews, use domain_summary_tool instead of list_entities.' It also explains when to use detailed=True and how to get all entities, which helps the agent choose between this and alternatives.

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

restart_haA

Restart Home Assistant

⚠️ WARNING: Temporarily disrupts all Home Assistant operations

Returns: Result of restart operation

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It discloses the significant side effect of disrupting all operations and states the return type, which is key information for an agent deciding to invoke it.

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

Conciseness5/5

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

The description is extremely concise, containing only the essential elements: action, warning, and return. No redundant or extraneous text, and the structure is clear with a labeled warning and return.

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

Completeness4/5

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

The description covers the core behavior (restart), the side effect (temporary disruption), and the return (result). Given the tool's simplicity and lack of output schema, this is sufficiently complete without being verbose.

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?

The input schema has zero parameters, so the description's silence on parameters is appropriate. According to the rubric, a baseline of 4 applies when no parameters exist, and no additional explanation is needed.

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 action ('Restart Home Assistant') using a verb+resource format, and it is distinct from all sibling tools which focus on dashboards, entities, and other specific operations.

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

Usage Guidelines3/5

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

The warning about temporary disruption implies a maintenance context, but there is no explicit statement of when to use this tool versus alternatives (e.g., when a restart is needed vs. other recovery actions). The guidance is implicit rather than explicit.

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

search_entities_toolA

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden of explaining behavior. It discloses the return structure, the lack of wildcard support, and the effect of leaving query blank, but does not explicitly state read-only nature, though it is implied.

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 well-organized with sections for args, returns, and examples. It is somewhat detailed but each part adds value, making it appropriately concise without being overly verbose.

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 and the lack of annotations, the description is remarkably complete. It covers functionality, parameters, return format, limitations, and alternatives, leaving little ambiguity for the agent.

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?

The description adds significant meaning to both parameters: query is explained as matching against IDs, names, and attributes, and limit is defined as a maximum result count with a default. It also clarifies edge cases like blank query.

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 function: searching for entities by a query string. It also differentiates from sibling tools like list_entities by explicitly noting the alternative for retrieving all entities.

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?

The description provides explicit guidance on when to use the tool, including a note about wildcard limitations and a clear alternative (list_entities) for fetching all entities. Examples illustrate typical usage.

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

system_overviewA

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It explains the return structure in detail (dictionary with keys) and notes that area distribution is included 'if available'. While it doesn't disclose any side effects or performance implications, for a read-only overview tool this is adequate; a slight deduction for not noting potential size or latency.

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 well-structured with Returns, Examples, and Best Practices sections, and it is appropriately sized for the complexity. It is not overly verbose, but the 'Examples' line is redundant with the 'Returns' section, which costs one point.

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?

The tool has no parameters and an output schema is present, so the description's role is largely to explain the output semantics and usage context. It does both excellently: it enumerates all returned fields and gives clear guidance on when to use it. The output schema covers the structure, and the description adds the 'if available' nuance and the workflow suggestion.

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?

The tool has zero parameters, so there are no param semantics to document. The description adds value by explaining the return structure, which the input schema cannot do. Baseline for 0 params is 4, and the description fully compensates by detailing what the output contains.

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 starts with a clear verb and resource: 'Get a comprehensive overview of the entire Home Assistant system.' It distinguishes from siblings by explicitly positioning it as the first call for exploration, and it lists the returned fields, making the purpose unmistakable.

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 Best Practices section explicitly says to use it as the first call when exploring an unfamiliar instance and to then use domain_summary_tool for deeper dives. However, it doesn't explicitly state when not to use it or name alternatives beyond domain_summary_tool, though the context is clear.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.4.1
    • Changedcall_service_tool2 fields changed
      • changedInput schema / properties / data / anyOf
        Previous value: -[
        -  {
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "call_service_toolOutput",
        +  "type": "object"
        +}
    • Changeddomain_summary_tool1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "domain_summary_toolOutput",
        +  "type": "object"
        +}
    • Changedentity_action1 field changed
      • changedInput schema / properties / params / anyOf
        Previous value: -[
        -  {
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Addedget_entities_by_area
    • Changedget_error_log5 fields changed
      • addedInput schema / properties / integration
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Integration"
        +}
      • addedInput schema / properties / level
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Level"
        +}
      • addedInput schema / properties / lines
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Lines"
        +}
      • addedInput schema / properties / search_term
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Search Term"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "get_error_logOutput",
        +  "type": "object"
        +}
    • Changedget_history1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "get_historyOutput",
        +  "type": "object"
        +}
    • Addedget_history_range
    • Addedget_statistics
    • Addedget_statistics_range
    • Changedget_version1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "title": "Result",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "get_versionOutput",
        +  "type": "object"
        +}
    • Changedlist_automations1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "list_automationsOutput",
        +  "type": "object"
        +}
    • Changedlist_entities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "list_entitiesOutput",
        +  "type": "object"
        +}
    • Changedrestart_ha1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "restart_haOutput",
        +  "type": "object"
        +}
    • Changedsearch_entities_tool1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "search_entities_toolOutput",
        +  "type": "object"
        +}
    • Changedsystem_overview1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "result": {
        +      "additionalProperties": true,
        +      "title": "Result",
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "system_overviewOutput",
        +  "type": "object"
        +}
  2. 12 tool updates
    • First observedcall_service_tool
    • First observeddomain_summary_tool
    • First observedentity_action
    • First observedget_entity
    • First observedget_error_log
    • First observedget_history
    • First observedget_version
    • First observedlist_automations
    • First observedlist_entities
    • First observedrestart_ha
    • First observedsearch_entities_tool
    • First observedsystem_overview

TDQS

A4.2/5.0

Scored across 16 tools

Disambiguation5/5

Each tool has a clearly distinct purpose. Entity action vs call_service are differentiated by abstraction level. Query tools (get_entity, list_entities, search, domain_summary) serve different scopes. History and statistics tools are clearly separated for raw vs aggregated data and relative vs absolute time ranges.

Naming Consistency4/5

Most tools follow a consistent snake_case verb_noun pattern (e.g., get_entity, list_entities, search_entities_tool). Exceptions like 'entity_action' and 'domain_summary_tool' deviate from the predominant pattern, causing minor inconsistency.

Tool Count5/5

With 16 tools, the server covers a broad but focused set of capabilities for Home Assistant: entity control, querying, history, statistics, system management, and error logs. The count is well-proportioned—neither sparse nor bloated.

Completeness4/5

The tool set covers primary Home Assistant workflows: entity control, state retrieval, history/statistics, automation listing, and system operations. Minor gaps exist, such as no tools for creating or modifying automations/scripts, but the core monitoring and control use cases are well supported.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A server that enables interaction with Home Assistant devices and automations through the Model Context Protocol, allowing users to monitor device states, control devices, trigger automations, and list entities.
    4
    48
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that integrates with Home Assistant to provide smart home control capabilities through natural language, supporting devices like lights, climate systems, locks, alarms, and humidifiers.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A self-hosted MCP server for Home Assistant that exposes full control over entity states, service calls, history, templates, and areas via local stdio, enabling AI assistants to manage your smart home.
    9
    89 npm
    MIT