popstas/smarthome-mcp-server
3.2
If you are the rightful owner of smarthome-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This MCP server integrates with Home Assistant and MQTT, allowing Model Context Protocol (MCP) clients to control and monitor smart home devices.
Tools
6
Resources
0
Prompts
0
Smart Home MCP Server
This MCP server integrates with Home Assistant and MQTT, allowing Model Context Protocol (MCP) clients to control and monitor smart home devices.
Features
- Retrieve the current state of all configured devices
- Change device states via Home Assistant or MQTT as fallback
- Manage automation rules persisted in
config.yml
- Add new devices dynamically and persist to configuration
- Text-to-speech messaging via MQTT TTS
Installation
npm install
Configuration
Copy the sample configuration and update credentials:
cp config.yml.example config.yml
Edit config.yml
:
mqtt:
host: YOUR_MQTT_HOST
port: 1883
user: YOUR_MQTT_USER
password: YOUR_MQTT_PASSWORD
base: home/mcp
home_assistant:
host: YOUR_HASS_HOST
token: YOUR_LONG_LIVED_ACCESS_TOKEN
rules:
- text: 'Your Automation Rule'
devices:
- name: 'Light in Room'
room: room
entity_id: light.your_light_entity
state_type: boolean
Usage
Start the server:
npm run build
npm start
Available Tools
get_smarthome_state
: Get current device stateschange_smarthome_state
: Change a device stateget_smarthome_rules
: List automation rulesadd_smarthome_rule
: Add a new automation ruleadd_smarthome_device
: Add a new device to the configsmarthome_tts_voice
: Send a TTS message via MQTT
Examples
Sample config.yml
mqtt:
host: localhost
port: 1883
user: user
password: pass
base: home/mcp
home_assistant:
host: localhost
token: token
rules:
- text: When no one is home or sleeping, turn off all lights.
devices:
- name: Light in Room
room: room
entity_id: light.yeelight_ceiling20_0x2339ef2c
state_type: boolean
Using Tools via MCP
Get all device states
{
"tool": "get_smarthome_state",
"parameters": {}
}
Change device state
{
"tool": "change_smarthome_state",
"parameters": {
"name": "Light in Room",
"value": "1"
}
}
List automation rules
{
"tool": "get_smarthome_rules",
"parameters": {}
}
Add a new rule
{
"tool": "add_smarthome_rule",
"parameters": { "text": "Turn on fan if humidity > 60%" }
}
Add a new device
{
"tool": "add_smarthome_device",
"parameters": {
"name": "Kitchen Fan",
"entity_id": "switch.kitchen_fan",
"room": "kitchen"
}
}
Development
Lint the source:
npm run lint src
Run tests:
npm test
License
MIT