mcpField
L
Larnitech

Larnitech

本地服务
github.com其他15 周前更新

关于 Larnitech

Larnitech MCP 通过 API2 将 AI Agent 连接到 Larnitech 智能家居控制器,以读取、监控设备并受控地修改设置。设备文档和两步写入确认针对控制器特性与安全需求。

主要功能

  1. 01读取并筛选设备状态
  2. 02监控设备变化
  3. 03查询设备类型和协议文档
  4. 04分两步预览并确认写入
  5. 05保存并比较快照
  6. 06记录偏好和设备备注

适用场景

  1. 01检查灯光、气候、百叶窗和传感器
  2. 02在对话期间跟踪设备变化
  3. 03保存控制器状态以供后续比较
  4. 04安全地修改设备设置

MCP 相关

MCP 服务向 MCP 客户端提供控制器状态、文档、监控、快照和设备写入工具。写入需先在终端启用,并分别调用预览和确认。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"mpopovych-thinkhome-larnitech": {
"command": "uvx",
"args": [
"larnitech-mcp"
]
}
}
}
启动命令uvx larnitech-mcp

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

安装包
pypilarnitech-mcp1.3.3b0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Larnitech MCP

版本 1.3.3 Beta · 更新日志 · MIT 许可

一个 MCP 服务,可让 AI Agent 通过 API2 协议读取和控制 Larnitech 智能家居系统, 包括灯光、温控、百叶窗、传感器和计量仪表。

它附带一份有文档说明的设备类型参考,内容基于对真实控制器的实际测试, 因此 Agent 会查询组件的实际行为,而不是根据键名猜测。这一点比听起来 更重要:在这个平台上,向闸门写入 state: "closed" 会得到 success: true 的确认,却被悄悄忽略;而且有几种温控类型会丢弃任何双键写入中的一半内容。这些陷阱都有文档说明,每次写入前都会进行检查,并列在本 README 的安全须知部分中。


功能介绍

读取 — 开箱即用,除 API 密钥外无需配置。

工具功能
list_objects列出已配置的控制器(不会返回密钥)
check_connection连接并授权,报告设备数量
list_devices获取完整快照,可按区域/类型/名称筛选
get_device按地址获取单个设备的状态

连续调用会共用一个已授权的连接:请求完成后,套接字会保持打开 4 分钟,因此一连串读取只需连接一次,而不是每次调用都重新连接。连接会在控制器自身的 5 分钟空闲超时之前关闭;如果控制器已断开连接,系统会自动替换连接,不会导致调用失败。

理解返回结果 — 状态因设备类型而异,偶尔也不是键值对。

工具功能
get_docs()所有已记录设备类型的概览
get_docs("AC")单个类型的完整详情:状态键、枚举值、XML 属性、脚本字节布局和特殊情况
get_docs("bugs")已确认供应商缺陷的编号登记表
get_docs("protocol")API2 协议参考

响应会标记需要谨慎处理的状态:不透明的 hex 数据块、代替常规读数的 malfunction 故障代码、错过轮询周期的仪表返回的全为 null 的负载(这表示没有数据,而不是零),或者单独出现的 state: "undefined",这是物理离线设备仍会作出的响应。

监视 — 非阻塞,适用于“按下开关并告诉我发生了什么变化”。

工具功能
watch_start开始监视;立即返回
watch_read读取自上次读取以来的变化,按键显示 from/to
watch_stop / watch_list停止单项监视/列出活动监视

监视会保持自己的连接,因此不会受控制器 5 分钟空闲超时的影响,也可以在长时间对话期间保持开启。

写入 — 默认关闭,分两阶段进行,绝不会只调用一个工具。

工具功能
set_device验证并预览更改,返回令牌 — 不会写入
confirm_set执行更改,然后等待设备状态稳定并报告实际生效的内容

学习 — 发现的信息会保留到会话结束之后。

工具写入位置
add_docs_note相应设备类型自己的文档文件
add_preferencepreferences.md,每次调用 get_docs 时都会提供

保存数据 — 快照比滚动记录更有价值。

工具功能
save_snapshot将一部分控制器数据保存为文件
list_snapshots按控制器列出已保存的快照
read_snapshot读取单个快照,以便与当前状态比较

文件保存在 data/<controller>/<date>_<time>_<comment>.txt 中,每个控制器各有一个文件夹;如果该安装已有一个存放图纸、配置和控制器备份的项目目录,也可以保存到你自己的文件夹中:

python -m larnitech_mcp data-dir "Home" "/projects/home/backups"

这样,快照就会与站点的其他文件放在一起,而不是存入单独的存储位置。list_snapshots 会查找这两种位置。

每个快照都是一个 JSON 信封,包含 object、saved_at、comment,以及位于 data 下的负载,因此文件会保留来源信息,而 read_snapshot 会返回解析后的结构,无需重新解析文本。数字仍是数字,null 仍是 null,这一点在这里很重要:区分“没有数据”和零,意味着能分辨仪表没有读数,还是读数为零。

说“保存当前状态”,Agent 就会将其保存到相应位置;说“和上周相比有变化吗”,它就有内容可以进行比较。

报告问题 — report_bug 会将你遇到的问题整理成可直接提交到此仓库的问题报告。它会撰写报告、移除标识信息(API 密钥、序列号、主机名、站点名称),并返回一个预填好的链接。系统不会发布任何内容:你可以打开链接,准确查看将要发布的内容,并使用自己的账户自行提交。任何人都不需要令牌。


要求

  • Python 3.11+
  • 你管理的 Larnitech 控制器,可通过 Larnitech 云或局域网访问

安装

pip install larnitech-mcp

建议使用虚拟环境,因为你需要将 Claude Code 指向该解释器的绝对路径:

python -m venv ~/.venvs/larnitech
~/.venvs/larnitech/bin/pip install larnitech-mcp     # Windows: Scripts\pip.exe

你的 API 密钥、偏好设置、已保存的快照,以及 Agent 记录的任何设备备注,都存放在软件包之外的 ~/.larnitech-mcp/ 中,因此升级不会影响这些内容。

若要在服务器本身上进行开发,请改为从克隆的仓库安装:

git clone https://github.com/mpopovych-thinkhome/larnitech-mcp.git
cd larnitech-mcp
pip install -e .

获取 API 密钥

这两个值都可以在你管理的安装环境中通过 Larnitech 自带的配置应用 LT_Setup 获取:

内容在 LT_Setup 中的位置
API 密钥Security → Show API key
序列号(云连接)General
IP 地址(局域网连接)General,或路由器的 DHCP 列表
WebSocket 端口(局域网,默认为 2041)General → API → Websocket port

该密钥具有对安装环境的完整读写权限,请像对待密码一样妥善保管。

连接控制器

注册控制器,然后保存密钥:

python -m larnitech_mcp add "Home" cloud --serial YOUR_SERIAL
python -m larnitech_mcp auth "Home"

auth 会通过隐藏输入提示你输入密钥,并将密钥写入 ~/.larnitech-mcp/project_keys.json。这样密钥不会经过聊天记录,因此建议优先使用此方式,而不是使用 object_set_key 工具;后者虽然可用,但会将密钥留在会话日志中。

若要连接局域网内的控制器,而非通过云连接:

python -m larnitech_mcp add "Home" local --host 192.168.1.50

检查连接是否正常:

python -m larnitech_mcp test "Home"      # connect, authorize, count devices
python -m larnitech_mcp devices "Home"   # full snapshot, counts per type

添加到 Claude Code

将服务添加到 ~/.claude.json 顶层的 mcpServers 对象中,并使用虚拟环境中 Python 的绝对路径:

{
  "mcpServers": {
    "larnitech": {
      "command": "/home/you/.venvs/larnitech/bin/python",
      "args": ["-m", "larnitech_mcp", "serve"]
    }
  }
}

在 Windows 上,命令为 .exe,反斜杠需转义:

"command": "C:\\Users\\you\\.venvs\\larnitech\\Scripts\\python.exe"

必须将配置放在 ~/.claude.json 本身顶层的 mcpServers 键下;放在 ~/.claude/ 文件夹中的 .mcp.json 不会被读取。若要仅对某个项目启用,请将相同的配置块放在该项目根目录下的 .mcp.json 中。之后请完全重启 Claude Code;仅关闭窗口并不足够。

其他 MCP 客户端的配置方式也相同:该服务通过 python -m larnitech_mcp serve 使用标准输入输出运行。


安全模型

读取权限默认开放。写入权限默认关闭;需在终端中逐个控制器启用:

python -m larnitech_mcp allow-write "Home" on

我们刻意不提供用于启用写入权限的工具——Agent 无法自行授予写入权限,只能告诉你该运行哪条命令。

每次写入都分为两次调用。 set_device 会验证负载、读取当前状态,并返回预览和一个一次性令牌;它不会接触控制器。confirm_set(token) 会执行写入,等待设备状态稳定后,再报告实际生效的内容,包括 unrequested_changes——也就是控制器自行更改的任何内容。

**写入可以分步执行,**因为某些类型无法通过单个帧驱动:

[{"status": {"mode": "heat"}, "delay_after": 1.0},
 {"status": {"state": "on"}}]

同时发送 mode 和 state 会导致 state 丢失:模式更改后,控制器会重新评估通道,并覆盖随之发送的任何内容。vent(state + fan)也有同样的问题;切换通道之前清除 automation 也是如此。set_device 会拒绝这些组合形式,并告知你应使用的操作顺序。

**工具绝不会返回密钥,**错误消息也会对密钥进行遮蔽。

设备文档

larnitech_mcp/docs/device-types/ 中每种设备类型各有一个文件,另有一个索引,涵盖 API2 状态键、XML 属性、脚本端字节布局,以及通过现场测试确认的所有特性。旁边的 bugs.md 是已确认厂商错误的编号登记表,各类型文件会引用其中的条目。请通过 get_docs 阅读这些文档,而不是按路径读取——这样也能获取你在本地添加的内容。

Agent 通过 add_docs_note 记录的备注会写入 ~/.larnitech-mcp/docs/,而非已安装的软件包,因此升级后仍会保留。读取时优先使用你的副本;你未编辑的内容仍来自随软件包提供的文档。

这是一个持续完善的知识库,而非规范:条目会明确标注某项内容是已通过现场测试确认、已观察到但原因不明,还是仍然未知。欢迎纠正和补充——这是最有价值的贡献。

命令参考

命令作用
add <name> cloud --serial S注册云控制器
add <name> local --host H [--port P]注册局域网控制器
auth <name>保存其 API 密钥(隐藏式提示)
list列出已配置的控制器及密钥状态
test <name>连接、授权并统计设备数量
devices <name> [--full]获取完整快照并解码
allow-write <name> on|off启用或禁用写入
remove <name>移除控制器及其密钥
serve通过标准输入输出运行 MCP 服务

状态

Beta 版。读取、监视和写入功能均可用,并已在真实硬件上进行测试,但测试覆盖的安装环境有限。标注为未确认的设备类型确实尚未确认——请参阅 get_docs 的输出和各类型文件。

与 Larnitech 无关联,也未获其认可。

许可证

MIT

联系方式

Mykhailo Popovych

评论

支持 Markdown

第一次接触 MCP?

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

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