Home Assistant MCP控制面板添加福利群:解决AI开发者的「MCP实战痛点」该服务器使用MCP协议,使语言学习模型(LLM)应用程序能够访问本地Home Assistant实例。
这是一个强大的桥梁,连接您的Home Assistant实例和语言学习模型(LLM),通过模型上下文协议(MCP)实现智能家居设备的自然语言控制和监控。该服务器提供了一个全面的API,用于管理您的整个Home Assistant生态系统,从设备控制到系统管理。
该服务器包含一个强大的服务器发送事件(SSE)系统,可提供来自您的Home Assistant实例的实时更新。这使您可以:
const eventSource = new EventSource(
'http://localhost:3000/subscribe_events?token=YOUR_TOKEN&domain=light'
);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到更新:', data);
};

有关SSE系统的完整文档,请参阅SSE_API.md。
插件管理
包管理(HACS)
自动化管理
智能组织
健壮的架构
# 克隆仓库
git clone https://github.com/jango-blockchained/homeassistant-mcp.git
cd homeassistant-mcp
# 安装依赖
npm install
# 构建项目
npm run build

该项目包含Docker支持,便于在不同平台上轻松部署和保持一致的环境。
克隆仓库:
git clone https://github.com/jango-blockchained/homeassistant-mcp.git
cd homeassistant-mcp

配置环境:
cp .env.example .env

使用您的Home Assistant配置编辑.env文件:
# Home Assistant配置 HASS_HOST=http://homeassistant.local:8123 HASS_TOKEN=your_home_assistant_token HASS_SOCKET_URL=ws://homeassistant.local:8123/api/websocket # 服务器配置 PORT=3000 NODE_ENV=production DEBUG=false
使用Docker Compose构建并运行:
# 构建并启动容器
docker compose up -d
# 查看日志
docker compose logs -f
# 停止服务
docker compose down

验证安装:
服务器现在应该在http://localhost:3000上运行。您可以检查健康端点http://localhost:3000/health。
更新应用程序:
# 拉取最新更改
git pull
# 重新构建并重启容器
docker compose up -d --build

