mcpField
S
smarthome-port

smarthome-port

本地服务
github.com/CloudCorpRecords其他02 周前更新

关于 smarthome-port

smarthome-port 通过 REST API 提供访问 Home Assistant 的 CLI 和 MCP 服务,可处理实体状态与服务,以及历史记录、配置、模板和事件。

主要功能

  1. 01列出实体并读取实体状态
  2. 02调用和列出域服务
  3. 03获取实体历史和核心配置
  4. 04渲染 Jinja 模板
  5. 05向事件总线发送事件
  6. 06提供 CLI 和 stdio MCP 服务

适用场景

  1. 01检查 Home Assistant 实体状态
  2. 02执行开灯等服务调用
  3. 03查看实体近期历史记录
  4. 04渲染模板或发送事件

MCP 相关

通过 stdio MCP 服务将 Home Assistant REST API 操作作为工具提供。需要配置实例 URL 和长期访问令牌。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-smarthome-port": {
"command": "npx",
"args": [
"-y",
"@reneturcios/smarthome-port"
]
}
}
}
启动命令npx -y @reneturcios/smarthome-port

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/smarthome-port0.1.0
ocighcr.io/cloudcorprecords/smarthome-port:0.1.0

工具

8

收录的工具列表 · 更新于 1 周前

参数类型必填说明
domainstring否可选域(entity_id 中点号前的部分,例如 'light'),用于筛选要列出的实体。

详细介绍

smarthome-port

smarthome-port 通过 Home Assistant 实例的 REST API 与其通信。在 Home Assistant 中,一切都是实体—— light.kitchen、sensor.temp、switch.porch——其 API 也反映了这一结构:读取实体状态、调用某个 domain 上的服务(light.turn_on、switch.toggle)、查看近期历史记录、读取核心配置、在服务器上渲染 Jinja 模板,以及向事件总线触发事件。smarthome-port 通过一个二进制程序提供这六种操作,以及实体和服务列表查询;该程序既提供命令行界面, 也提供 stdio MCP 服务。

必须设置两个配置项,且两者都没有内置默认值:

  • HOME_ASSISTANT_URL——实例的基础 URL,例如 http://homeassistant.local:8123。末尾的斜杠会被去掉。
  • HOME_ASSISTANT_TOKEN——长期访问令牌(在 Home Assistant 的个人资料中创建)。该令牌会通过 Authorization: Bearer 标头发送,且绝不会出现在输出中。

缺少任一变量时,每次调用都会报错并指出缺少的变量,且不会发出任何请求。

仅支持 REST API。 尚未实现 WebSocket API。

安装

npx @reneturcios/smarthome-port entities

或者运行容器镜像:

docker run -i -e HOME_ASSISTANT_URL -e HOME_ASSISTANT_TOKEN ghcr.io/cloudcorprecords/smarthome-port

容器默认启动 MCP 服务(见下文)。传入 CLI 参数即可将其用作 CLI。

CLI

export HOME_ASSISTANT_URL=http://homeassistant.local:8123
export HOME_ASSISTANT_TOKEN=<your long-lived access token>

smarthome-port entities
smarthome-port entities --domain light
smarthome-port state sensor.temp
smarthome-port call light turn_on --entity light.kitchen --data '{"brightness_pct":50}'
smarthome-port services
smarthome-port services --domain light
smarthome-port history sensor.temp --hours 6
smarthome-port config
smarthome-port render "{{ states('sensor.temp') }}"
smarthome-port fire my_event --data '{"device":"kitchen"}'

smarthome-port --version

每条命令都会输出上游 JSON 负载(模板渲染会输出 {"rendered": "..."})。退出码:成功时为 0,调用失败时为 1(包括缺少配置或 API 错误),用法错误时为 2。

MCP 服务

一个二进制程序同时提供两种使用方式。mcp 子命令会启动 stdio MCP 服务:

npx -y @reneturcios/smarthome-port mcp

MCP 客户端配置:

{
  "mcpServers": {
    "smarthome-port": {
      "command": "npx",
      "args": ["-y", "@reneturcios/smarthome-port", "mcp"],
      "env": {
        "HOME_ASSISTANT_URL": "http://homeassistant.local:8123",
        "HOME_ASSISTANT_TOKEN": "..."
      }
    }
  }
}
工具
工具输入返回内容
list_entitiesdomain(可选)实体状态;如果提供 domain,则在客户端筛选出该 domain 的实体。
get_entity_stateentity_id(必需)单个实体的完整状态。
call_servicedomain、service(必需),entity_id、service_data(可选)服务调用结果;service_data 会与 entity_id 合并。
list_servicesdomain(可选)按 domain 列出服务;如果提供 domain,则只返回该 domain 的条目。
get_historyentity_id(必需),hours(可选,默认值为 24)该实体截至当前时间、指定时间范围内的近期历史记录。
get_config(无)核心配置。
render_templatetemplate(必需){"rendered": "..."}——上游回复为纯文本。
fire_eventevent_type(必需),event_data(可选)上游回复;event_data 默认为 {}。

所有调用都会发送到 {HOME_ASSISTANT_URL}/api。entity_id 必须包含一个点号(domain.object_id),而 domain、service 和 event_type 必须非空——两类条件都会在发出任何请求前检查。历史记录的时间戳由客户端根据当前时间计算。HTTP 错误会显示状态码,以及 Home Assistant 提供的上游 message。

开发

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, no network (fake fetch fixtures)
npm run dev     # run the CLI from source via tsx

许可证

MIT——参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。