Heidi Labs
GitHub TrendingGitHub Trending 项目约 45 分钟17,883 字

homeassistant-ai / ha-mcp

本文目录

重大变更(v7.3.0): ha_config_set_yaml 已移至 beta。

HA-MCP——用 AI 管理 Home Assistant#

用 Claude、ChatGPT 和其他 AI 助手配置和自动化 Home Assistant。

🚀 快速开始#

运行 ha-mcp 的推荐方式是 HA-MCP 集成。它通过 HACS(Home Assistant Community Store;在 Home Assistant 2026.11+ 上则是内置市场)安装到 Home Assistant,在进程内运行完整服务器,并适用于所有 Home Assistant 安装类型——Home Assistant OS、Supervised、Container 和 Core——功能完全一致。在所有情况下它都是最简单的设置:安装过程会要求提供管理员访问令牌,并选择客户端可以如何连接。

通过 HACS,或在 Home Assistant 2026.11+ 上通过市场(首选安装方式)将它添加到 Home Assistant:

快速开始:

以下设置适用于 9.0.0 版(2026 年 10 月 28 日)及更高版本;更早版本显示的是更短的设置表单,没有管理员账户步骤。

  1. 安装 HA-MCP 集成(需要 Home Assistant 2026.8.0 或更新版本;参见兼容性详情)。在 Home Assistant 2026.8–2026.10 上,打开 HACS,搜索 HA-MCP,然后点击 Download。在 Home Assistant 2026.11 或更新版本上,打开 Settings → Marketplace,接受首次运行警告,搜索 HA-MCP,然后点击 Install。HA-MCP 位于默认目录中,因此安装它并接收其更新无需连接 GitHub 或添加自定义仓库。上方的徽章也会打开它的目录页面。已经从更早的 homeassistant-ai/ha-mcp-integration 仓库安装过?它仍会收到相同的发行版。在市场里,请保持 GitHub 连接,以便对该自定义仓库进行后台检查。较旧的已安装版本可能仍显示为 HA-MCP Custom Component;搜索 HA-MCP 会同时匹配两个名称。
  2. 重启 Home Assistant。
  3. 决定服务器以哪个管理员账户身份运行。可以在你自己的账户上创建一个长期访问令牌(你的个人资料 → Security → Long-lived access tokens → Create token;它一旦泄露,在任何地方都能用,而且服务器的更改会显示在你的名下);或者更安全地,在 Settings → People → Add person 下创建一个专供 HA-MCP 使用的账户,开启 Allow login、Local access only 和 Administrator。第二种方案绝不要使用你自己的登录。
  4. 转到 Settings → Devices & Services → Add Integration,搜索 HA-MCP 并选择 HA-MCP Server。粘贴你的令牌,或者输入你为 HA-MCP 创建的账户的用户名和密码(HA-MCP 会创建自己的令牌),选择客户端可以如何连接——通过 Home Assistant 远程访问(从 Secret URL 开始,这是最简单的;Home Assistant 登录会增加一个登录步骤)和/或网络访问:Local network——然后点击 Submit。两者默认都是禁用的,因此另一台设备上的客户端需要启用其中之一。
  5. 从条目的 Configure 屏幕复制连接 URL(Settings → Devices & Services → "HA-MCP — Manage Home Assistant with AI" → HA-MCP Server → Configure)。一条通知会确认服务器已启动,并指向那里。
  6. 把该 URL 粘贴到你的 AI 客户端——完成。

连接 URL。 Configure 屏幕会为远程客户端提供一个 Home Assistant webhook URL——https://<your-ha-domain>/api/webhook/<webhook-id>,通过 Nabu Casa 或任何已指向 Home Assistant 的反向代理(本地则为 http://<ha-host>:8123/api/webhook/<webhook-id>)。对于同一网络上的客户端,服务器也可以直接通过 http://<ha-ip>:9584/private_<random> 访问。

替代其他安装方式: 进程内服务器是一个完整、独立的 ha-mcp 安装——它取代应用(add-on)、Docker 和 uvx/PyPI(stdio)方式。只运行一种;不要将进程内服务器与另一种安装同时运行。

仅本地? 在设置时保持远程访问禁用(或在条目选项中关闭 Remote access via webhook)——这样根本不会注册 webhook,而直接端口和侧边栏面板仍然可用。

设置面板: 服务器运行时,Home Assistant 侧边栏会出现一个仅管理员可见的 HA-MCP 面板,用于管理工具、功能标志、备份和主题。

可选身份验证: 将 Authentication mode 设为 ha_auth,要求 Home Assistant 账户登录,而不是使用秘密 URL 作为凭据。

手动安装(无 HACS 或市场): 将此仓库中的 custom_components/ha_mcp_tools/ 复制到你的 Home Assistant config/custom_components/ 目录,然后重启并按上述步骤添加集成。