Docker设置包括:
所有环境变量都可以在.env文件中配置。支持以下变量:
HASS_HOST:您的Home Assistant实例URLHASS_TOKEN:Home Assistant的长期访问令牌HASS_SOCKET_URL:Home Assistant的WebSocket URLPORT:服务器端口(默认:3000)NODE_ENV:环境(生产/开发)DEBUG:启用调试模式(true/false)# Home Assistant配置 HASS_HOST=http://homeassistant.local:8123 # 您的Home Assistant实例URL HASS_TOKEN=your_home_assistant_token # 长期访问令牌 HASS_SOCKET_URL=ws://homeassistant.local:8123/api/websocket # WebSocket URL # 服务器配置 PORT=3000 # 服务器端口(默认:3000) NODE_ENV=production # 环境(生产/开发) DEBUG=false # 启用调试模式 # 测试配置 TEST_HASS_HOST=http://localhost:8123 # 测试实例URL TEST_HASS_TOKEN=test_token # 测试令牌
.env.example复制到.env.development.env.example复制到.env.production.env.example复制到.env.test要使用您的新Home Assistant MCP服务器,可以将Claude Desktop添加为客户端。将以下内容添加到配置中。请注意,这将在claude内部运行MCP,不适用于Docker方法。
{ "homeassistant": { "command": "node", "args": [<path/to/your/dist/folder>] "env": { NODE_ENV=development HASS_HOST=http://homeassistant.local:8123 HASS_TOKEN=your_home_assistant_token PORT=3000 HASS_SOCKET_URL=ws://homeassistant.local:8123/api/websocket LOG_LEVEL=debug } } }
{
"tool": "control",
"command": "turn_on", // 或 "turn_off", "toggle"
"entity_id": "light.living_room"
}

{
"tool": "control",
"command": "turn_on",
"entity_id": "light.living_room",
"brightness": 128,
"color_temp": 4000,
"rgb_color": [255, 0, 0]
}

{
"tool": "addon",
"action": "list"
}

{
"tool": "addon",
"action": "install",
"slug": "core_configurator",
"version": "5.6.0"
}

{
"tool": "addon",
"action": "start", // 或 "stop", "restart"
"slug": "core_configurator"
}

{
"tool": "package",
"action": "list",
"category": "integration" // 或 "plugin", "theme", "python_script", "appdaemon", "netdaemon"
}

{
"tool": "package",
"action": "install",
"category": "integration",
"repository": "hacs/integration",
"version": "1.32.0"
}

{
"tool": "automation_config",
"action": "create",
"config": {
"alias": "Motion Light",
"description": "Turn on light when motion detected",
"mode": "single",
"trigger": [
{
"platform": "state",
"entity_id": "binary_sensor.motion",
"to": "on"
}
],
"action": [
{
"service": "light.turn_on",
"target": {
"entity_id": "light.living_room"
}
}
]
}
}

{
"tool": "automation_config",
"action": "duplicate",
"automation_id": "automation.motion_light"
}

GET /api/state POST /api/state
管理系统当前状态。
示例请求:
POST /api/state
{
"context": "living_room",
"state": {
"lights": "on",
"temperature": 22
}
}

POST /api/context
使用新信息更新当前上下文。
示例请求:
POST /api/context
{
"user": "john",
"location": "kitchen",
"time": "morning",
"activity": "cooking"
}

POST /api/action
执行指定的操作并使用给定的参数。
示例请求:
POST /api/action
{
"action": "turn_on_lights",
"parameters": {
"room": "living_room",
"brightness": 80
}
}

POST /api/actions/batch
按顺序执行多个操作。
示例请求:
POST /api/actions/batch
{
"actions": [
{
"action": "turn_on_lights",
"parameters": {
"room": "living_room"
}
},
{
"action": "set_temperature",
"parameters": {
"temperature": 22
}
}
]
}

GET /api/actions
返回所有可用操作的列表。
示例响应:
{
"actions": [
{
"name": "turn_on_lights",
"parameters": ["room", "brightness"],
"description": "Turns on lights in specified room"
},
{
"name": "set_temperature",
"parameters": ["temperature"],
"description": "Sets temperature in current context"
}
]
}

GET /api/context?type=current
检索上下文信息。
示例响应:
{
"current_context": {
"user": "john",
"location": "kitchen",
"time": "morning",
"activity": "cooking"
}
}

该服务器通过WebSocket连接支持实时更新。
// 客户端连接示例
const ws = new WebSocket('ws://localhost:3000/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('收到更新:', data);
};

state_change:当系统状态变化时触发context_update:当上下文更新时触发action_executed:当操作完成时触发error:当发生错误时触发示例事件数据:
{
"event": "state_change",
"data": {
"previous_state": {
"lights": "off"
},
"current_state": {
"lights": "on"
},
"timestamp": "2024-03-20T10:30:00Z"
}
}

所有端点返回标准HTTP状态码:
错误响应格式:
{
"error": {
"code": "INVALID_PARAMETERS",
"message": "Missing required parameter: room",
"details": {
"missing_fields": ["room"]
}
}
}

API实现了速率限制以防止滥用:
当超过速率限制时,服务器返回:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests",
"reset_time": "2024-03-20T10:31:00Z"
}
}

# 获取当前状态
curl -X GET \
http://localhost:3000/api/state \
-H 'Authorization: ApiKey your_api_key_here'
# 执行操作
curl -X POST \
http://localhost:3000/api/action \
-H 'Authorization: ApiKey your_api_key_here' \
-H 'Content-Type: application/json' \
-d '{
"action": "turn_on_lights",
"parameters": {
"room": "living_room",
"brightness": 80
}
}'

// 执行操作
async function executeAction() {
const response = await fetch('http://localhost:3000/api/action', {
method: 'POST',
headers: {
'Authorization': 'ApiKey your_api_key_here',
'Content-Type': 'application/json'
},
body: JSON.stringify({
action: 'turn_on_lights',
parameters: {
room: 'living_room',
brightness: 80
}
})
});
const data = await response.json();
console.log('操作结果:', data);
}

# 开发模式,带热重载
npm run dev
# 构建项目
npm run build
# 生产模式
npm run start
# 运行测试
npx jest --config=jest.config.cjs
# 带覆盖率的测试运行
npx jest --coverage
# 代码检查
npm run lint
# 代码格式化
npm run format

Node.js版本(toSorted is not a function)
nvm install 20.10.0 nvm use 20.10.0
连接问题
HASS_HOST的可访问性插件管理问题
HACS集成问题
自动化问题
✅ 已完成
🚧 进行中
MIT许可证 - 请参阅LICENSE文件