项目简介

Home Assistant AI 上下文服务器(HA-MCP)是一个基于 Model Context Protocol (MCP) 构建的服务器,旨在作为大语言模型(LLM)与 Home Assistant 智能家居平台之间的桥梁。它允许 LLM 客户端通过自然语言理解和操作 Home Assistant 中的设备、自动化和配置,从而实现智能家居的AI控制和管理。

主要功能点

  • 智能发现、搜索与查询
    • 模糊实体搜索:支持容错的实体名称模糊搜索。
    • 深度配置搜索:在自动化、脚本和辅助实体配置中进行关键词搜索。
    • AI 优化系统概览:提供实体数量、区域、设备状态等全面的系统分析。
    • 模板评估:评估 Home Assistant 模板,用于动态数据处理。
    • 日志数据访问:查询日志条目,支持日期和实体过滤。
  • 设备与服务控制
    • 通用服务控制:执行任何 Home Assistant 服务,支持完整的参数。
    • 实时状态访问:获取详细的实体状态,包括属性、时间戳和上下文信息。
    • 批量设备控制:支持通过 WebSocket 验证同时控制多个设备。
  • 配置管理
    • 自动化与脚本管理:创建、修改、删除、启用/禁用及触发 Home Assistant 自动化和脚本。
    • 辅助实体管理:创建、修改、删除 'input_boolean'、'input_number'、'input_select'、'input_text'、'input_datetime' 和 'input_button' 等辅助实体。
  • 安全与维护
    • 备份与恢复:创建快速本地备份(不包含数据库)并支持安全恢复。

安装步骤

HA-MCP 服务器提供了多种安装方式,推荐使用 Home Assistant 插件或 Docker 容器方式。

方法一:Home Assistant 插件(推荐)

适用于运行 Home Assistant OS 的用户,提供最简便的安装体验。

  1. 添加仓库:在 Home Assistant Supervisor 的“插件商店”中,通过点击按钮或手动添加以下仓库 URL:
    https://github.com/homeassistant-ai/ha-mcp
  2. 安装插件:在插件商店中找到名为“Home Assistant MCP Server”的插件,点击安装并启动。
  3. 获取访问URL:插件启动后,Home Assistant UI 会显示 MCP 服务器的访问 URL,其中包含一个动态生成的秘密路径(例如:'http://<home-assistant-ip>:9583/private_your_secret_string')。请务必复制此完整 URL,LLM 客户端连接时需要使用。

方法二:Docker 容器

适用于 Home Assistant Container 或 Docker 环境。

  1. 获取长期访问令牌:在 Home Assistant UI 中,前往“你的个人资料”->“安全”->“长期访问令牌”创建并复制一个令牌。
  2. 启动容器:使用 Docker 命令或 'docker-compose.yml' 启动 HA-MCP 容器。以下是一个使用 'docker run' 的示例,LLM 客户端会通过其进程管理功能自动启动和停止此容器:
    # LLM 客户端在内部执行此命令来启动 MCP 服务器进程
    docker run --rm \
    -e HOMEASSISTANT_URL=http://homeassistant.local:8123 \
    -e HOMEASSISTANT_TOKEN=your_long_lived_token \
    ghcr.io/homeassistant-ai/ha-mcp:latest
    这将启动一个临时的 Docker 容器,并将其作为 LLM 客户端的 MCP 服务器。

服务器配置(MCP客户端侧)

MCP 客户端需要配置如何启动和连接 HA-MCP 服务器。以下是 LLM 客户端配置文件的 JSON 格式示例及其参数说明:

场景一:LLM 客户端直接启动 Docker 容器

适用于 Claude Desktop 或任何支持 'mcp.json' 格式的客户端,例如在 'mcp.json' 或 'claude_desktop_config.json' 中添加:

{
  "mcpServers": {
    "home-assistant": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-e", "HOMEASSISTANT_URL=http://homeassistant.local:8123",
        "-e", "HOMEASSISTANT_TOKEN=your_long_lived_token",
        "ghcr.io/homeassistant-ai/ha-mcp:latest"
      ],
      "env": {
        "MCP_SERVER_NAME": "ha-mcp",
        "MCP_SERVER_VERSION": "3.1.6"
      }
    }
  }
}

参数说明

  • '"home-assistant"': 这是您为该 MCP 服务器实例定义的名称,可自定义。
  • '"command"': 指定用于启动 MCP 服务器的可执行程序,此处为 '"docker"'。
  • '"args"': 传递给 'command' 的参数列表。
    • '"run"': Docker 命令,用于运行容器。
    • '"--rm"': 容器退出时自动删除。
    • '"-e HOMEASSISTANT_URL=..."': 设置 'HOMEASSISTANT_URL' 环境变量,指向您的 Home Assistant 实例地址。例如:'http://homeassistant.local:8123'。
    • '"-e HOMEASSISTANT_TOKEN=..."': 设置 'HOMEASSISTANT_TOKEN' 环境变量,用于 Home Assistant API 认证的长期访问令牌。请替换为您的实际令牌。
    • '"ghcr.io/homeassistant-ai/ha-mcp:latest"': 指定要运行的 Docker 镜像名称及标签。
  • '"env"': 可选,用于设置 MCP 服务器内部使用的环境变量,如服务器名称和版本,通常无需修改。

场景二:LLM 客户端通过 HTTP/HTTPS 连接已运行的 HA-MCP 服务器(例如 Home Assistant 插件或 Docker Compose 部署)

如果 HA-MCP 服务器已独立运行(例如作为 Home Assistant 插件或通过 Docker Compose 部署并暴露了 HTTP/HTTPS 接口),LLM 客户端的配置将更简单,只需提供服务器的访问 URL。

例如,对于 Home Assistant 插件,您会得到一个类似 'http://<home-assistant-ip>:9583/private_your_secret_string' 的 URL。LLM 客户端的配置将如下所示(具体格式取决于 LLM 客户端,此处为概念性示例):

{
  "mcpServers": {
    "home-assistant-web": {
      "transport": "http",
      "url": "http://<home-assistant-ip>:9583/private_your_secret_string"
    }
  }
}

参数说明

  • '"home-assistant-web"': 您为该 MCP 服务器实例定义的名称。
  • '"transport"': 指定传输协议,此处为 '"http"' 或 '"https"'。
  • '"url"': HA-MCP 服务器的完整访问地址,请务必包含秘密路径('/private_your_secret_string')

基本使用方法

配置完成后,您的大语言模型客户端即可通过 MCP 协议与 Home Assistant AI 上下文服务器交互:

  1. 自然语言查询:向 LLM 客户端提问,例如:“卧室灯现在亮着吗?” 或 “告诉我客厅的温度是多少?”
  2. 设备控制:使用自然语言命令控制设备,例如:“把卧室灯关掉” 或 “将恒温器设置为 22 摄氏度。”
  3. 自动化与管理:请求 LLM 客户端执行复杂的任务,例如:“创建一个早上 7 点打开厨房灯的自动化” 或 “备份 Home Assistant 配置。” HA-MCP 服务器会解析 LLM 客户端的请求,调用内部工具与 Home Assistant API 交互,并将结果返回给 LLM。

信息

分类

AI与计算