Homey MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Homey MCP Serverturn on the living room lights and set brightness to 50%"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Navigate to Settings → API Keys in the Homey Web App
Tap "New API Key"
Give it a name and select appropriate permissions
Copy the generated API token
Find your Homey's local IP address in Settings → General → Network
Installation
npm install
npm run buildConfiguration
Create a .env file or set environment variables:
HOMEY_API_TOKEN=your_api_token_here
HOMEY_LOCAL_IP=192.168.1.xxxUsage
Running the Server
npm run build
node dist/index.jsClaude 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 devicecapability(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 watchLint
npm run lintFix Linting Errors
npm run lint:fixProject Structure
.
├── src/
│ └── index.ts # Main MCP server implementation
├── dist/ # Compiled JavaScript output
├── package.json
├── tsconfig.json
└── README.mdCommon 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_devicesto get the correct device IDVerify the device is available in the Homey app
License
MIT
Available Tools
6 toolsget_deviceC
Get details about a specific device
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The ID of the device |
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 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.
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.
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.
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.
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.
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
| 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 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.
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.
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.
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.
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.
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
| 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 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.
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.
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.
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.
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.
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
| 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 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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | The ID of the device | |
| capability | Yes | The capability to set (e.g., onoff, dim, target_temperature) | |
| value | Yes | The value to set (boolean, number, or string depending on capability) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| flowId | Yes | The ID of the flow to trigger |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v1.0.0- First observed
get_device - First observed
list_devices - First observed
list_flows - First observed
list_zones - First observed
set_capability - First observed
trigger_flow
TDQS
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.
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.
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.
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
Control your Tesla from your AI assistant - climate, charging, access, and security.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Streamline your Attio workflows using natural language to search, create, update, and organize com…
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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