组件的第二种条目类型——File & YAML services 条目(HA-MCP File & YAML Tools)——仅在你启用 ha-mcp 的可选文件和 YAML 编辑工具(功能标志,默认关闭)时才需要——否则跳过它;以后随时可以添加。它适用于任何服务器类型(进程内、应用、Docker 或 stdio)。

完整的进程内服务器文档 → · 面向特定客户端配置的设置向导 →

🏠 Home Assistant 应用(add-on)#

更愿意把 ha-mcp 作为 Home Assistant 应用(add-on)运行?在 Home Assistant OS 和 Supervised 安装上,这是紧随其后的第二选择——无需管理访问令牌,并且适用于 Claude Desktop、Claude.ai、ChatGPT 以及本地网络上的任何其他 MCP 客户端,或已配置远程访问的客户端。

将仓库添加到你的 Home Assistant 实例:

如果它打开 App store 却没有出现 add-repository 对话框(一个已知的 Home Assistant 问题),请手动添加:Settings → Apps → Install app → ⋮ → Repositories,然后粘贴 https://github.com/homeassistant-ai/ha-mcp。

从 Settings → Apps → Install app 安装 "Home Assistant MCP Server" 并点击 Start。(Home Assistant 2026.2 将 "Add-ons" 重命名为 "Apps";在旧版本中这是 Add-on store。)

打开 Logs 标签页,找到你唯一的 MCP URL。

将你的 AI 客户端连接到该 URL——无需令牌或凭据设置。

完整的应用文档 →

⚠️ 每个客户端只配置一种安装方式。 自定义组件、应用、Docker/PyPI 和本地 stdio 是运行同一服务器的独立方式——选择一种,并让你的 AI 客户端指向那个单一 URL。在一个客户端中为同一服务器保留两个条目(例如一个本地 uvx ha-mcp@latest 条目带有 HOMEASSISTANT_URL / HOMEASSISTANT_TOKEN,同时又有应用或组件 URL)是连接挂起的已知原因。

其他安装方式#

这些方式在 Home Assistant 之外运行服务器——适用于 Container / Core 安装(无法运行应用)或单独的主机。设置向导会为每种方式生成确切的客户端配置。

  • Docker(HTTP 服务器):以 HTTP 模式运行 ghcr.io/homeassistant-ai/ha-mcp,指向你的 Home Assistant URL 和长期令牌(推荐管理员令牌;非管理员令牌可用但有限制),并将客户端连接到它的秘密 URL。完整命令和各客户端配置见设置向导。
  • PyPI / uvx(HTTP 服务器):用 uvx ha-mcp@latest(或 pip)运行已发布的 ha-mcp 包,作为可流式 HTTP 服务器,方式相同。详情见设置向导。
  • 本地 stdio(不推荐):在你自己的机器上通过 stdio 运行 ha-mcp。下面 Demo server 部分的一键安装器使用此路径;设置向导涵盖将其连接到你自己 Home Assistant 的方法。
  • OIDC 身份验证:将远程访问置于外部身份提供方(Authentik、Keycloak、Auth0 等)之后,而不是使用秘密 URL——所有已认证用户共享服务器的 Home Assistant 凭据。参见 OIDC Mode。

