Skip to main content
Glama

UPDATE

Homey now offer their own MCP Server: https://homey.app/en-gb/news/introducing-the-homey-mcp-server/

MCP Server for Homey

Model Context Protocol (MCP) server for interacting with the Homey smart home platform.

Features

  • Device Management: List and control all Homey devices

  • Capability Control: Set device capabilities (on/off, brightness, temperature, etc.)

  • Zone Management: List and organize zones

  • Flow Automation: List and trigger Homey Flows

Examples

  • "Show me all lights that are on downstairs"

  • "Can you turn on the livingroom light and set its brightness to 75%"

  • "What is the livingrooms temperature?"

Prerequisites

  • Node.js >= 18

  • A Homey Pro device with local API access

  • Homey API token and local IP address

Getting Homey API Credentials

  1. Navigate to Settings → API Keys in the Homey Web App

  2. Tap "New API Key"

  3. Give it a name and select appropriate permissions

  4. Copy the generated API token

  5. Find your Homey's local IP address in Settings → General → Network

Installation

npm install
npm run build

Configuration

Create a .env file or set environment variables:

HOMEY_API_TOKEN=your_api_token_here
HOMEY_LOCAL_IP=192.168.1.xxx

Usage

Running the Server

npm run build
node dist/index.js

Claude Desktop Configuration

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "homey": {
      "command": "node",
      "args": ["/absolute/path/to/demo/dist/index.js"],
      "env": {
        "HOMEY_API_TOKEN": "your_api_token_here",
        "HOMEY_LOCAL_IP": "192.168.1.xxx"
      }
    }
  }
}

Available Tools

list_devices

List all devices connected to Homey with their capabilities and status.

get_device

Get detailed information about a specific device.

Parameters:

  • deviceId (string): The ID of the device

set_capability

Set a capability value for a device.

Parameters:

  • deviceId (string): The ID of the device

  • capability (string): The capability to set (e.g., onoff, dim, target_temperature)

  • value (any): The value to set

Examples:

  • Turn on a light: { deviceId: "abc123", capability: "onoff", value: true }

  • Set brightness: { deviceId: "abc123", capability: "dim", value: 0.5 }

  • Set temperature: { deviceId: "abc123", capability: "target_temperature", value: 21 }

list_zones

List all zones in your Homey setup.

list_flows

List all available Flows.

trigger_flow

Trigger a specific Homey Flow.

Parameters:

  • flowId (string): The ID of the flow to trigger

Development

Watch Mode

npm run watch

Lint

npm run lint

Fix Linting Errors

npm run lint:fix

Project Structure

.
├── src/
│   └── index.ts       # Main MCP server implementation
├── dist/              # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.md

Common Device Capabilities

  • onoff: Turn device on/off (boolean)

  • dim: Brightness level (0-1)

  • target_temperature: Target temperature (number)

  • measure_temperature: Current temperature (read-only)

  • measure_power: Power consumption (read-only)

  • measure_humidity: Humidity level (read-only)

  • volume_set: Volume level (0-1)

  • speaker_playing: Playback state (boolean)

Troubleshooting

Connection Issues

  • Verify your Homey's local IP address hasn't changed

  • Ensure the API token has sufficient permissions

  • Check that your device is on the same network as Homey

Device Not Found

  • Use list_devices to get the correct device ID

  • Verify the device is available in the Homey app

License

MIT

Available Tools

6 tools
get_deviceC

Get details about a specific device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesThe ID of the device

TDQS

C2.6/5.0
Behavior2/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 implies a read-only operation ('Get'), but doesn't specify permissions required, rate limits, error conditions, or the format of returned details. This is a significant gap for a tool with zero annotation coverage.

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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple tool, though it could be more front-loaded with key details if expanded.

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

Completeness2/5

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

Given the tool's simplicity (1 parameter, no output schema) but lack of annotations, the description is incomplete. It doesn't explain what 'details' are returned, potential errors, or behavioral traits, making it inadequate for reliable agent use without additional context.

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?

The input schema has 100% description coverage, with 'deviceId' documented as 'The ID of the device'. The description adds no additional meaning beyond this, such as where to find the ID or format examples. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose3/5

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

The description 'Get details about a specific device' clearly states the verb ('Get') and resource ('device'), but it's vague about what 'details' entails and doesn't distinguish this tool from potential siblings like 'list_devices' beyond the singular vs. plural distinction. It provides a basic purpose but lacks specificity.

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 offers no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a device ID), exclusions, or comparisons to sibling tools like 'list_devices' for browsing devices or 'set_capability' for modifications, leaving usage context entirely implicit.

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

list_devicesB

List all devices connected to Homey

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('List all devices') but doesn't describe what 'all devices' entails (e.g., pagination, filtering, or return format), whether it requires authentication, or any rate limits. This leaves significant gaps for a tool that presumably returns a collection.

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 a single, clear sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place by conveying essential purpose without redundancy.

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

Completeness2/5

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

Given the tool's simplicity (0 parameters, no output schema), the description is minimally adequate but incomplete. It lacks behavioral context (e.g., what 'all devices' means in practice) and doesn't help differentiate from sibling tools. For a list operation with no annotations or output schema, more guidance on return values or usage would improve completeness.

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 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description adds no parameter information, which is appropriate here, but doesn't compensate for any gaps since there are none. A baseline of 4 is given for zero-parameter tools when the schema is complete.

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 verb ('List') and resource ('devices connected to Homey'), providing a specific purpose. However, it doesn't distinguish this from sibling tools like 'get_device' (which presumably retrieves a single device) or 'list_flows'/'list_zones' (which list different resources), missing explicit differentiation.

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 doesn't mention when to choose 'list_devices' over 'get_device' for single-device queries, or how it relates to other list tools like 'list_flows', leaving the agent to infer usage from tool names alone.

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

