
Home Assistant
STDIOHome Assistant integration MCP server for AI to control smart home devices and systems.
Home Assistant integration MCP server for AI to control smart home devices and systems.
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.
No installation required! Run directly with npx:
# 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
🚧 Smithery Deployment Status: Currently optimizing tool loading to prevent timeout during Smithery's tool scanning. See TIMEOUT_RESOLUTION.md for details.
# 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
Edit the .env
file with your Home Assistant details:
HOME_ASSISTANT_URL=http://homeassistant.local:8123 HOME_ASSISTANT_TOKEN=your_long_lived_access_token_here DEBUG=false REQUEST_TIMEOUT=10000
# 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
# Development mode npm run dev # Production mode npm run build npm start # With MCP Inspector (for testing) npm run inspector
Para un despliegue fácil y seguro usando Docker:
# 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 para instrucciones detalladas.
Para usar el servidor desplegado en la nube a través de Smithery:
@gilberth/enhanced-homeassistant-mcp
// 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.
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 |
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 |
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 |
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 |
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 |
// 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", });
// 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", });
// Set thermostat temperature const climate = await homeassistant_control_climate({ entity_id: "climate.living_room", temperature: 22, hvac_mode: "heat", });
// Get system overview const systemInfo = await homeassistant_system_info(); // Search for entities const searchResults = await homeassistant_search_entities({ search: "temperature", domain: "sensor", });
Ready-to-use client examples are available in the examples/
directory:
simple-client.js
- Basic connection and tool usagesmithery-client.js
- Full-featured demonstrationsecure-client.js
- Environment-based secure configurationcd 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
📖 Detailed Guide: See examples/README.md
for complete setup instructions
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
server.tool()
# Run with inspector for interactive testing npm run inspector # Test specific endpoints curl -H "Authorization: Bearer YOUR_TOKEN" \ "http://localhost:8123/api/states"
Connection Failed
Authentication Failed
Entity Not Found
homeassistant_list_all_entities
to find correct entity IDslight.
, sensor.
)Service Call Failed
homeassistant_list_services
to verify service availabilityEnable debug logging in your .env
:
DEBUG=true
git checkout -b feature/amazing-feature
git commit -m 'Add amazing feature'
git push origin feature/amazing-feature
This MCP server uses the Home Assistant REST API. Key endpoints:
/api/
- API information/api/states
- Entity states/api/services
- Available services/api/config
- Configuration/api/history
- Historical data/api/logbook
- Logbook entriesThis project is licensed under the MIT License - see the LICENSE file for details.
If you encounter issues or have questions:
Made with ❤️ for the Home Assistant community