Skip to main content
Glama
README.mdโ€ข15.4 kB
# Enhanced Home Assistant MCP [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![TypeScript](https://img.shields.io/badge/TypeScript-4.9+-blue.svg)](https://www.typescriptlang.org/) [![Home Assistant](https://img.shields.io/badge/Home%20Assistant-Compatible-green.svg)](https://www.home-assistant.io/) A comprehensive MCP (Model Context Protocol) server that provides extensive integration with Home Assistant, enabling AI assistants to interact with smart home devices, automations, and system management. ## ๐Ÿš€ Quick Start with NPX **No installation required!** Run directly with npx: ```bash # Set your Home Assistant credentials export HOMEASSISTANT_URL="http://your-ha-ip:8123" export HOMEASSISTANT_TOKEN="your-long-lived-access-token" # Start the server npx @thelord/enhanced-homeassistant-mcp ``` ๐Ÿ“– **[Complete NPX Usage Guide โ†’](NPX_USAGE.md)** > **๐Ÿšง Smithery Deployment Status**: Currently optimizing tool loading to prevent timeout during Smithery's tool scanning. See [TIMEOUT_RESOLUTION.md](TIMEOUT_RESOLUTION.md) for details. ## ๐ŸŽ† Features ### ๐Ÿ“Š Basic Operations - โœ… API status verification - ๐Ÿ“ฑ Entity state management - ๐Ÿ”„ Service calls with advanced parameters - ๐Ÿ“ Entity discovery and listing - ๐Ÿ› ๏ธ Configuration information ### ๐Ÿค– Automation & Control - ๐Ÿ“œ Automation management (enable/disable/trigger) - ๐ŸŽฌ Scene activation - ๐Ÿ“œ Script execution - ๐Ÿ”˜ Input boolean controls - ๐Ÿ“… Scheduled automation insights ### ๐Ÿ“Š History & Monitoring - ๐Ÿ“ˆ Entity history tracking - ๐Ÿ“ Logbook entries - โš ๏ธ Error log monitoring - ๐Ÿ“ก System events - ๐Ÿ” Configuration validation ### ๐Ÿ  Device Control - ๐Ÿ’ก **Lights**: Brightness, color, temperature control - ๐ŸŒก๏ธ **Climate**: Temperature, HVAC modes, presets - ๐Ÿ“บ **Media Players**: Play/pause, volume, media selection - ๐Ÿ  **Covers**: Open/close, position control - ๐Ÿ“ข **Notifications**: Multi-service messaging - ๐Ÿ” **Device Discovery**: Filter by type/domain ### โš™๏ธ System Administration - ๐Ÿ“Š System information and health - ๐Ÿท๏ธ Template rendering (Jinja2) - ๐Ÿ  Area and device management - ๐Ÿ”Œ Integration monitoring - ๐Ÿ”„ System restart capabilities - ๐Ÿ“ฑ Supervisor and add-on management - ๐Ÿ” Entity search and discovery ## ๐Ÿš€ Quick Start ### Prerequisites - Node.js 18+ - Home Assistant instance with API access - Long-lived access token from Home Assistant ### Installation ```bash # Clone the repository git clone https://github.com/gilberth/enhanced-homeassistant-mcp.git cd enhanced-homeassistant-mcp # Install dependencies npm install # Copy environment template cp .env.example .env ``` ### Configuration Edit the `.env` file with your Home Assistant details: ```env HOME_ASSISTANT_URL=http://homeassistant.local:8123 HOME_ASSISTANT_TOKEN=your_long_lived_access_token_here DEBUG=false REQUEST_TIMEOUT=10000 ``` ### Getting Your Access Token 1. Open Home Assistant in your browser 2. Go to your Profile (click on your username in the sidebar) 3. Scroll down to "Long-Lived Access Tokens" 4. Click "Create Token" 5. Give it a name and copy the generated token ### Running the Server #### Option 1: NPX (Recommended - No installation) ```bash # Quick start npx @thelord/enhanced-homeassistant-mcp # With options npx @thelord/enhanced-homeassistant-mcp --debug start npx @thelord/enhanced-homeassistant-mcp inspect npx @thelord/enhanced-homeassistant-mcp health ``` #### Option 2: Local Installation ```bash # Development mode npm run dev # Production mode npm run build npm start # With MCP Inspector (for testing) npm run inspector ``` ### ๐Ÿณ Docker Deployment (Recomendado) Para un despliegue fรกcil y seguro usando Docker: ```bash # Construir la imagen docker build -t enhanced-homeassistant-mcp . # Ejecutar el contenedor docker run -d \ --name homeassistant-mcp \ --restart unless-stopped \ -e HOME_ASSISTANT_URL="http://your-hass-ip:8123" \ -e HOME_ASSISTANT_TOKEN="your_long_lived_token" \ enhanced-homeassistant-mcp ``` ๐Ÿ“– **Guรญa completa de Docker**: Ver [DOCKER.md](DOCKER.md) para instrucciones detalladas. ### โ˜๏ธ Smithery Deployment (Cloud) Para usar el servidor desplegado en la nube a travรฉs de Smithery: 1. **Visita**: [Smithery.ai](https://smithery.ai) 2. **Busca**: `@gilberth/enhanced-homeassistant-mcp` 3. **Configura** tu instancia con: - Home Assistant URL - Long-lived access token - Opciones opcionales (debug, timeout) ```javascript // Usar con Smithery SDK import { createSmitheryUrl } from "@smithery/sdk"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const config = { homeAssistantToken: "your_token", homeAssistantUrl: "http://your-hass-ip:8123", }; const serverUrl = createSmitheryUrl( "https://server.smithery.ai/@gilberth/enhanced-homeassistant-mcp", { config, apiKey: "your-smithery-api-key" } ); ``` ๐ŸŽฏ **Ventajas de Smithery**: Sin configuraciรณn de infraestructura, escalado automรกtico, y acceso global. ## ๐Ÿ› ๏ธ Available Tools ### Basic Tools | Tool | Description | Parameters | | --------------------------------- | ----------------------- | ------------------------------------------------ | | `homeassistant_api_status` | Check API connectivity | None | | `homeassistant_get_entity_state` | Get entity state | `entity_id` | | `homeassistant_list_all_entities` | List all entities | `domain` (optional) | | `homeassistant_call_service` | Call HA service | `domain`, `service`, `entity_id`, `service_data` | | `homeassistant_list_services` | List available services | `domain` (optional) | | `homeassistant_get_config` | Get HA configuration | None | ### Automation Tools | Tool | Description | Parameters | | ------------------------------------ | ------------------------- | --------------------- | | `homeassistant_list_automations` | List all automations | None | | `homeassistant_toggle_automation` | Enable/disable automation | `entity_id`, `action` | | `homeassistant_trigger_automation` | Trigger automation | `entity_id` | | `homeassistant_list_scenes` | List all scenes | None | | `homeassistant_activate_scene` | Activate scene | `entity_id` | | `homeassistant_list_scripts` | List all scripts | None | | `homeassistant_run_script` | Run script | `entity_id` | | `homeassistant_list_input_booleans` | List input booleans | None | | `homeassistant_toggle_input_boolean` | Toggle input boolean | `entity_id`, `action` | ### History Tools | Tool | Description | Parameters | | ---------------------------------- | ---------------------- | --------------------------------------------------------- | | `homeassistant_get_entity_history` | Get entity history | `entity_id`, `start_time`, `end_time`, `minimal_response` | | `homeassistant_get_logbook` | Get logbook entries | `entity_id`, `start_time`, `end_time` | | `homeassistant_get_events` | List event types | None | | `homeassistant_get_error_log` | Get error log | None | | `homeassistant_check_config` | Validate configuration | None | ### Device Control Tools | Tool | Description | Parameters | | ------------------------------------ | ----------------------- | -------------------------------------------------------------------- | | `homeassistant_control_lights` | Control lights | `entity_id`, `action`, `brightness`, `color_name`, `rgb_color`, etc. | | `homeassistant_control_climate` | Control climate devices | `entity_id`, `temperature`, `hvac_mode`, `preset_mode`, etc. | | `homeassistant_control_media_player` | Control media players | `entity_id`, `action`, `media_content_id`, `volume_level`, etc. | | `homeassistant_control_covers` | Control covers/blinds | `entity_id`, `action`, `position` | | `homeassistant_get_devices_by_type` | List devices by domain | `domain` | | `homeassistant_send_notification` | Send notifications | `service`, `title`, `message`, `target` | ### System Tools | Tool | Description | Parameters | | --------------------------------- | ---------------------- | ------------------ | | `homeassistant_system_info` | Get system information | None | | `homeassistant_render_template` | Render Jinja2 template | `template` | | `homeassistant_list_areas` | List all areas | None | | `homeassistant_list_devices` | List all devices | None | | `homeassistant_list_integrations` | List integrations | None | | `homeassistant_restart_service` | Restart Home Assistant | `confirm` | | `homeassistant_supervisor_info` | Get Supervisor info | None | | `homeassistant_list_addons` | List add-ons | None | | `homeassistant_search_entities` | Search entities | `search`, `domain` | ## ๐Ÿ“ Usage Examples ### Basic Entity Control ```javascript // Get light state const lightState = await homeassistant_get_entity_state({ entity_id: "light.living_room", }); // Turn on light with brightness and color const result = await homeassistant_control_lights({ entity_id: "light.living_room", action: "turn_on", brightness_pct: 75, color_name: "warm_white", }); ``` ### Automation Management ```javascript // List all automations const automations = await homeassistant_list_automations(); // Enable an automation const enabled = await homeassistant_toggle_automation({ entity_id: "automation.morning_routine", action: "turn_on", }); // Activate a scene const scene = await homeassistant_activate_scene({ entity_id: "scene.movie_time", }); ``` ### Climate Control ```javascript // Set thermostat temperature const climate = await homeassistant_control_climate({ entity_id: "climate.living_room", temperature: 22, hvac_mode: "heat", }); ``` ### System Information ```javascript // Get system overview const systemInfo = await homeassistant_system_info(); // Search for entities const searchResults = await homeassistant_search_entities({ search: "temperature", domain: "sensor", }); ``` ## ๐ŸŽฎ Client Examples Ready-to-use client examples are available in the [`examples/`](examples/) directory: ### ๐Ÿ“ Available Examples - **`simple-client.js`** - Basic connection and tool usage - **`smithery-client.js`** - Full-featured demonstration - **`secure-client.js`** - Environment-based secure configuration ### ๐Ÿš€ Quick Start with Examples ```bash cd examples npm install cp .env.example .env # Edit .env with your credentials npm run secure ``` ๐Ÿ”— **Using with Smithery**: The examples are ready for use with servers deployed on [Smithery.ai](https://smithery.ai) ๐Ÿ“– **Detailed Guide**: See [`examples/README.md`](examples/README.md) for complete setup instructions ## ๐Ÿ”ง Development ### Project Structure ``` src/ โ”œโ”€โ”€ index.ts # Main server file โ”œโ”€โ”€ utils/ โ”‚ โ””โ”€โ”€ api.ts # API utilities โ””โ”€โ”€ tools/ โ””โ”€โ”€ homeassistant/ โ”œโ”€โ”€ basic.ts # Basic HA operations โ”œโ”€โ”€ automation.ts # Automation tools โ”œโ”€โ”€ history.ts # History and monitoring โ”œโ”€โ”€ devices.ts # Device control โ””โ”€โ”€ system.ts # System administration ``` ### Adding New Tools 1. Create a new function in the appropriate tool file 2. Register it with the server using `server.tool()` 3. Follow the existing patterns for error handling and response formatting 4. Add documentation to the README ### Testing ```bash # Run with inspector for interactive testing npm run inspector # Test specific endpoints curl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:8123/api/states" ``` ## ๐Ÿš‘ Troubleshooting ### Common Issues **Connection Failed** - Verify HOME_ASSISTANT_URL is correct and accessible - Check that Home Assistant is running - Ensure no firewall blocking the connection **Authentication Failed** - Verify your long-lived access token is correct - Check token hasn't expired or been revoked - Ensure token has necessary permissions **Entity Not Found** - Use `homeassistant_list_all_entities` to find correct entity IDs - Check entity exists and is enabled in Home Assistant - Verify correct domain prefix (e.g., `light.`, `sensor.`) **Service Call Failed** - Use `homeassistant_list_services` to verify service availability - Check service parameters are correct for your device - Some services require specific entity types or states ### Debug Mode Enable debug logging in your `.env`: ```env DEBUG=true ``` ## ๐Ÿค Contributing 1. Fork the repository 2. Create a feature branch: `git checkout -b feature/amazing-feature` 3. Commit changes: `git commit -m 'Add amazing feature'` 4. Push to branch: `git push origin feature/amazing-feature` 5. Open a Pull Request ### Development Guidelines - Follow existing code style and patterns - Add proper TypeScript types - Include error handling for all API calls - Update documentation for new features - Test with real Home Assistant instance ## ๐Ÿ“œ API Reference This MCP server uses the [Home Assistant REST API](https://developers.home-assistant.io/docs/api/rest/). Key endpoints: - `/api/` - API information - `/api/states` - Entity states - `/api/services` - Available services - `/api/config` - Configuration - `/api/history` - Historical data - `/api/logbook` - Logbook entries ## ๐Ÿ“œ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## ๐Ÿ™ Acknowledgments - [Home Assistant](https://www.home-assistant.io/) - The amazing smart home platform - [Model Context Protocol](https://modelcontextprotocol.io/) - Protocol specification - [TypeScript](https://www.typescriptlang.org/) - Language and tooling ## ๐Ÿ“ž Support If you encounter issues or have questions: 1. Check the [troubleshooting section](#-troubleshooting) 2. Search existing [GitHub issues](https://github.com/gilberth/enhanced-homeassistant-mcp/issues) 3. Create a new issue with: - Home Assistant version - MCP server logs - Steps to reproduce - Expected vs actual behavior --- **Made with โค๏ธ for the Home Assistant community**

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/gilberth/enhanced-homeassistant-mcp'

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