hass-mcp
hass-mcp
Home Assistant를 제어하고 쿼리하기 위한 오픈 소스 MCP 서버입니다.
전송: stdio
인증: Home Assistant 장기 토큰(long-lived token)
API: Home Assistant REST API
기능
제공되는 도구:
ha_get_state— 엔티티의 상태 가져오기ha_list_states— 모든 상태 나열 (데이터가 많을 수 있음)ha_call_service— 서비스 호출
Related MCP server: hass-mcp-server
설치
pnpm install
pnpm build실행
export HASS_URL="http://homeassistant.local:8123"
export HASS_TOKEN="<your long-lived access token>"
pnpm startMCP 클라이언트 설정
예시 (개념적):
{
"mcpServers": {
"homeassistant": {
"command": "npx",
"args": ["-y", "hass-mcp"],
"env": {
"HASS_URL": "http://homeassistant.local:8123",
"HASS_TOKEN": "..."
}
}
}
}보안
토큰을 비밀로 취급하십시오.
이 서버를 Home Assistant와 동일한 LAN에서 실행하는 것을 권장합니다.
HA가 Cloudflare Access 뒤에 있는 경우, 이 MCP 서버를 LAN 측에서 실행하십시오.
라이선스
MIT
Available Tools
16 toolsha_area_lights_offA
Turn off all lights in an area (by area_id).
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | ||
| transition | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action ('turn off') without mentioning how invalid area IDs are handled, whether only on-lights are affected, the effect of the optional transition parameter, or any side effects. This adds little beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that conveys the core functionality without extraneous words. It is front-loaded and easily parsed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no parameter descriptions, the description is not complete. It omits information about the transition parameter, possible return values, error conditions, and any prerequisites. While the tool is simple, there are clear gaps that could confuse an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two parameters with no descriptions: area_id (required string) and transition (optional number). The description mentions area_id but says nothing about transition, leaving its meaning (likely a fade time) undocumented. For a 0% schema coverage situation, the description only partially compensates for the missing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('turn off'), resource ('all lights in an area'), and method ('by area_id'). This distinctly differentiates it from sibling tools like ha_light_turn_off (single light) and ha_area_lights_on (opposite action).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: you would use this when you want to turn off all lights in an area and have an area_id. It does not explicitly list alternatives or exclusions, but the phrase 'all lights in an area' implies the appropriate scenario compared to single-light tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_area_lights_onA
Turn on all lights in an area (by area_id).
| Name | Required | Description | Default |
|---|---|---|---|
| area_id | Yes | ||
| brightness_pct | No | ||
| transition | No |
TDQS
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 states the core mutating action (turning on all lights) but does not disclose side effects, idempotency, permission requirements, or behavior for edge cases (e.g., no lights in area). This is adequate but minimal for a simple action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the essential purpose in nine words, making it exceptionally concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, no output schema, and zero schema description coverage, the one-sentence description is insufficient. It fails to explain the optional parameters (transition, brightness_pct) and any behavioral nuances, leaving significant gaps for an agent to correctly use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 only clarifies the role of area_id implicitly, but transition and brightness_pct are left completely unexplained. The schema provides types/constraints but no semantic meaning, so the description adds minimal value beyond echoing the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Turn on'), the resource ('all lights in an area'), and the key qualifier ('by area_id'), which distinguishes it from sibling tools like ha_light_turn_on (single light) and ha_area_lights_off (turning off).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: this is for area-wide light control, distinct from individual light control. However, it does not explicitly state alternatives or exclusions, so it falls short of a perfect score but provides clear enough context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_call_serviceC
Call a Home Assistant service (domain/service) with data payload.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| service | Yes | ||
| data | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states 'Call' without revealing side effects, permissions, return values, or error behavior. This is a significant transparency gap for an action that can trigger arbitrary home assistant services.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Every term ('domain', 'service', 'data payload') directly maps to parameters, making it efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic service-call tool with no output schema and no annotations, the description is too sparse. It omits that data keys are service-specific, that calling a service may have side effects, and that it can be used for custom services not exposed as dedicated tools. Incomplete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions 'data payload' for the data parameter, but domain and service are only named, not explained. No examples, value formats, or constraints beyond the schema are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action ('Call'), a resource ('Home Assistant service'), and the primary inputs ('domain/service' and 'data payload'). It is implicitly distinguished from sibling tools like ha_light_turn_on by being generic, but it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus specific service tools or other siblings. It doesn't mention conditions, prerequisites, or exclusions, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_get_error_logsB
Fetch the latest Home Assistant error logs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, side effects, or authentication needs. It only states 'Fetch', implying a read operation but without explicit confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is efficient for a tool with no parameters. However, it could include slightly more context without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks details about the output format, what 'latest' means (e.g., number of logs, time range), and any filtering. Given no output schema, the description should clarify the return value but does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema coverage is 100%. The description adds no parameter-specific meaning, but since there are no parameters, a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches the latest Home Assistant error logs, using a specific verb and resource. It is distinct from sibling tools which focus on lights, services, states, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives or when to avoid it. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_get_historyC
Fetch history since an ISO time (optionally for an entity).
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ||
| end | No | ||
| entity_id | No | ||
| minimal_response | No |
TDQS
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 'since' expects an ISO time and that entity filtering is optional, but it omits critical behavioral details: the response format, what 'end' and 'minimal_response' do, whether all entities are returned if entity_id is omitted, and any limitations on result size. The read-only nature is only implied by the verb 'Fetch', not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of only 12 words and is efficiently front-loaded with the action and key parameters. However, it is too terse for a tool with four parameters and no annotations, crossing from conciseness into under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no annotations, and no output schema, the description omits crucial context: the meaning of 'end', the effect of 'minimal_response', the default scope when entity_id is absent, and the structure of the return value. An agent would lack sufficient information to use this tool correctly without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 'since' as an ISO time and 'entity_id' as an optional filter, covering two of four parameters. However, 'end' and 'minimal_response' are left completely undefined, and the description does not provide enough detail to fully understand expected values or behaviors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and identifies the resource as 'history', with clear qualifiers: 'since an ISO time' and 'optionally for an entity'. This distinguishes it from siblings like ha_get_state (current state) and ha_list_states (all states). A minor gap is not specifying the exact nature of the history (e.g., state changes), but the purpose is largely unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like ha_get_state or ha_get_logbook. The intended usage is implied by the tool's name and description (fetch historical states), but no alternative tools are mentioned, nor are exclusions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_get_logbookA
Fetch logbook entries since an ISO time (optionally for an entity).
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ||
| end | No | ||
| entity_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states an action ('Fetch') that implies a read-only operation, but it does not explicitly confirm non-destructiveness, return format, pagination, or any special behaviors. For a simple fetch, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the verb and key concept. It contains no fluff and every word adds meaning. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 3 parameters and no output schema. The description covers the primary use and the 'since' parameter, but omits the 'end' parameter and does not explain return values or how this differs from the sibling 'ha_get_history'. Given the lack of annotations and output schema, more detail would be helpful for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 3 string parameters with no descriptions (0% coverage). The description clarifies that 'since' is an ISO time and that 'entity_id' is optional for filtering. However, the 'end' parameter is not mentioned, leaving its purpose ambiguous. The description partially compensates for the schema gap but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fetch logbook entries since an ISO time (optionally for an entity)' clearly states the verb (Fetch), resource (logbook entries), and scope (since ISO time, optional entity filter). It distinguishes itself from sibling tools like ha_get_state and ha_get_history by referencing logbook entries specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need logbook entries based on a temporal boundary and optionally an entity. It does not explicitly mention alternatives or exclusions, but the context is clear. Since sibling tools like ha_get_history exist, mentioning when to prefer this over them would improve the score, but it is not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_get_stateB
Get Home Assistant entity state by entity_id.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond the basic action. It lacks context about return format, error handling, or safety, which matters when no annotations are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is front-loaded with the action and parameter, making it appropriately concise for a simple get operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple (one parameter, no output schema), the description is too sparse to fully equip an agent. It does not explain what the returned state looks like, what happens if the entity is not found, or how this tool relates to similar state-list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description only restates that the tool uses 'entity_id' without explaining the expected format (e.g., 'light.living_room') or providing any additional meaning beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get') and resource ('Home Assistant entity state') with a parameter ('by entity_id'). It distinguishes from siblings like ha_list_states (which lists all states) and ha_get_history (which retrieves historical states), so the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the description: use this tool when you need the current state for a specific entity_id. However, it does not explicitly state when to prefer this over alternatives or provide any exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_light_turn_offB
Turn off a light by entity_id.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and parameter, without mentioning what happens if the light is already off, whether the operation is reversible, if it could fail, or what the return value looks like. It does not contradict any annotations (since none exist), but it lacks important 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no unnecessary words. It is adequately sized for the tool's simplicity and front-loads the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a very simple tool with one parameter and no output schema. The description gives the essential information: turn off a light, and the entity_id is needed. However, it lacks any note about potential errors or side effects, and without usage guidelines it may not be fully complete in the context of the sibling tools. It meets minimum viability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for parameter meaning. The description says 'by entity_id' but does not explain what an entity_id is or its expected format (e.g., 'light.living_room'). It adds minimal value beyond the schema's basic type and required flag.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Turn off a light by entity_id.' It uses a specific verb and resource, making it unambiguous. The entity_id parameter is mentioned, and since sibling tools include ha_light_turn_on and ha_area_lights_off, the description effectively differentiates this as a single-light operation rather than an area-wide one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description does not mention that for turning off all lights in an area one should use ha_area_lights_off, nor does it state any prerequisites (e.g., the light must exist). This leaves the agent without context for choosing the correct tool among related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_light_turn_onC
Turn on a light by entity_id.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries full responsibility for disclosing behavior. It only states the action ('turn on') without mentioning side effects, error handling (e.g., invalid entity_id), state transitions, or any required permissions. The description adds no behavioral context beyond the literal action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the tool's purpose. It contains no filler or redundancy, making it well-structured and easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's low complexity, the description is incomplete: it lacks usage context, parameter format, and any note about errors or return behavior. The presence of sibling tools that could also turn on lights (e.g., ha_call_service) makes this minimal description insufficient for unambiguous agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description merely repeats 'entity_id' without explaining its format, expected values (e.g., 'light.living_room'), or how to obtain it. The description fails to add meaning beyond the parameter name, which is insufficient given the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: turning on a light. The verb 'turn on' and resource 'light' are specific, and the phrase 'by entity_id' indicates the scope. It differentiates from sibling tools like ha_light_turn_off and ha_area_lights_on by focusing on a single light entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as ha_area_lights_on or ha_call_service. There are no contextual cues about preferred use cases, prerequisites, or exclusions, leaving the agent to infer the tool's appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_list_areasA
List Home Assistant areas from the area registry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 states a listing operation but does not explicitly confirm it is read-only, describe the output, or note any limitations. This is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the action and resource. Every word earns its place, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter list operation, the description is adequate. It identifies the source (area registry) and the subject (areas). Although there is no output schema, the return type is implicitly a list, so this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is an empty object. The baseline for zero parameters is 4, and the description does not need to add parameter-level detail since there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies the resource ('Home Assistant areas') plus the source ('area registry'), clearly distinguishing it from sibling tools like ha_list_states and ha_list_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 use cases, exclusions, or any comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_list_devicesA
List Home Assistant devices from the device registry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the operation (list) and data source (device registry), implying read-only behavior, but does not mention any permissions, return format, or limitations. Minimal but not misleading; however, it lacks richness expected without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single, front-loaded sentence that says exactly what the tool does without any fluff or unnecessary detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool, the description adequately covers the core behavior: lists devices from the device registry. It doesn't specify output details, but since there is no output schema and the operation is straightforward, this is sufficient for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the description doesn't need to explain inputs. The baseline for zero-parameter tools is 4, and the description adds no additional parameter constraints, which is appropriate given the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and identifies the resource 'Home Assistant devices' plus the source 'device registry.' This clearly distinguishes it from siblings like ha_list_areas or ha_list_entity_registry, which target different registry types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as ha_list_states or ha_list_entity_registry. Usage is implied by the name and description, but there are no exclusions or alternative referrals, so it stops at implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_list_entity_registryA
List Home Assistant entity registry entries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It implies a read-only listing operation but adds no details about return structure, filtering, pagination, or entity registry specifics. It is minimally transparent, fitting a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that clearly states the tool's purpose with no redundant words or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description is adequately complete. It clearly defines the resource being listed, though it could optionally mention that it returns all entity registry entries, but this is implied by 'List' and the absence of filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds no parameter info, but none is needed since there are no parameters to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('Home Assistant entity registry entries'), clearly distinguishing it from sibling tools like ha_list_states, ha_list_areas, and ha_list_devices that target different Home Assistant entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply states what it does, without mentioning context, exclusions, or that other list tools exist for different resource types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_list_servicesA
List Home Assistant services and their fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. The verb 'List' implies a read-only, non-destructive operation, but it does not explicitly state that it does not modify state, what permissions might be required, or the structure of the returned data. The simple nature of the tool makes this acceptable, but it lacks explicit behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states the tool's purpose without any filler. It is appropriately sized for a simple list operation and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is largely complete. It specifies that the tool lists services and their fields, which communicates the scope. However, it does not mention use cases or connection to sibling tools, which could add context, but given the simplicity, a 4 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty, so the description does not need to explain parameter semantics. The baseline for 0 parameters is 4, and the description correctly omits param details that don't exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List Home Assistant services and their fields' clearly states the action (List) and the resource (Home Assistant services), and it distinguishes itself from sibling tools like ha_list_states, ha_list_areas, and ha_list_devices by targeting a different domain. The mention of 'fields' adds specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention related tools like ha_call_service for invoking services or ha_list_states for listing entity states. The description provides no context for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_list_statesA
List Home Assistant entity states (can be large).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds the useful warning that the response 'can be large', which is a behavioral trait. However, it does not clarify what a 'state' includes (e.g., full state objects, attributes, last_updated), nor does it mention potential pagination or rate limits. The size warning is a moderate disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the core purpose and adds a meaningful caveat. Every word earns its place; no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (no parameters) and the presence of sibling tools that provide differentiation, the description is largely adequate. It states what the tool does and a key behavioral constraint. It could mention what the return value looks like, but the output schema is absent and not strictly required for such a straightforward list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and the schema coverage is 100% (empty object). The baseline for no parameters is 4, and the description need not elaborate on parameter semantics since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and identifies the resource as 'Home Assistant entity states', which clearly distinguishes this from sibling tools like ha_get_state (which retrieves a single state) and ha_list_services or ha_list_areas (which list other kinds of entities).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided about when to use this tool versus alternatives. The parenthetical '(can be large)' implies a cautionary note, but it does not suggest using ha_get_state for individual states or mention any exclusions. The description relies solely on the tool's name for context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_render_templateC
Render a Jinja2 template and return the result.
| Name | Required | Description | Default |
|---|---|---|---|
| template | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description fails to disclose behavioral traits such as side effects, idempotency, authentication requirements, or error behavior. The burden falls entirely on the description, which only states the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no superfluous information. It is efficient, though its brevity sacrifices behavioral and usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description should explain what the result looks like (e.g., rendered string). It also omits any context about template variables, error handling, or limits, making it incomplete for a rendering tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter 'template' with no description (0% coverage). The description only reiterates that it is a template, adding no detail about format, variables, or escaping, leaving the agent underinformed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Render' and the resource 'Jinja2 template', which is specific and distinguishes it from all sibling tools that deal with areas, lights, states, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any when-not or exclusion conditions. The tool is unique among siblings, but explicit context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ha_update_entity_registryC
Update an entity registry entry (e.g., change name, entity_id, or area_id).
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | ||
| new_entity_id | No | ||
| name | No | ||
| area_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states 'update' without disclosing side effects, permissions, or error behavior. Minimal transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, efficient and to the point. Could be expanded without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no parameter descriptions, no behavioral details. Incomplete given complexity of 4 parameters and no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; description adds only vague examples (name, entity_id, area_id) but does not fully explain all 4 parameters or their constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (Update) and resource (entity registry entry) with specific examples (name, entity_id, area_id). Distinguishes from sibling list tool but no explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. No context on prerequisites or typical use cases.
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.
16 tool updates
v0.1.7- First observed
ha_area_lights_off - First observed
ha_area_lights_on - First observed
ha_call_service - First observed
ha_get_error_logs - First observed
ha_get_history - First observed
ha_get_logbook - First observed
ha_get_state - First observed
ha_light_turn_off - First observed
ha_light_turn_on - First observed
ha_list_areas - First observed
ha_list_devices - First observed
ha_list_entity_registry - First observed
ha_list_services - First observed
ha_list_states - First observed
ha_render_template - First observed
ha_update_entity_registry
TDQS
Scored across 16 tools
Each tool has a distinct purpose with clear boundaries. Light control by area vs by entity are separate, state retrieval is split between single and list, and generic service call covers remaining operations without overlap.
All tools follow consistent ha_verb_noun pattern using snake_case, e.g., ha_area_lights_off, ha_get_state, ha_list_areas. No mixing of conventions.
16 tools is well-scoped for a Home Assistant server, covering core operations like state management, entity/area/device queries, history/logs, and template rendering without being overwhelming.
Covers all essential Home Assistant interactions: state queries, listings, light control, service calls, logs, history, and templates. Missing specific tools for common entities like switches or covers, but the generic ha_call_service fills gaps.
Maintenance
Related MCP Connectors
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables control and monitoring of Home Assistant smart home devices through MCP, allowing users to list entities, check device states, and call services to control lights, switches, sensors, and other connected devices.4-
- AlicenseBqualityCmaintenanceMCP server for full Home Assistant control, enabling AI agents to manage dashboards, automations, files, apps, entities, and more via REST API, WebSocket, and SSH.6686 npmMIT
- AlicenseAqualityCmaintenanceA 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.964 npmMIT
- AlicenseAqualityAmaintenanceA comprehensive MCP server that enables AI assistants to interact with Home Assistant, control smart home devices, query states, execute services, and manage automations via natural language.7772,385 PyPI4,867MIT