Skip to main content
Glama

HomeyPro MCP Server

by pigmej
README.md20.1 kB
# HomeyPro MCP Server A Model Context Protocol (MCP) server for interacting with HomeyPro home automation systems. This server provides paginated access to devices, zones, and flows with comprehensive management capabilities. ## Features - **Device Management**: List, search, and control devices with full capability support - **Zone Management**: Browse zones and their associated devices - **Flow Management**: List and trigger automation flows - **System Management**: Get and update system configuration (location, address, language, units) - **AI-Powered Prompts**: Context-aware guidance for device control, troubleshooting, and automation - **Resource Caching**: Efficient data access with intelligent caching and stale data fallback - **Pagination Support**: Efficient handling of large datasets with cursor-based pagination - **Real-time Data**: Get current device states, capabilities, and insights - **Error Handling**: Comprehensive error handling with detailed error messages ## Installation ### Local Development 1. Clone the repository and navigate to the project directory: ```bash cd python-homey-mcp ``` 2. Install dependencies using uv: ```bash uv sync ``` ### Docker Pull the pre-built Docker image (supports both AMD64 and ARM64 architectures): ```bash docker pull ghcr.io/pigmej/python-homey-mcp:latest ``` The Docker image is built for multiple architectures: - `linux/amd64` - For Intel/AMD processors - `linux/arm64` - For ARM processors (Apple Silicon, Raspberry Pi, etc.) Docker will automatically pull the correct architecture for your system. #### Building Multi-Architecture Images To build your own multi-architecture Docker images: ```bash # Setup Docker Buildx (one-time setup) ./setup-buildx.sh # Build for current platform only make docker-build # Build for both AMD64 and ARM64 make docker-build-multi # Build and push to registry make docker-push ``` No additional installation steps are required when using Docker. ## Configuration Before running the server, you need to configure your HomeyPro connection: ### Environment Variables Set the following environment variables: ```bash export HOMEY_API_URL="http://YOUR_HOMEY_IP_ADDRESS" export HOMEY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" ``` ### Optional Tools Configuration By default, all individual tools are enabled. You can selectively disable or enable specific tools to reduce model confusion: #### Disable Specific Tools To disable specific individual tools, set the `HOMEY_DISABLED_TOOLS` environment variable: ```bash # Disable device control and insights tools (keep device listing and search) export HOMEY_DISABLED_TOOLS="control_device,get_device_insights" # Disable all device management tools export HOMEY_DISABLED_TOOLS="list_devices,get_device,get_devices_classes,get_devices_capabilities,search_devices_by_name,search_devices_by_class,control_device,get_device_insights" ``` #### Enable Only Specific Tools To enable only specific individual tools, set the `HOMEY_ENABLED_TOOLS` environment variable: ```bash # Enable only system info and zone listing (minimal configuration) export HOMEY_ENABLED_TOOLS="get_system_info,list_zones" # Enable basic device and zone management without control capabilities export HOMEY_ENABLED_TOOLS="get_system_info,list_devices,get_device,list_zones,get_zone_devices" ``` **Available individual tools:** **Device Tools:** - `list_devices` - List all devices with pagination - `get_device` - Get detailed device information - `get_devices_classes` - List available device classes - `get_devices_capabilities` - List available device capabilities - `search_devices_by_name` - Search devices by name - `search_devices_by_class` - Search devices by class - `control_device` - Control device capabilities - `get_device_insights` - Get device insights/analytics **Flow Tools:** - `list_flows` - List all flows (normal and advanced) - `trigger_flow` - Trigger a specific flow - `get_flow_folders` - Get flow folder structure - `get_flows_by_folder` - Get flows in a specific folder - `get_flows_without_folder` - Get flows not in any folder **Zone Tools:** - `list_zones` - List all zones - `get_zone_devices` - Get devices in a specific zone - `get_zone_temp` - Get temperature data for a zone **System Tools:** - `get_system_info` - Get system information and statistics **Note:** Prompts and resources are always available regardless of tool configuration. #### List Available Tools To see which tools are currently enabled, you can use FastMCP's built-in `list_tools()` method. Disabled tools will not appear in this list, which is the intended behavior. When running the MCP server, only enabled tools will be available to clients. #### Implementation Notes Tools use standard `@mcp.tool()` decorators and are configured post-startup: - All tools are registered normally with `@mcp.tool()` - After registration, tools are selectively disabled using FastMCP's `.disable()` method - Environment variables are processed to determine which tools to disable - Disabled tools won't appear in `list_tools()` and can't be called This approach keeps the code simple while leveraging FastMCP's native tool management. ### Getting Your HomeyPro Token 1. Open the HomeyPro web interface 2. Go to Settings > General > API 3. Create a new Personal Access Token 4. Copy the token and set it as the `HOMEY_API_TOKEN` environment variable ### Finding Your HomeyPro IP Address You can find your HomeyPro's IP address in: - HomeyPro web interface: Settings > General > Network - Your router's admin panel - HomeyPro mobile app: More > Settings > General > Network ## Usage ### Running the Server #### Using uvx (Recommended) The easiest way to run the server is using `uvx`: ```bash # Set your environment variables export HOMEY_API_URL="http://YOUR_HOMEY_IP_ADDRESS" export HOMEY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" # Run with uvx uvx --from . homey-mcp ``` Or run directly with FastMCP CLI: ```bash # HTTP transport (recommended for testing) uvx fastmcp run main.py --transport http --host 0.0.0.0 --port 4445 # STDIO transport (for MCP clients) uvx fastmcp run main.py --transport stdio ``` #### Local Development ```bash # Using uv run uv run fastmcp run main.py --transport http --host 0.0.0.0 --port 4445 --log-level DEBUG # Or the old way uv run fastmcp run -t http --host 0.0.0.0 -p 4445 -l DEBUG main.py # Or using Makefile make run ``` #### Development Commands The project includes a comprehensive Makefile with useful development commands: ```bash # Setup and installation make setup # Initial setup (install + check environment) make install # Install dependencies make check-env # Verify environment configuration # Development workflow make test # Run test suite make lint # Run linting checks make format # Format code make clean # Clean up generated files # Docker operations make docker-build # Build Docker image for current platform make docker-build-multi # Build multi-architecture image (AMD64 + ARM64) make docker-push # Build and push multi-architecture image make docker-test # Test Docker image # Utilities make info # Show project information make check-connection # Test HomeyPro connection ``` #### Installing in MCP Clients You can install this server directly in MCP clients using FastMCP: ```bash # Install in Claude Desktop uvx fastmcp install claude-desktop main.py \ --env-var HOMEY_API_URL=http://YOUR_HOMEY_IP_ADDRESS \ --env-var HOMEY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN # Install in Claude Code uvx fastmcp install claude-code main.py \ --env-var HOMEY_API_URL=http://YOUR_HOMEY_IP_ADDRESS \ --env-var HOMEY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN # Install in Cursor uvx fastmcp install cursor main.py \ --env-var HOMEY_API_URL=http://YOUR_HOMEY_IP_ADDRESS \ --env-var HOMEY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN # Generate MCP JSON config uvx fastmcp install mcp-json main.py \ --env-var HOMEY_API_URL=http://YOUR_HOMEY_IP_ADDRESS \ --env-var HOMEY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN ``` #### Docker Container Run the MCP server in a Docker container: ```bash docker run -p 4445:4445 \ -e HOMEY_API_URL="http://YOUR_HOMEY_IP_ADDRESS" \ -e HOMEY_API_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN" \ ghcr.io/pigmej/python-homey-mcp:latest ``` Or using docker-compose: ```yaml version: '3.8' services: python-homey-mcp: image: ghcr.io/pigmej/python-homey-mcp:latest ports: - "4445:4445" environment: - HOMEY_API_URL=http://YOUR_HOMEY_IP_ADDRESS - HOMEY_API_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN ``` The server will start and connect to your HomeyPro instance. You'll see a connection confirmation message. But basically please yield to [FastMCP docs](https://gofastmcp.com/patterns/cli) ## AI-Powered Prompts The server provides context-aware prompts that help you interact with your HomeyPro system more effectively. These prompts analyze your current system state and provide tailored guidance. ### Available Prompts #### Device Control Assistant Provides structured guidance for controlling different types of devices in your HomeyPro system. - **Context**: Current device counts, online/offline status, available device types - **Guidance**: Control patterns for lighting, climate, security, and entertainment devices - **Best Practices**: Device status checking, capability usage, troubleshooting tips #### Device Troubleshooting Systematic diagnostic guidance for common HomeyPro device issues. - **System Health**: Overall device health percentage and status indicators - **Step-by-Step Process**: Structured troubleshooting workflow - **Device-Specific**: Targeted solutions for offline and unresponsive devices - **Advanced Diagnostics**: Network, performance, and system-level troubleshooting #### Device Capability Explorer Helps you discover and understand device capabilities without overwhelming detail. - **Capability Categories**: Control, sensor, and status capabilities - **Value Types**: Boolean, numeric, string, and enum capability formats - **Usage Patterns**: Common capability combinations and best practices - **Device Type Patterns**: Capability patterns for different device categories #### Flow Creation Assistant Structured guidance for creating HomeyPro automation flows. - **Flow Framework**: WHEN (trigger), AND (conditions), THEN (actions) structure - **Common Scenarios**: Security, comfort, energy, convenience, and safety automations - **System Context**: Available zones, device types, and existing flows - **Templates**: Ready-to-use flow templates for common use cases #### Flow Optimization Guidance for improving existing flow performance and reliability. - **Performance Analysis**: Flow execution patterns and optimization opportunities - **Resource Usage**: Device and system resource considerations - **Best Practices**: Flow organization, naming, and maintenance strategies #### Flow Debugging Systematic approach to diagnosing and fixing flow issues. - **Common Problems**: Flow execution failures, timing issues, device conflicts - **Diagnostic Tools**: Log analysis, condition testing, action verification - **Resolution Strategies**: Step-by-step debugging workflow #### System Health Check Comprehensive system health analysis and recommendations. - **Health Indicators**: Device connectivity, flow status, system performance - **Status Overview**: Connection status, system configuration, resource usage - **Recommendations**: Maintenance suggestions and optimization opportunities #### Zone Organization Guidance for organizing and optimizing zone structure. - **Zone Planning**: Logical grouping strategies for devices and areas - **Hierarchy Management**: Parent-child zone relationships - **Device Assignment**: Best practices for device-to-zone mapping ### Prompt Features - **Context-Aware**: All prompts analyze your current system state - **Real-Time Data**: Information is based on current device and system status - **Graceful Degradation**: Prompts work even when HomeyPro is temporarily unavailable - **Error Handling**: Clear error messages with suggested actions - **Actionable Guidance**: Practical steps you can take immediately ## Resource Caching The server provides intelligent resource caching with automatic fallback to stale data when HomeyPro is temporarily unavailable. ### Available Resources #### System Overview (`homey://system/overview`) Comprehensive system overview including device counts, zone counts, and health indicators. - **Content**: Device statistics, zone summary, system health percentage - **Cache TTL**: 5 minutes - **Use Case**: Dashboard displays, system monitoring, health checks #### Device Registry (`homey://devices/registry`) Complete device inventory with current states, capabilities, and online/offline indicators. - **Content**: Full device list with capabilities, states, and metadata - **Cache TTL**: 30 seconds (dynamic data) - **Use Case**: Device management interfaces, capability discovery, status monitoring #### Zone Hierarchy (`homey://zones/hierarchy`) Zone structure with device associations and parent-child relationships. - **Content**: Zone tree, device assignments, zone types and statistics - **Cache TTL**: 5 minutes - **Use Case**: Zone management, device organization, spatial automation #### Flow Catalog (`homey://flows/catalog`) Available flows with metadata, status, and execution statistics. - **Content**: Flow list with triggers, conditions, actions, and execution data - **Cache TTL**: 2 minutes - **Use Case**: Flow management, automation analysis, debugging ### Caching Features - **Intelligent TTL**: Different cache durations based on data volatility - **Stale Data Fallback**: Returns cached data when HomeyPro is unreachable - **Error Handling**: Graceful degradation with detailed error information - **Connection Resilience**: Continues operation during network issues - **Performance Optimization**: Reduces API calls and improves response times ### Cache Behavior 1. **Fresh Data**: Returns current data when cache is valid and HomeyPro is accessible 2. **Stale Data**: Returns cached data with staleness indicators when HomeyPro is unreachable 3. **Error Response**: Returns structured error information when no cached data is available 4. **Automatic Refresh**: Cache automatically refreshes when HomeyPro becomes available again ## API Tools The server provides comprehensive API tools for direct HomeyPro interaction. All tools support pagination and error handling with detailed responses. ### Device Tools #### Device Discovery and Information - **`list_devices`**: List all devices with pagination support - Optional compact mode for reduced data transfer - Excludes hidden devices automatically - Includes online/offline status for each device - **`get_device`**: Get detailed information about a specific device - Complete device details including capabilities and settings - Capability values and detailed configuration - Energy information and UI settings - **`get_devices_classes`**: List all available device classes - Useful for understanding device types before searching - Returns complete list of supported device categories - **`get_devices_capabilities`**: List all possible device capabilities - Comprehensive capability reference - Essential for understanding control options #### Device Search and Filtering - **`search_devices_by_name`**: Search devices by name with pagination - Fuzzy matching against device names - Includes note field information for context - Supports pagination for large result sets - **`search_devices_by_class`**: Search devices by class/type - Filter devices by specific categories (lights, sensors, etc.) - Paginated results with metadata #### Device Control and Monitoring - **`control_device`**: Control device capabilities - Set capability values (on/off, dimming, temperature, etc.) - JSON value parsing with fallback handling - Returns current device state after control - **`get_device_insights`**: Get historical device data - Multiple time resolutions (hour, day, week, month) - Custom timestamp ranges supported - Capability-specific insights and trends ### Zone Tools #### Zone Management - **`list_zones`**: List all zones with pagination - Complete zone hierarchy information - Parent-child relationships included - **`get_zone_devices`**: Get all devices in a specific zone - Zone-based device filtering - Compact mode option for performance - Online/offline status per device #### Zone Monitoring - **`get_zone_temp`**: Get average temperature for a zone - Automatically averages temperature sensors in the zone - Handles zones without temperature sensors gracefully ### Flow Tools #### Unified Flow Management - **`list_flows`**: List all flows (both normal and advanced) with pagination - Automatically combines normal and advanced flows - Each flow includes a `flow_type` field ("normal" or "advanced") - Complete flow metadata and configuration - Seamless pagination across combined results - **`trigger_flow`**: Execute any flow (automatically detects type) - Automatically detects whether flow is normal or advanced - Manual flow triggering with unified interface - Success confirmation with flow details and type - **`get_flow_folders`**: Get all flow organization folders - Flow organization structure - Folder hierarchy for better management - **`get_flows_by_folder`**: Get flows in a specific folder - Folder-based flow filtering - Organizational flow management - **`get_flows_without_folder`**: Get unorganized flows - Find flows that need organization - Cleanup and maintenance assistance #### Flow Organization - **`get_flow_folders`**: Get all flow organization folders - Flow organization structure - Folder hierarchy for better management - **`get_flows_by_folder`**: Get flows in a specific folder - Folder-based flow filtering - Organizational flow management - Note: Only returns normal flows in folder - **`get_flows_without_folder`**: Get unorganized flows - Find flows that need organization - Cleanup and maintenance assistance - Note: Only returns normal flows without folder ### System Tools #### System Information - **`get_system_info`**: Get comprehensive system overview - Connection status and system health - Device, zone, and flow counts - Online/offline device statistics - Flow status (enabled/disabled/broken) - System configuration (address, language, units) - Location coordinates and regional settings - Recommended as first call before other operations ### Tool Features #### Pagination Support - **Cursor-based pagination**: Efficient handling of large datasets - **Configurable page sizes**: Optimize for your use case - **Total count tracking**: Know the full dataset size - **Next page indicators**: Easy navigation through results #### Data Formats - **Compact mode**: Reduced data transfer for performance - **Full detail mode**: Complete information when needed - **JSON value handling**: Automatic parsing with fallbacks - **Error responses**: Structured error information with details #### Performance Optimization - **Hidden device filtering**: Automatic exclusion of system devices - **Efficient queries**: Optimized API calls to HomeyPro - **Connection reuse**: Persistent connections for better performance - **Graceful degradation**: Continues operation during partial failures #### Error Handling - **Detailed error messages**: Clear problem descriptions - **Connection status**: Network and API health indicators - **Fallback responses**: Graceful handling of API failures - **Logging integration**: Comprehensive error tracking ### Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests if applicable 5. Submit a pull request ## License This project is licensed under the MIT License.

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/pigmej/python-homey-mcp'

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