⚠️ stdio 存在已知传输问题。 stdio 传输有连接问题,而可流式 HTTP 没有(#1713)。只建议用于演示/测试折腾——真实设置请使用自定义组件或上述 HTTP 方式。

🌐 远程访问(Nabu Casa / Webhook Proxy 应用 / OpenAI Tunnel)#

使用 HA-MCP 自定义组件?你不需要 Webhook Proxy——该组件有自己的内置 webhook 用于远程访问(见顶部快速开始的说明)。代理是给应用用的(它也可以通过 mcp_server_url 选项前置另一个外部服务器)。下面的 OpenAI Tunnel 不同:当 Home Assistant 完全无法公开访问时(没有 Nabu Casa 或反向代理),它适用于任何安装方式。

已经有 Nabu Casa 或另一个指向 Home Assistant 的反向代理?Webhook Proxy 应用会通过你现有的设置路由 MCP 流量——无需单独的隧道或端口转发。

  1. 从同一商店安装 MCP Server 应用(见上)和 Webhook Proxy 应用
  2. 启动 webhook 代理,并在提示时重启 Home Assistant
  3. 从应用日志复制 webhook URL:
MCP Server URL (remote): https://xxxxx.ui.nabu.casa/api/webhook/mcp_xxxxxxxx
  1. 用该 URL 配置你的 AI 客户端

其他远程访问方式(Cloudflare Tunnel、自定义反向代理)请参见设置向导。

防火墙后的 ChatGPT / Codex(OpenAI Tunnel)。 ChatGPT 连接器通常需要可公开访问的 URL。如果你不能(或不想)暴露一个 URL,由 @norpol 开发的社区版 OpenAI Tunnel for HA-MCP integration 会在 Home Assistant 内运行 OpenAI 的 tunnel-client,通过仅出站连接把你的本地 MCP 服务器 URL 连接到 OpenAI 托管的隧道——无需端口转发、反向代理或公共 URL。将它指向你的 ha-mcp URL,然后把 ChatGPT 连接器附加到同一个隧道 ID。参见 FAQ 条目和 #1811。

Webhook 代理文档 →

🧪 演示服务器(Windows / macOS / Linux)#

想在连接自己的 Home Assistant 之前试用 ha-mcp?无需付费订阅。这些一键脚本会建立到托管演示环境的本地 stdio 连接,让你几分钟内看到它工作。每个脚本中的“连接你自己的 Home Assistant”链接会说明如何指向你的实例。

🍎 macOS#

  1. 前往 claude.ai 并登录(或创建一个免费账户)
  2. 打开 Terminal 并运行:
curl -LsSf https://raw.githubusercontent.com/homeassistant-ai/ha-mcp/master/scripts/install-macos.sh | sh
  1. 下载 Claude Desktop(或重启:Claude 菜单 → Quit)
  2. 问 Claude:“你能看到我的 Home Assistant 吗?”
  3. 你现在已连接到演示环境!连接你自己的 Home Assistant →

🐧 Linux#

Anthropic 不为 Linux 发布 Claude Desktop,所以选择一条路径:

Claude Desktop——免费,通过社区构建版:

  1. 安装社区版 Claude Desktop for Linux 构建版,并用免费的 claude.ai 账户登录
  2. 打开 Terminal 并运行:
curl -LsSf https://raw.githubusercontent.com/homeassistant-ai/ha-mcp/master/scripts/install-linux.sh | sh
  1. 重启 Claude Desktop,然后问:“你能看到我的 Home Assistant 吗?”

Claude Code——官方 CLI,需要付费 Claude 计划:

  1. 安装 Claude Code:curl -fsSL https://claude.ai/install.sh | bash
  2. 配置 ha-mcp,然后运行 claude:
curl -LsSf https://raw.githubusercontent.com/homeassistant-ai/ha-mcp/master/scripts/install.sh | sh -s -- --claude-code
  1. 启动 claude,运行 /mcp 确认,然后问:“你能看到我的 Home Assistant 吗?”

完整的 Linux 指南 →

🪟 Windows#

  1. 前往 claude.ai 并登录(或创建一个免费账户)
  2. 打开 Windows PowerShell(从开始菜单)并运行:
irm https://raw.githubusercontent.com/homeassistant-ai/ha-mcp/master/scripts/install-windows.ps1 | iex
  1. 下载 Claude Desktop(或重启:File → Exit)
  2. 问 Claude:“你能看到我的 Home Assistant 吗?”
  3. 你现在已连接到演示环境!连接你自己的 Home Assistant →

🧙 面向 15+ 客户端的设置向导#

Claude Code、Gemini CLI、ChatGPT、Open WebUI、VSCode、Cursor 等。

遇到问题?查看 FAQ 与故障排除。

💬 你能用它做什么?#

直接自然地与 Claude 对话即可。以下是一些真实示例:

你说会发生什么
“创建一个在日落时打开门廊灯的自动化”创建带有正确触发器和动作的自动化
“给我的仪表盘添加一张天气卡片”用新卡片更新你的 Lovelace 仪表盘
“运动传感器自动化不工作,调试一下”分析执行轨迹、找出问题、建议修复
“让我的早晨例程自动化也打开咖啡机”读取现有自动化,添加新动作并更新
“创建一个设置电影模式的脚本:调暗灯光、关闭百叶窗、打开电视”创建带有一系列动作的可复用脚本

少花时间配置,多花时间享受智能家居。

✨ 功能#

类别能力
🔍 搜索模糊实体搜索、深层配置搜索、系统概览
🏠 控制任意服务、批量设备控制、实时状态
🔧 管理自动化、脚本、辅助元素、仪表盘、区域、分区、分组、日历、蓝图
📊 监控历史、统计、摄像头快照、自动化轨迹、ZHA 设备
💾 系统备份/恢复、更新、应用、设备注册表
🔒 安全只读模式开关、按工具启用/禁用、工具安全策略(用户批准)、自动编辑备份

模板辅助元素编辑备份通过 HA-MCP 自定义组件捕获持久化选项,使用其 Server 条目或 File & YAML Tools 条目。辅助元素编辑、通用集成选项编辑和删除会捕获稳定的配置条目身份以及实体 ID/名称映射。捕获会拒绝降级的机密擦除。恢复现有辅助元素需要一份新的安全备份,会移除快照中不存在的可选设置,并验证持久化选项。

对于 Template 备份列表和批量删除,请按捕获时作为 entity_id 返回的配置条目 ID 进行筛选。捕获接受实体别名;历史筛选器使用稳定的配置条目 ID。重建会分别报告其替代配置条目 ID 和保存的实体映射。

如果原始条目已被删除,恢复会重新创建辅助元素,并报告其新配置条目 ID。可用时会恢复保存的实体 ID 和自定义名称;创建前会拒绝已占用的实体 ID。没有实体元数据的旧快照无法保留重命名后的实体 ID。如果创建后发生冲突或验证失败,新的辅助元素和源备份会保留,结果会报告新条目供检查。其他实体/设备注册表设置不会恢复。通过同一服务器进行的辅助元素和集成编辑会等待恢复完成;其他 Home Assistant 客户端不在此协调范围内。失败或不确定的恢复会报告其结果和安全拒绝的原因;重试前请检查当前辅助元素。

完整工具列表(87 个工具)#

类别工具
应用(add-ons)ha_get_app, ha_manage_app
区域与楼层ha_list_floors_areas, ha_remove_area_or_floor, ha_set_area_or_floor
Assistha_manage_pipeline
自动化ha_config_get_automation, ha_config_remove_automation, ha_config_set_automation
蓝图ha_manage_blueprints
日历ha_config_get_calendar_events, ha_config_remove_calendar_event, ha_config_set_calendar_event
摄像头ha_get_camera_image
仪表盘ha_get_dashboard_screenshot(beta)
仪表盘管理ha_config_delete_dashboard_resource, ha_config_delete_dashboard, ha_config_get_dashboard, ha_config_list_dashboard_resources, ha_config_set_dashboard_resource, ha_config_set_dashboard
开发者ha_dev_manage_server, ha_dev_manage_settings
设备注册表ha_get_device, ha_remove_device, ha_set_device
能源ha_manage_energy_prefs
实体注册表ha_get_entity_exposure, ha_get_entity, ha_remove_entity, ha_set_entity
文件ha_delete_file(beta), ha_list_files(beta), ha_read_file(beta), ha_write_file(beta)
分组ha_config_list_groups, ha_config_remove_group, ha_config_set_group
HACSha_get_hacs_info, ha_manage_hacs
辅助实体ha_config_list_helpers, ha_config_set_helper, ha_remove_helpers_integrations
历史与统计ha_get_automation_traces, ha_get_history, ha_get_logs
集成ha_get_integration, ha_get_system_health, ha_set_integration
标签与类别ha_config_get_category, ha_config_get_label, ha_config_remove_category, ha_config_remove_label, ha_config_set_category, ha_config_set_label
Matterha_manage_radio
场景ha_config_get_scene, ha_config_remove_scene, ha_config_set_scene
脚本ha_config_get_script, ha_config_remove_script, ha_config_set_script
搜索与发现ha_get_overview, ha_get_state, ha_search
服务与设备控制ha_bulk_control, ha_call_event, ha_call_service, ha_get_operation_status, ha_list_services
系统ha_config_get_yaml(beta), ha_config_set_yaml(beta), ha_manage_backup, ha_manage_custom_tool(beta), ha_manage_security_policy, ha_manage_theme, ha_manage_updates, ha_reload_core, ha_restart
待办列表ha_get_todo, ha_remove_todo_item, ha_set_todo_item
实用工具ha_eval_template, ha_report_issue
分区ha_get_zone, ha_remove_zone, ha_set_zone

即使 Z-Wave 配置实体被禁用或不存在,也可以通过 ha_manage_radio 的 action="get_config_params" 或 action="get_config_param" 读取 Z-Wave 配置值。读取默认使用 Z-Wave JS 缓存;单个完整根参数可以显式请求设备读取。参见参数读取、时效性和示例。

🆚 ha-mcp 与 Home Assistant 内置 MCP Server#

Home Assistant 自带自己的 MCP Server 集成。它建立在 Assist 管道之上,因此连接的 MCP 客户端可以读取和控制你已暴露给 Assist 的实体,并运行 Assist 能理解的意图——对于已暴露设备的语音式控制很方便。

ha-mcp 是一个独立服务器,专为配置、构建和调试你的智能家居而设计,而不仅仅是控制它。除了设备控制,它还增加了内置集成没有的能力:

能力内置 MCP Serverha-mcp
控制已暴露设备、查询状态是是
实体范围仅暴露给 Assist 的实体Home Assistant 中的所有内容
创建/编辑自动化、脚本、场景否是
构建与编辑仪表盘否是
从轨迹调试自动化、读取历史和日志否是
管理辅助元素、区域、分区、标签、分组否是
备份、应用、HACS、设备与实体注册表否是

经验法则:使用内置集成对你已暴露的设备进行语音式控制;当你想要一个还能构建和维护 Home Assistant 设置的 AI 助手时,使用 ha-mcp。

🔌 自定义组件(ha_mcp_tools)——文件与 YAML 服务#

HA-MCP 集成还提供一组标准 Home Assistant API 无法提供的特权工具:文件系统访问和 YAML 配置编辑。(同一组件在进程内运行完整服务器——这是顶部快速开始部分推荐的安装方式。)它的 File & YAML services 条目(HA-MCP File & YAML Tools)启用下面的工具。

需要该组件的工具:

工具描述
ha_config_set_yaml(beta)在 configuration.yaml 和包文件中安全添加、替换或删除顶层 YAML 键(自动备份、验证和配置检查)
ha_list_files(beta)列出允许目录中的文件
ha_read_file(beta)从允许路径读取文件(配置 YAML、日志和允许的目录)
ha_write_file(beta)将文件写入允许的目录
ha_delete_file(beta)从允许的目录删除文件

模板辅助元素编辑备份和恢复也需要该组件,使用其 Server 条目或 File & YAML Tools 条目。如果组件缺失,这五个工具会返回错误并附带安装说明。

这些工具还需要 beta 功能标志。参见 Beta Features 了解如何启用它们——包括 ENABLE_BETA_FEATURES 总开关,必须先打开它,文件系统/YAML 子标志才会生效。

安装#

从同一个 HA-MCP 集成安装 HA-MCP File & YAML Tools 条目:

需要通过 HACS 或市场使用 Home Assistant 2026.8.0 或更新版本;手动安装请参见兼容性详情。在 Home Assistant 2026.8–2026.10 上:打开 HACS,搜索 HA-MCP,然后点击 Download。在 2026.11 或更新版本上:打开 Marketplace,接受首次运行警告,搜索 HA-MCP,然后点击 Install。主仓库在两者中都位于默认目录。或者将此仓库中的 custom_components/ha_mcp_tools/ 复制到你的 HA config/custom_components/ 目录。

安装后,重启 Home Assistant,然后打开 Settings > Devices & Services > Add Integration,搜索 HA-MCP,并添加 HA-MCP File & YAML Tools 条目。

要通过同一组件在进程内运行完整的 ha-mcp 服务器,请参见顶部快速开始部分和完整的进程内服务器文档 →。

🧠 用 Agent Skills 获得更好的结果#

这个服务器为你的 AI 智能体提供控制 Home Assistant 的工具。为了获得更好的配置,请将它和 Home Assistant Agent Skills 搭配使用——这些领域知识教智能体 Home Assistant 的最佳实践。

MCP 服务器可以创建自动化、辅助元素和仪表盘,但它对如何组织它们没有意见。没有领域知识,智能体往往会过度依赖模板、选错辅助元素类型,或产生难以维护的自动化。技能填补了这个空白:优先使用原生结构而不是 Jinja2 变通方案、正确选择辅助元素、安全的重构工作流,以及正确使用自动化模式。

捆绑技能(内置)#

来自 homeassistant-ai/skills 的技能已捆绑,并作为 MCP 资源通过 skill:// URI 提供。任何支持资源的 MCP 客户端都可以自动发现它们——无需手动安装。对于仅支持工具的客户端(claude.ai 等),最佳实践技能可通过 ha_get_skill_guide 工具访问:不带参数调用它可读取 SKILL.md,或将 file 设为 SKILL.md 链接的路径来读取该参考文件。资源不会自动注入上下文——客户端必须显式请求它们,因此空闲上下文成本只是元数据列表。

ha_get_skill_guide 是强制工具:目录始终暴露它(无法禁用),因此仅支持工具的客户端永远不会看到静默缺失的技能表面。

对于偏好本地技能文件的客户端,仍可手动安装技能——参见技能仓库中的说明。

🔍 面向 AI 智能体的工具发现#

默认情况下,完整工具目录(约 87 个工具)会通过标准 MCP tools/list 响应列给客户端。支持延迟/按需加载工具的客户端(claude.ai、Claude Desktop、Claude Code)可以很好地处理——工具只在需要时被拉入上下文,因此空闲上下文成本接近零。

对于不支持延迟工具的设置——Claude Haiku、Gemini、OpenAI 兼容本地模型和更小的开源权重模型,或无论模型如何都会内联所有工具模式的客户端(例如 GitHub Copilot CLI)——预先列出完整工具目录会增加大量空闲上下文,并可能压垮较小的模型。为解决这个问题,服务器附带一个基于 FastMCP 的 BM25 搜索变换构建的、基于搜索的发现模式。

更小或本地 LLM(Ollama 等)#

如果你的模型看不到工具或你的 Home Assistant,它可能一次性拿到了整个工具目录,难以处理。建议尝试以下方法:

  1. 启用工具搜索(ENABLE_TOOL_SEARCH=true,或下方的应用选项)。服务器不会预先列出每个工具,而是把目录放在搜索接口之后,模型只在需要时拉入它需要的工具。
  2. 将模型的上下文窗口提高到默认值以上。本地运行时附带较小的默认值(Ollama 的 num_ctx 是一个例子),无法容纳大型工具集加上对话——请大幅提高默认值。

启用基于搜索的发现#

设置 ENABLE_TOOL_SEARCH=true(或切换 HA 应用中的选项)。完整目录会在工具列表中被替换为四个入口点,加上一小组始终可见的“固定”工具(ha_search、ha_get_overview、ha_report_issue 等)。所有工具在被发现后仍可按名称直接调用:

工具用途
ha_search_tools跨所有工具(包括固定工具)的 BM25 英文关键词搜索。隐藏工具会以紧凑形式返回:名称、一行描述(docstring 的第一段)、一行参数列表(类型、枚举值、必填)以及执行它的代理。ha_search_tools(tools=[...]) 返回指定工具的完整定义(描述、输入模式和注解),这是调用前的第二跳。固定工具返回仅含名称的存根(pinned: true),指回工具列表,并且不占用结果槽位。
ha_call_read_tool按名称执行带有 readOnlyHint 的工具。安全——客户端可以自动批准。
ha_call_write_tool执行创建或更新数据的写入工具。
ha_call_delete_tool执行删除数据的工具。

代理拆分让 MCP 客户端可以按类别应用不同的权限策略(例如自动批准读取、写入时提示、删除时确认),而无需解析工具 docstring。

一个 ha_manage_* 工具组合了多个操作,因此可以从多个代理访问:ha_call_write_tool 和 ha_call_delete_tool 运行整个工具,而 ha_call_read_tool 只运行只读模式批准的读取操作(相同的每次调用判定),因此没有已批准读取操作的 manage 工具无法在那里访问。搜索结果会列出该工具可经由的每个代理。在只读模式下只列出 ha_call_read_tool;另外两个仍会响应在缓存工具列表中持有它们的客户端,并且它们携带的任何写入都会得到只读模式错误,而不是“Unknown tool”。

设置默认值描述
ENABLE_TOOL_SEARCHfalse用基于搜索的发现替换完整工具目录(工具延迟到按需搜索之后)。
TOOL_SEARCH_MAX_RESULTS5每次 ha_search_tools 调用返回的隐藏工具上限(范围 2–10);排名进入该数量的固定工具会作为仅名称存根额外添加。
PINNED_TOOLS空逗号分隔的、始终保持可见的工具名称。Web 设置 UI 是管理它的主要方式。

何时启用:

  • Claude Haiku、OpenAI 兼容本地模型、Gemini,或任何没有原生延迟工具支持的模型——大幅节省空闲上下文。对于无论模型如何都会内联所有工具模式的客户端也同样适用(例如 GitHub Copilot CLI,即使运行 Claude Sonnet/Opus)。
  • 限制工具总数的 MCP 客户端(有些上限为 100)——呈现最小集合(约 10 个工具)而不是 87 个。
  • 对成本敏感的部署——每轮空闲 token 更少。

在支持延迟工具加载的客户端中保持关闭(claude.ai、Claude Desktop、Claude Code);完整目录在那里没有空闲成本,直接调用会跳过搜索步骤,而且客户端内置的工具搜索是更好的选择——在它之上再运行 ha-mcp 的搜索没有好处。工具是否延迟取决于客户端和模型的组合:同一模型在不同客户端中可能表现不同——GitHub Copilot CLI 在运行 Claude Sonnet/Opus 时会内联完整目录,仍然受益于这里的工具搜索。某些 Codex 模型和 ChatGPT 也包含延迟工具——直接检查你的客户端/模型以确认其功能,以免不必要地启用它。

🔄 更改此设置(或任何设置)后,请刷新客户端的工具列表。 切换 ENABLE_TOOL_SEARCH(或更改固定/禁用工具、只读模式等)会改变服务器暴露的工具,但你的 AI 客户端会继续提供其缓存的工具列表,直到重新获取。重启应用或 Home Assistant 不会刷新客户端——请在客户端中重新连接或刷新 MCP 服务器(例如在 ChatGPT 中打开 Settings,然后打开插件设置,选择连接器并点击 Refresh tools;断开并重新连接 Claude Desktop 自定义连接器;刷新 claude.ai 连接器的工具列表;或者对于 claude_desktop_config.json 中的服务器,退出并重新打开 Claude Desktop),然后开始新对话。如果跳过这一步,新启用的工具根本不会出现在客户端中,而服务器不再暴露的工具仍会显示为可用,但调用时会失败(Unknown tool,或写入工具被只读模式隐藏时的只读模式错误)。ChatGPT 有时即使在同一名称下移除并重新添加连接器后,仍会继续提供过期列表——如果刷新后工具仍然缺失,请删除连接器并以不同名称创建一个新的。FAQ 中有完整步骤。

对于 HA 应用,同一选项记录在 homeassistant-addon/DOCS.md 中,并附有应用内设置 UI,用于细粒度启用/禁用/固定工具。

按 URL 划分的工具目录#

ENABLE_TOOL_SEARCH 默认关闭,它只设置主端点的目录。当多个客户端共享一个服务器时,为每个客户端提供其所需目录的 URL:内置工具搜索的客户端保留完整列表,小上下文客户端获得搜索工具。后缀是固定覆盖,忽略 ENABLE_TOOL_SEARCH:

  • 主端点(遵循 ENABLE_TOOL_SEARCH):https://example.com/private_your_secret
  • 始终为完整目录:https://example.com/private_your_secret/catalog/full
  • 始终为搜索工具:https://example.com/private_your_secret/catalog/search
  • 只读、搜索工具:https://example.com/private_your_secret/readonly/catalog/search

每个 URL 在连接生命周期内保持其目录,因此客户端只能通过给定的 URL 选择目录。更改 URL 后请重新连接客户端,以便刷新工具列表。Home Assistant webhook URL 接受相同的后缀,可单独使用或放在 /readonly 之后:https://your-ha.example/api/webhook/<webhook-id>/catalog/search。这需要提供这些后缀的嵌入式集成或 Webhook Proxy 应用(add-on)发行版,以及匹配的 MCP 服务器;较旧的版本会对带后缀的 URL 返回 404。Stdio 为每个服务器进程运行一个客户端,因此请在该客户端的服务器环境中设置 ENABLE_TOOL_SEARCH。

只读 HTTP 连接#

在服务器的 HTTP MCP 端点后附加 /readonly,将该连接限制为现有的只读模式,而其他客户端保持正常访问:

  • 正常:https://example.com/private_your_secret
  • 只读:https://example.com/private_your_secret/readonly

OAuth 和 OIDC 连接使用相同的登录/提供方:例如 https://example.com/mcp/readonly。无需额外的秘密或服务器。只读连接会隐藏写入工具并阻止写入调用,包括通过缓存工具或搜索代理进行的调用。启用全局只读模式设置后,仍会限制两个端点。更改 URL 后请重新连接客户端,以便刷新工具列表。

这是一种供自动化智能体使用的连接模式,而不是凭据上的单独权限:相同的凭据在正常端点仍然有效。Home Assistant webhook URL 也接受该后缀:https://your-ha.example/api/webhook/<webhook-id>/readonly。这需要更新的嵌入式集成或 Webhook Proxy 开发应用(add-on),以及更新的 MCP 服务器。

🧪 开发渠道#

想要提前获得新功能和修复?每次推送到 master 都会发布开发版(.devN)。

开发渠道文档——适用于 pip/uvx、Docker 和 Home Assistant 应用的说明。

🤝 贡献#

开发设置、测试说明和贡献指南,请参见 CONTRIBUTING.md。

完整的测试文档,请参见 tests/README.md。

🔒 隐私#

Ha-mcp 在你的机器上本地运行。你的智能家居数据留在你的网络中。

  • 目前无遥测——匿名使用统计是计划中的未来功能(截至 2026 年 6 月);上线时将遵循你的 Home Assistant 分析/遥测设置(你可以覆盖),并至少提前一个月在发行说明和 Web 设置 UI 中显著公告
  • 不收集个人数据——我们从不收集实体名称、配置或设备数据
  • 用户控制的错误报告——仅在您明确批准后发送

完整详情请参见我们的隐私政策。

📄 许可证#

本项目采用 MIT 许可证——详情请参见 LICENSE 文件。

🙏 致谢#

  • Home Assistant:了不起的智能家居平台!
  • FastMCP:优秀的 MCP 服务器框架
  • Model Context Protocol:标准化的 AI 应用通信
  • Claude Code:AI 驱动的编程助手
  • PolicyLayer:参数路径谓词 DSL 形状(args.domain in [...],配合 eq/in/regex/contains/exists/...)启发了按工具批准规则模式(#966)

👥 贡献者#

维护者#

  • @julienld——项目创建者。
  • @sergeykad——核心维护者。
  • @kingpanther13——核心维护者。
  • @Patch76——核心维护者。

贡献者#

  • @bigeric08——为协议版本 2025-11-25 支持添加显式 mcp 依赖。
  • @airlabno——支持 schedule 时间块中的 data 字段。
  • @ryphez——Codex Desktop UI MCP 快速设置指南。
  • @Danm72——实体注册表工具(ha_set_entity、ha_get_entity),用于管理实体属性。
  • @Raygooo——SOCKS 代理支持。
  • @cj-elevate——集成与实体管理工具(启用/禁用/删除);person/zone/tag 配置存储路由。
  • @maxperron——Beta 测试。
  • @kingbear2——Windows UV 设置指南。
  • @konradwalsh——通过 GitHub Sponsors 提供财务支持。谢谢!☕
  • @knowald——在 ha_get_system_overview 中通过设备注册表解析区域,用于通过父设备分配的实体。通过 GitHub Sponsors 提供财务支持。谢谢!☕
  • @zorrobyte——OAuth 模式下的按客户端 WebSocket 凭据,修复 WebSocket 工具故障。
  • @deanbenson——修复大型 Home Assistant 实例(包含大量自动化)上的 ha_deep_search 超时。
  • @saphid——配置条目选项流工具(初始设计,#590)。
  • @adraguidev——修复基于菜单的配置条目流中的分组辅助元素(#647)。
  • @transportrefer——集成选项检查(ha_get_integration 模式支持,#689)。
  • @teh-hippo——修复蓝图导入缺少保存步骤。
  • @smenzer——文档修复。
  • @The-Greg-O——用于配置条目删除的 REST API。
  • @restriction——负责任披露:python_transform 沙箱缺少调用目标验证。
  • @lcrostarosa——诊断与健康监控工具概念(#675),启发了系统/错误日志、修复和 ZHA 无线电指标集成。
  • @roysha1——安装向导中的 Copilot CLI 支持;在文档站点上用真实品牌图标替换了占位 logo SVG。
  • @teancom——修复 add-on 统计端点(/addons/{slug}/stats)。
  • @TomasDJo——自动化、脚本和场景的类别支持。
  • @bzelch——自动化和脚本的 python_transform 支持。
  • @gcormier——Windows 安装器改进:移除未使用变量并修复安装后终端关闭问题。
  • @ekobres——应用配置中 HAMCP_ENABLE_FILESYSTEM_TOOLS 和(后来移除的)HAMCP_ENABLE_CUSTOM_COMPONENT_INTEGRATION 的功能标志,在源码和文档中添加 beta 标记。
  • @w3z315——通过 GitHub Sponsors 提供财务支持。谢谢!☕
  • @griffinmartin——在设置向导中添加 OpenCode(由 Anomaly 开发)作为可选 AI 客户端,支持 stdio 和可流式 HTTP。
  • @hhopke——修复应用(add-on)API 调用,使其通过 HA Core ingress 代理路由,而不是直接连接容器,修复应用安装上的 ha_manage_addon(现为 ha_manage_app)代理模式。
  • @tomwilkie——JMESPath 中间件探索(#1147),其评审期间的 token 测量数据影响了 #1199 和 #1225 的设计。
  • @SealKan——六个读取密集型工具上的 fields=/attribute_keys= 投影(#1225)、ha_call_event 工具(#1239)、仪表盘列表辅助元素重构(#1207)、最佳实践检查器中的 for: 字段时长数学检测器(#1264)、跨重启的持久 DCR OAuth 客户端注册(#1265),以及 issue 分类提示词的 token 预算(#1522)。
  • @KarelTestSpecial——缓存 YAML 实例,防止批量编辑期间 CPU 峰值(#1371)。
  • @corgan2222——自定义集成的 HA 品牌资产(#1317)。
  • @drseanwing——在长时间运行工具中通过 FastMCP Context 发出进度(#1124);工具发现/分类搜索文档(#1123)。
  • @fnordpig——配置子条目支持(#1393)和 Assist 管道管理工具(#1392)。
  • @paul43210——ha_manage_app 中的 array_patch 模式,用于原子 GET-modify-POST(#1063)。
  • @L1AD——提交 #966 提出工具安全策略;指出 PolicyLayer 的 MCP 安全工作作为启发了谓词 DSL 形状的先前技术。
  • @nightcityblade——在 HA 2026.6 使原高级选项默认可用后,更新了过时的 Home Assistant 高级模式引用(#1533)。
  • @emmelutzer——通过 GitHub Sponsors 提供财务支持。谢谢!☕
  • @pkkr——ha_knx_get_project 工具,从上传的 ETS 项目文件公开 KNX 组地址。
  • @cbowns——修复 setup.astro Codex CLI 文档中不一致的连字符。
  • @Shaan-alpha——扩展 ha_restart 已知良好错误模式,以覆盖反向代理的 502/503 响应。
  • @rebelancap——修复 add_timezone_metadata 中的 UTC 到本地时区转换。
  • @saevras——修复蓝图导入 E2E 测试,使用本地 URL 而不是主机到容器网络。
  • @jasonjhofmann——在 ha_config_set_calendar_event 中通过 rrule 支持重复日历事件。
  • @vpciii——在 dict/list 工具参数上强制转换 JSON 编码字符串。
  • @pburtchaell——通过 GitHub Sponsors 提供财务支持。谢谢!☕
  • @norpol——构建 OpenAI Tunnel for HA-MCP 配套集成,将 ChatGPT 连接到防火墙后的 Home Assistant MCP 服务器(#1811)。

💬 社区#

  • GitHub Discussions——提问、分享想法
  • Issue Tracker——报告 bug、请求功能或建议改进工具行为。Bug 报告需要 ha_report_issue 工具生成的报告,或说明为何没有;两者都没有的报告会在 24 小时后关闭。