list_flowsB

List all flows in Homey

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/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 of behavioral disclosure. It states the action but doesn't describe what 'list' entails—such as whether it returns active/inactive flows, the format of the output, pagination, or any permissions required. For a tool with zero annotation coverage, this is a significant gap in 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 a single, efficient sentence that directly states the tool's purpose without any wasted words. It is front-loaded and appropriately sized for a simple tool, earning a perfect score for conciseness.

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

Completeness2/5

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

Given the tool has no annotations, no output schema, and the description lacks behavioral details, it is incomplete. For a list operation, the description should ideally cover aspects like output format or scope, but it doesn't, leaving gaps in context despite the simple nature of the tool.

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 0 parameters with 100% coverage, so the schema fully documents the absence of inputs. The description doesn't add parameter information, which is appropriate here, and it implies no parameters are needed, aligning with the schema. Baseline is 4 for 0 parameters, as the description doesn't need to compensate for any gaps.

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 action ('List') and resource ('all flows in Homey'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from its sibling 'list_devices' or 'list_zones', which follow the same pattern but for different resources, so it misses the top score.

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 like 'get_device' or 'trigger_flow'. It lacks context about prerequisites, such as whether flows must be configured or active, and doesn't mention any exclusions or specific scenarios for usage.

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

list_zonesB

List all zones in Homey

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a list operation, implying read-only behavior, but doesn't specify output format, pagination, error handling, or any constraints like rate limits or authentication needs. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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 a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized for a simple listing tool and front-loads the essential information, making it easy to parse quickly.

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?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally complete for a basic list operation. However, it lacks details on output format or behavioral context that would help an agent use it effectively, especially with no annotations to fill in gaps. It meets the baseline but doesn't excel in providing a full picture.

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 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to compensate for any parameter gaps, making it adequate for a parameterless tool. No additional parameter semantics are required beyond what's implied by the action.

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 action ('List all') and resource ('zones in Homey'), making the purpose immediately understandable. It doesn't differentiate from sibling tools like 'list_devices' or 'list_flows', but the specific resource 'zones' provides adequate specificity for a basic listing operation.

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 like 'list_devices' or 'list_flows'. It doesn't mention prerequisites, context for zone management, or any exclusions, leaving the agent to infer usage based on the tool name alone.

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

set_capabilityC

Set a capability value for a device (e.g., turn on/off, set brightness)

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesThe ID of the device
capabilityYesThe capability to set (e.g., onoff, dim, target_temperature)
valueYesThe value to set (boolean, number, or string depending on capability)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a mutation ('Set') but doesn't disclose permission requirements, side effects (e.g., whether changes are reversible), rate limits, or error conditions. The examples hint at common use cases but lack operational details.

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 a single, efficient sentence that front-loads the core purpose and includes helpful examples. Every word earns its place with no redundancy or unnecessary elaboration.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't cover expected outcomes, error handling, or important behavioral aspects like whether the change is immediate or requires confirmation. The examples help but don't compensate for the lack of structured safety or response information.

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 100%, so the schema already documents all three parameters thoroughly. The description adds marginal value by providing examples of capability types (e.g., onoff, dim) and value types, but doesn't explain parameter interactions or constraints beyond what's in the schema.

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 action ('Set') and resource ('capability value for a device'), with specific examples (turn on/off, set brightness) that illustrate the tool's function. However, it doesn't explicitly differentiate from sibling tools like 'get_device' or 'trigger_flow', which would require 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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., device must be online), exclusions, or how it differs from sibling tools like 'trigger_flow' that might also affect device states.

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

trigger_flowC

Trigger a Homey Flow

ParametersJSON Schema
NameRequiredDescriptionDefault
flowIdYesThe ID of the flow to trigger

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Trigger') which implies a write/mutation operation, but doesn't describe what 'triggering' entails (e.g., execution effects, permissions needed, rate limits, or error handling). This leaves significant gaps 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.

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is incomplete. It lacks crucial context about execution behavior, side effects, permissions, or result format, which are essential for safe and effective use.

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 100%, with the single parameter 'flowId' documented in the schema. The description doesn't add any parameter-specific information beyond what the schema provides, so it meets the baseline for high schema coverage without compensating value.

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 action ('Trigger') and target resource ('a Homey Flow'), which is specific and unambiguous. However, it doesn't differentiate this tool from its siblings like 'list_flows' or 'set_capability', so it doesn't reach the highest score.

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. There's no mention of prerequisites (e.g., needing a valid flow ID from 'list_flows'), exclusions, or contextual cues for selection among sibling tools.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • First observedget_device
    • First observedlist_devices
    • First observedlist_flows
    • First observedlist_zones
    • First observedset_capability
    • First observedtrigger_flow

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: get_device retrieves details for a specific device, list_devices lists all devices, list_flows lists flows, list_zones lists zones, set_capability modifies device capabilities, and trigger_flow activates flows. There is no overlap or ambiguity between these functions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case: get_device, list_devices, list_flows, list_zones, set_capability, and trigger_flow. This uniformity makes the tool set predictable and easy to understand.

Tool Count5/5

With 6 tools, this server is well-scoped for managing a Homey system. The count is appropriate, covering key operations like device management, flow control, and zone listing without being overwhelming or insufficient.

Completeness4/5

The tool set covers core Homey operations well, including device retrieval, listing, capability setting, and flow management. A minor gap is the lack of tools for creating, updating, or deleting devices, flows, or zones, but agents can still perform essential tasks with the provided tools.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/allistera/homey-mcp-server'

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