该服务器使用 MCP 协议与 LLM 应用程序共享对本地 Home Assistant 实例的访问。
这是一个强大的桥梁,连接您的 Home Assistant 实例和语言学习模型(LLMs),通过模型上下文协议(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_API.md 以获取完整的 SSE 系统文档。
附加组件管理
包管理(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
编辑 .env 文件,填写您的 Home Assistant 配置:
# 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:启用调试模式(真/假)# 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": "当检测到运动时打开灯光",
"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": "在指定房间打开灯光"
},
{
"name": "set_temperature",
"parameters": ["temperature"],
"description": "设置当前上下文的温度"
}
]
}
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": "缺少必需的参数:room",
"details": {
"missing_fields": ["room"]
}
}
}
API 实现了速率限制以防止滥用:
当超出速率限制时,服务器返回:
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "请求过多",
"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