mijia-home-mcp

mijia-home-mcp

An MCP server that provides read-only snapshots and change detection for Xiaomi smart home devices, enabling AI clients to get structured home status with a single call.

Category
访问服务器

README

mijia-home-mcp

米家全屋状态快照 MCP server —— 默认只读,一次调用看清全家。

让 Claude / Cursor 等 MCP 客户端安全地"看家":一个 get_home_snapshot 工具并发拉取全屋设备状态,返回 家 → 房间 → 设备 → 语义化状态 的结构化结果;get_home_changes 回答"上次以来家里变了什么"。控制能力(开关/属性/场景)默认关闭,需要显式开启并受白名单与危险设备策略约束。

基于 Do1e/mijia-api(GPL-3.0),与其共用登录凭证(扫码一次约保活一个月)。

为什么不是又一个米家 MCP

常见米家 MCP mijia-home-mcp
问"家里什么情况" N+1 轮逐设备查询 get_home_snapshot 一次调用,批量接口并发拉取
变化感知 无 get_home_changes 返回自上次快照的 diff
安全模型 开箱即可控制所有家电 默认只读;控制需 --enable-control + 白名单;锁/摄像头/燃气与水阀默认拦截;写操作全部落审计日志
输出 原始 siid/piid 透传 语义化(枚举→中文描述、bool→开启/关闭),离线/低电量/故障设备置顶提醒
部署 clone + venv,Unix-first uvx 直接从 GitHub 一行运行,Windows/macOS/Linux 一等支持

快速开始

无需 clone,uvx 直接从 GitHub 运行。

  1. 扫码登录(终端会打印二维码,用米家 App 扫描,凭证约一个月有效):
uvx --from git+https://github.com/jiayunlimailutorontoca/mijia-home-mcp mijia-home-mcp login
  1. 添加到 Claude Code(只读模式):
claude mcp add mijia-home -- uvx --from git+https://github.com/jiayunlimailutorontoca/mijia-home-mcp mijia-home-mcp serve

或者写入项目 .mcp.json / Claude Desktop 配置:

{
  "mcpServers": {
    "mijia-home": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/jiayunlimailutorontoca/mijia-home-mcp",
        "mijia-home-mcp",
        "serve"
      ]
    }
  }
}
  1. 问一句"家里现在什么情况",模型会调用 get_home_snapshot。

下文示例统一用简写 mijia-home-mcp serve ...,实际命令替换为上面的 uvx --from git+... mijia-home-mcp serve ...;本地 clone 后 uv run mijia-home-mcp ... 也等价。

开启控制(可选)

# 允许控制普通设备(锁/摄像头/燃气与水阀/保险柜仍被拦截)
claude mcp add mijia-home -- uvx --from git+https://github.com/jiayunlimailutorontoca/mijia-home-mcp mijia-home-mcp serve --enable-control

# 只允许控制名单内设备(glob 匹配设备名/did/model,可多次传入)
mijia-home-mcp serve --enable-control --allow "客厅*" --allow "*台灯*"

# 黑名单优先于白名单
mijia-home-mcp serve --enable-control --deny "*camera*"

# 明确允许危险设备(不推荐)
mijia-home-mcp serve --enable-control --allow-dangerous

安全策略细则:

  • 危险设备只接受精确放行:--allow "*" 这类通配白名单会放行普通设备,但锁/摄像头/燃气与水阀/保险柜必须把完整设备名或 did 精确写进 --allow(或使用 --allow-dangerous)才可控制。
  • run_speaker_command 按危险通道对待:小爱语音指令可以触达全屋任意设备(包括门锁),会绕过设备白名单,因此默认拦截——需要把音箱名精确加入 --allow 或使用 --allow-dangerous。
  • run_scene 不受设备白名单约束:场景内容是你在米家 App 预定义的动作组合,开启控制后即可执行;不想让 AI 碰的动作不要做成手动场景。
  • 所有写操作(含被拒绝的尝试)都会追加到 ~/.config/mijia-home-mcp/audit.log。

局域网部署(可选)

mijia-home-mcp serve --transport http --host 0.0.0.0 --port 8423
claude mcp add --transport http mijia-home http://<host>:8423/mcp

⚠️ http 传输当前没有内置鉴权:监听 0.0.0.0 意味着同网段任何人都能读取(开启控制时还能操作)你的米家设备。只在可信局域网内使用并配合防火墙,切勿暴露公网。

工具一览

读(始终可用):

工具 用途
get_home_snapshot 全屋状态快照(compact/full 两档),附离线/低电量/故障提醒
get_home_changes 与上次快照对比,返回变化列表
list_homes / list_devices 家庭/房间/设备清单,支持过滤
get_device_status 单设备详细状态(批量拉取)
get_device_spec 设备支持的属性/动作(名称、类型、范围、枚举值)
list_scenes / list_consumables 手动场景 / 耗材状态
auth_status / login / login_status 认证状态与会话内扫码续期

控制(需 --enable-control):

工具 用途
set_device_property 设置属性(开关/亮度/模式…)
run_device_action 执行动作(喂食/启动清扫…)
run_scene 运行米家手动场景
run_speaker_command 让小爱音箱执行自然语言指令(默认静默)

配置

CLI 参数优先,也支持环境变量(适合写进 .mcp.json 的 env):

环境变量 对应参数
MIJIA_HOME_MCP_AUTH --auth 认证文件路径(默认 ~/.config/mijia-api/auth.json,与 mijiaAPI 共用)
MIJIA_HOME_MCP_ENABLE_CONTROL --enable-control(1/true 开启)
MIJIA_HOME_MCP_ALLOW --allow(逗号分隔)
MIJIA_HOME_MCP_DENY --deny(逗号分隔)
MIJIA_HOME_MCP_ALLOW_DANGEROUS --allow-dangerous
MIJIA_HOME_MCP_STATE_DIR 状态目录(快照基线/审计日志,默认 ~/.config/mijia-home-mcp)

已知边界

  • 走小米云端接口(上游 mijia-api 逆向实现),状态读取有秒级延迟,无本地直连与事件推送;请控制轮询频率。
  • 凭证约一个月需重新扫码一次(mijia-home-mcp login,或对话里直接调 login 工具)。
  • 工具的 readOnlyHint 等注解只是提示;真正的安全边界在服务端(只读默认 + 白名单 + 危险设备拦截)。
  • 个别设备的规格页缺少中文 i18n 数据(常见于红外遥控类设备,如空调伴侣里的"空调"),上游 spec 解析会失败;这类设备会出现在快照的 attention.spec_errors 里,状态为空但不影响其他设备。
  • get_home_changes 的对比基线按 home 参数分开存储;跨口径调用(这次传 home、下次不传)各自维护基线。

开发

uv venv && uv pip install -e ".[dev]"
uv run pytest

测试完全离线(FakeAPI + 磁盘 spec 缓存),不需要米家账号。

许可证

GPL-3.0-or-later。依赖 mijia-api(GPL-3.0,其 README 声明仅供学习交流、禁止商用),本项目同样仅供学习交流使用。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选