Bosch Smart Home Camera MCP Server
Bosch Smart Home Camera — MCP 服务器
模型上下文协议(MCP)服务器,将 Bosch Smart Home Camera 云 API 以 MCP 工具的形式暴露出来。可直接用于 Claude Code、Claude Desktop 以及任何兼容 MCP 的客户端。复用了姊妹项目 Python CLI 工具 中经过验证的逆向工程 API 客户端。
状态: v1.7.2 — 家族功能对齐收官(v1.7.0):移动侦测区域、隐私遮罩、自动化规则、摄像头共享/好友、固件安装、警笛时长、照明计划、语音对讲。另加 2026-08-19 图像/视频调优 + 摄像头生命周期一轮:时间戳叠加、状态 LED、镜头俯仰角、黑暗阈值、白平衡、顶部/底部 LED 亮度、软/硬重置、重命名。70 个工具 + 3 个资源 + 2 个提示词,支持 stdio/SSE/streamable-HTTP,可通过 pipx/uvx 安装
目录
集成对比 — 为你的平台选择正确的项目
Related MCP server: 米家 MCP Server
免责声明
本项目是一个独立的、由社区开发的工具。它与 Robert Bosch GmbH、Bosch Smart Home GmbH 或其任何子公司或关联公司没有任何关联、未获其认可、赞助,也并非以任何方式与其有官方联系。"Bosch"、"Bosch Smart Home" 及相关名称和徽标均为 Robert Bosch GmbH 的注册商标。
该工具与一个经过逆向工程、无文档、非官方的 API 进行通信。按"原样"提供,不附带任何形式的保证。使用风险完全自负。
为什么单独做一个 MCP 服务器?
姊妹项目面向不同的运行时:
项目 | 版本 | 运行时 | 面向用户的界面 |
v16.0.1 | Home Assistant | UI 实体、Lovelace 卡片、自动化 | |
v10.12.3 | 终端 |
| |
v1.8.3 | ioBroker | 数据点、VIS-2 小部件(BoschCamera + BoschOverview)、JSON 配置管理 UI | |
v0.4.2-alpha | Node-RED | 用于自动化管道的流节点 | |
v0.4.2-alpha | 独立 Web 应用 | 仪表盘 + 摄像头详情 + 设置 UI | |
MCP 服务器(本仓库) | v1.7.1 | Claude 客户端 | 可供 LLM 调用的 MCP 工具 |
现有姊妹项目未覆盖的 LLM 用例:
"给花园摄像头拍一张快照,然后描述你看到了什么。"
"露台上最近一次移动事件是什么时候,具体时间?"
"启用室内摄像头的隐私模式直到 22:00,然后禁用它。"
"将 360° 摄像头向左平移并抓拍一张快照。"
"汇总今天所有摄像头的移动事件。"
这些流程需要 LLM 参与其中——这正是 MCP 的用武之地。
架构
┌─────────────────────────┐ stdio / SSE / streamable HTTP ┌─────────────────────────┐
│ Claude Code / Desktop │ ←─────────────────────────────────────→ │ bosch-smart-home- │
│ (MCP host) │ MCP protocol │ camera-mcp server │
└─────────────────────────┘ └────────────┬────────────┘
│
imports / shared API client
│
▼
┌─────────────────────────┐
│ bosch_camera.py │
│ (sister Python CLI tool)│
└────────────┬────────────┘
│ HTTPS (OAuth2 PKCE)
▼
┌─────────────────────────┐
│ residential.cbs.bosch- │
│ security.com (cloud) │
└─────────────────────────┘MCP 服务器是 Python CLI API 层的一个薄封装。它不会重新实现 OAuth、令牌刷新、FCM 推送、RTSP 或 RCP——它直接导入这些功能。
这是一个真实的运行时依赖,而不仅仅是文档引用。 服务器在进程启动时通过 sys.path 注入(adapters/cli_bridge.py)来定位 bosch_camera.py,而不是通过常规的 pip install 依赖——姊妹项目 Python CLI 工具 仓库必须检出到磁盘上,并且 MCP 服务器需要知道其位置。解析顺序:如果设置了 BOSCH_CAMERA_CLI_PATH 环境变量则使用该变量,否则使用维护者自身环境所用的固定默认路径(不可移植——请覆盖它)。几乎每次工具调用最终都会在调用时从该路径导入 bosch_camera(ensure_cli_importable()),因此路径缺失或错误会在首次工具调用时以 ImportError 的形式出现,而不是在服务器启动时。实际操作:克隆两个仓库,然后在 MCP 服务器运行的环境中设置 BOSCH_CAMERA_CLI_PATH=/path/to/Bosch-Smart-Home-Camera-Tool-Python,或者编辑 adapters/cli_bridge.py 中的 DEFAULT_CLI_PATH 以进行永久性的本地安装。CLI 工具通过 bosch_camera login 生成的同一个 bosch_config.json 就是本服务器读取凭据所用的文件——参见 认证模型。
LAN 回退工具路由
flowchart LR
Agent["LLM / Claude Code"] -->|tool call| MCP[MCP Server]
MCP -->|prefer_local=False| Cloud[Bosch CBS API]
MCP -->|prefer_local=True| RCP["Camera LAN RCP\n192.168.x.y:443\nHTTPS Digest"]
RCP -->|success| Done["return {status, method: local}"]
RCP -->|fail| Cloud
Cloud --> Done2["return {status, method: cloud}"]
style RCP fill:#d4f1c4,color:#000
style Cloud fill:#dce8fb,color:#000bosch_camera_lan_ping 工具流程
sequenceDiagram
participant Agent as LLM Agent
participant Tool as bosch_camera_lan_ping
participant TCP as TCP connect :443
Agent->>Tool: {camera_name: "Outdoor"}
Tool->>Tool: resolve LAN IP from bosch_config.json
Tool->>TCP: connect 192.168.x.y:443 (1.5 s timeout)
TCP-->>Tool: connected / timeout
Tool-->>Agent: {reachable: true, ip: "...", latency_ms: 12}MCP 工具(共 70 个,v1.7.2)
工具 | 描述 | 返回 |
| 列出所有已配置的摄像头 | 由 |
| 获取单个摄像头的在线/离线及隐私状态 |
|
| 仅局域网 JPEG 抓拍(无云端)— 通过 HTTP Digest 访问摄像头 IP |
|
| 仅局域网 RTSPS 流地址(无云端中继)— 可供 ffmpeg/VLC/go2rtc 使用 |
|
| 列出最近的移动/人物/音频事件 | 由 |
| 开启/关闭隐私模式; |
|
| 开启/关闭聚光灯; |
|
| 旋转 360° 摄像头(仅 Gen1 CAMERA_360); |
|
| 切换推送通知 |
|
| 在局域网 443 端口对摄像头进行 TCP 探测(1.5 秒超时) |
|
| 从社区 RSS 源获取当前云端维护公告 |
|
| 获取麦克风音量、扬声器音量、对讲标志(仅 Gen2) |
|
| 设置麦克风音量和/或扬声器音量 0-100(仅 Gen2) |
|
| 获取入侵检测配置:模式、灵敏度 0-7、距离 1-8 米(仅 Gen2) |
|
| 更新入侵检测模式/灵敏度/距离(仅 Gen2) |
|
| 获取玻璃破碎 + 烟雾/火警声音检测配置(仅 Gen2 Audio-Plus) |
|
| 更新玻璃破碎和/或火警声音检测(仅 Gen2 Audio-Plus) |
|
| 获取 WiFi RSSI、SSID 及派生的信号质量 0-100% |
|
| 通过 RTSP inst=3 直接进行局域网 MJPEG 抓拍(仅 Gen2,ffmpeg,无云端往返) |
|
| 从摄像头局域网 RCP 0x0a98 读取 ONVIF 设备作用域(仅 Gen2) |
|
| 从摄像头局域网操作码 0xff00 + 0xff04 读取 RCP 库版本 |
|
| 获取账户级别的 Bosch 云端功能开关(无需摄像头参数) |
|
| 触发室内警报器(仅 Gen2 Indoor II); |
|
| 获取移动检测启用状态 + 灵敏度 |
|
| 设置移动检测启用状态和/或灵敏度 |
|
| 获取云端录像声音设置 |
|
| 设置云端录像声音 |
|
| 获取 360° 自动跟踪状态(仅 Gen1 Indoor) |
|
| 设置 360° 自动跟踪(仅 Gen1 Indoor) |
|
| 获取隐私提示音状态 |
|
| 设置隐私提示音状态 |
|
| 获取摄像头的未读事件数 |
|
| 所有摄像头的批量健康摘要(状态 + WiFi + 隐私 + 最近事件 + 未读) | 由每个摄像头的健康字典组成的数组 |
| 本地 JWT 解析 — 返回有效性、过期时间、邮箱(无网络调用) |
|
| 列出移动检测区域矩形(归一化 0.0-1.0) | 由 |
| 替换所有移动区域(全量替换,非合并) | 由 |
| 移除所有移动区域 |
|
| 列出隐私遮罩区域矩形(归一化 0.0-1.0) | 由 |
| 替换所有隐私遮罩(全量替换,非合并) | 由 |
| 移除所有隐私遮罩 |
|
| 列出单个摄像头的自动化(时间计划)规则 | 由 |
| 创建新的计划规则 |
|
| 更新现有规则(部分更新) |
|
| 删除规则 |
|
| 列出摄像头共享好友/邀请(账户级别) | 由 |
| 通过邮箱邀请好友(账户级别) |
|
| 与现有好友共享一个摄像头(与其现有共享合并) |
|
| 撤销好友的所有摄像头共享 |
|
| 完全移除好友 |
|
| 获取当前/最新固件版本 + 更新可用性 |
|
| 安装待处理的固件更新(摄像头重启 3-7 分钟) |
|
| 设置警报器报警时长,10-300 秒(仅 Gen2 Indoor II) |
|
| 获取 LED 照明计划(室外 Eyes 摄像头) |
|
| 更新 LED 照明计划(室外 Eyes 摄像头) |
|
| 打开音频监听会话(摄像头麦克风 → 呼叫方);返回 RTSPS 地址,仅监听 |
|
| 获取视频中是否烧录了日期/时间叠加层 |
|
| 开启/关闭视频日期/时间叠加层 |
|
| 获取摄像头状态 LED 的开关状态(仅 Gen2) |
|
| 开启/关闭摄像头状态 LED(仅 Gen2) |
|
| 获取镜头安装高度(米)(仅 Gen2) |
|
| 设置镜头安装高度,0.5-5.0 米(仅 Gen2) |
|
| 获取昼夜照明阈值 + 渐暗模式(仅 Gen2) |
|
| 设置昼夜照明阈值和/或渐暗模式(仅 Gen2) |
|
| 获取前置灯的白平衡,-1.0 冷 .. 1.0 暖(仅 Gen2) |
|
| 设置前置灯的白平衡(仅 Gen2) |
|
| 获取顶部或底部 LED 亮度 0-100%(仅 Gen2) |
|
| 设置顶部或底部 LED 亮度 0-100%(仅 Gen2) |
|
| 重启单个摄像头(软重置) |
|
| 将单个摄像头恢复出厂设置 — 破坏性操作,会解除摄像头配对;需要 |
|
| 通过云端 API 重命名摄像头 |
|
有意不向 LLM 暴露的工具(有写入风险 / 耗时):
令牌刷新(由底层客户端静默处理)
云端片段下载(数据量较大)
双向对讲(呼叫方麦克风 → 摄像头扬声器):Bosch 云 API 完全不支持(姊妹 CLI 也有同样的限制)——
bosch_camera_intercom_open仅支持监听
从 HA 集成移植但有意未添加(架构不匹配——完整理由见 docs/family-parity-plan.md 2026-08-19 审计):
open_live_connection(显式会话打开/保持)——MCP 工具是一次性请求/响应调用,没有持久的后台进程在调用之间保持会话;bosch_camera_stream_url每次调用都会生成一个新的、立即可用的 URL,这是 MCP 形态的等价物。Frigate/外部 RTSP "前门"(持久的免凭据 RTSP 服务器)——原因相同:需要长时间运行的服务器进程,而这个无状态工具面没有。
delete_event/send_event_webhook——两者都操作 HA 自己的本地磁盘事件文件缓存和webhook_url/enable_webhook_delivery配置,这个工具没有这些基础设施(这里的事件是按需从 Bosch 云拉取的,从不本地存储)。AI 警报历史回读——HA 的
ai_alert_store.py从 HA 自己的存储布局中读取相对于hass.config.path的文件;与之耦合会很脆弱,而且当 MCP 客户端本身通常就是进行分析的 LLM 时,并不明确有用。video_quality/stream_mode选择和image_rotation_180——这三个都是 HA 中仅客户端侧的偏好(完全不调用 Bosch 云 API:质量选择 RTSPS 的inst=参数,stream_mode 选择 LOCAL 与 REMOTE,旋转是仅显示的 CSS/PIL 变换),这里没有持久的每会话状态可附加。pan_preset已经覆盖——bosch_camera_pan(preset=...)自 v1.x 起已发布。
可靠性——透明的凭据轮换
prefer_local=True 的 LAN-RCP 写入路径(bosch_camera_privacy_set、bosch_camera_light_set)在从 bosch_config.json 重新获取新的 Digest 凭据后,会在 HTTP 401 时自动重试一次。没有用户可见的 API 变化——重试是静默的,无论是否需要轮换,工具结果都是相同的。这消除了缓存的 Digest nonce 过期时的冷启动失败。bosch_camera_pan 目前不接受 prefer_local 参数——pan 始终通过 Bosch 云进行。
MCP 资源
Resource URI | Description |
| 所有摄像头的 JSON 列表(id、name、model、status、firmware、mac、description) |
| 最新缓存的 JPEG,如果缓存为空则进行新拍摄 |
| 最近 50 个事件(motion、person、audio)的 JSON 列表 |
bosch://cameras 是静态资源。{name} 变体是资源模板。
MCP 提示
Prompt | Arguments | Description |
|
| 多步骤报告:每个摄像头的事件、类型细分、时间分布、异常高亮 |
| (none) | 拍摄每个摄像头的快照,描述场景,标记异常,推荐室内隐私模式 |
隐私立场——媒体操作仅限局域网
快照和流 URL 直接从 MCP 主机通过局域网发送到摄像头——没有 Bosch 云中继。其余工具(status、events、privacy/light/pan/notifications)仍使用云,因为目前没有为这些端点暴露本地 API。
Tool | Path |
| 仅局域网——HTTP Digest 到摄像头 IP |
| 仅局域网——通过本地 Bosch TLS 代理的 RTSPS |
| 仅局域网——TCP 连接到摄像头端口 443 |
| Bosch 云(尚无本地 API) |
| Bosch 云 |
| 先 LAN-RCP,云回退——仅 Gen2 |
| Bosch 云(尚无本地 API) |
MCP 主机必须与摄像头在同一网络中,媒体工具才能工作。如果不是,快照/流工具会显示 local_unavailable,而不是回退到云——这是设计使然。
认证模型
服务器使用姊妹 Python CLI 工具中用户现有的 bosch_config.json 运行——没有单独的 OAuth 流程,此仓库不存储任何凭据。通过 CLI 的 bosch_camera login(基于浏览器的 OAuth2 PKCE)生成一次,然后将 MCP 服务器指向它:
--config <path>/BOSCH_CAMERA_CONFIG=<path>环境变量:bosch_config.json的显式路径。如果两者都未设置,桥接器会回退到
get_session_and_cameras()的默认解析在姊妹 CLI 检出旁边找到的任何内容(参见 架构——姊妹 CLI 的位置本身通过BOSCH_CAMERA_CLI_PATH或固定的默认路径解析)。
MCP 服务器不会读取或写入超出 CLI 工具已做的凭据(401 时刷新令牌、原子保存)——它通过 cli_bridge 导入直接调用 CLI 自己的会话/配置代码。
传输模式
通过 --transport 标志支持三种传输模式:
Mode | Flag | Use case |
|
| Claude Code / Claude Desktop——本地子进程 |
|
| 通过 HTTP 的远程/多客户端部署 |
|
| 旧版 SSE 客户端 |
HTTP 和 SSE 模式默认绑定到 127.0.0.1:8765(安全的本机专用)。仅在受信任的防火墙网络环境中传递 --http-host 0.0.0.0。
# stdio (default) — used by Claude Code / Claude Desktop
bosch-smart-home-camera-mcp --config ~/.config/bosch-camera/bosch_config.json
# streamable-HTTP — local port for multi-client use
bosch-smart-home-camera-mcp --transport http --http-port 8765
# streamable-HTTP — expose to LAN (ensure firewall rules!)
bosch-smart-home-camera-mcp --transport http --http-host 0.0.0.0 --http-port 8765技术栈
Python 3.10+
mcp— 官方 MCP Python SDKpydantic(已经是mcp的传递依赖)用于工具模式复用:来自姊妹 CLI 仓库的
bosch_camera.py,在运行时通过sys.path注入定位(BOSCH_CAMERA_CLI_PATH环境变量或可配置的默认值)——不是pip安装的依赖,参见 架构
安装
# via pipx (recommended for end users — isolated environment, PATH entry)
pipx install bosch-smart-home-camera-mcp
# via uvx (zero-install, one-shot — no persistent env needed)
uvx bosch-smart-home-camera-mcp --help
# from source (for development)
pip install -e .[test]维护者: PyPI 发布是自动化的——推送
v*.*.*标签会通过 OIDC Trusted Publisher 触发 publish-pypi workflow。不要手动运行twine upload。
添加到 Claude Code——stdio(本地,推荐)
claude mcp add bosch-camera -- bosch-smart-home-camera-mcp \
--config ~/.config/bosch-camera/bosch_config.json添加到 Claude Code——streamable-HTTP(远程服务器)
# Start server first:
bosch-smart-home-camera-mcp --transport http --http-port 8765
# Then register the HTTP endpoint:
claude mcp add bosch-camera --transport http http://127.0.0.1:8765/mcp添加到 Claude Desktop
将以下内容添加到你的 claude_desktop_config.json(通常在 macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json,在 Windows 上为 %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"bosch-camera": {
"command": "bosch-smart-home-camera-mcp",
"args": [
"--config",
"/path/to/bosch_config.json"
]
}
}
}将 /path/to/bosch_config.json 替换为你的 bosch_config.json 的实际路径(由姊妹 Python CLI 工具通过 bosch_camera login 生成)。服务器作为本地 stdio 子进程运行——Claude Desktop 不需要网络端口。
仓库布局
Bosch-Smart-Home-Camera-Tool-MCP/
├── README.md this file
├── CHANGELOG.md full version history
├── LICENSE MIT
├── pyproject.toml build + tool config
├── requirements.txt runtime pins (mcp, etc.)
├── requirements-test.txt pytest, pytest-asyncio, mocks
├── src/
│ └── bosch_camera_mcp/
│ ├── __init__.py
│ ├── server.py FastMCP server + all 70 MCP tools
│ ├── adapters/
│ │ ├── cli_bridge.py sys.path bridge to the sister Python CLI for cloud ops
│ │ └── __init__.py
│ ├── lan_rcp.py direct LAN HTTPS+Digest for RCP writes
│ ├── cloud_ssl.py pinned Bosch cloud CA / SSL context (CWE-295)
│ ├── time_utils.py Bosch timestamp cleanup helpers
│ ├── maintenance.py cloud maintenance RSS feed fetcher
│ ├── errors.py shared error types (MCPError)
│ ├── resources.py MCP resources (bosch://cameras/…)
│ └── prompts.py MCP prompts (daily-summary, pre-leave)
├── tests/ 30+ test modules — tool behavior, LAN-RCP/cred-rotation,
│ cert pinning, transports, resources, prompts, packaging
├── docs/
│ ├── architecture.md
│ └── release-process.md
└── .gitignore发布历史
v0.1.0 — 概念文档 + 骨架服务器,所有工具均已定义但尚未实现(返回
NotImplementedError)✅v0.2.0 — 全部 8 个工具已通过 sys.path 注入(Option C)接通:读取工具(list、status、events、snapshot)+ 写入工具(privacy、light、pan、notifications)✅
v0.4.0 — 资源(
bosch://cameras、bosch://cameras/{name}/snapshot.jpg、bosch://cameras/{name}/events)+ 提示词(daily-camera-summary、pre-leave-check)✅v0.5.0 — streamable-HTTP 传输(
--transport http|sse|stdio),为pipx/uvx打包分发,新增 24 个测试 ✅v1.0.0 — 首个稳定版:106 个测试,wheel + sdist 已发布到 GitHub Releases,PyPI 发布待完成 ✅
v1.1.0 — 仅局域网媒体路径(隐私加固):
bosch_camera_snapshot和新工具bosch_camera_stream_url直接通过局域网连接摄像头,媒体不再经过 Bosch 云中继。113 个测试。✅v1.2.0 —
bosch_camera_maintenance_status工具:从社区 RSS 源获取云端维护公告;返回状态(active/scheduled/past/recent/unknown/idle)、标题、时间窗口、链接。✅v1.3.0 — 局域网回退功能集(移植自 HA 集成 v12.4.10/v12.4.11):
bosch_camera_lan_ping工具(对局域网内任意摄像头进行 TCP 探测);在bosch_camera_privacy_set/bosch_camera_light_set上新增prefer_local=True(RCP-LAN 写入路径,Gen2,失败时回退到云端);bosch_camera_maintenance_status新增recommended_action字段(active 时为"check_lan",scheduled 时为"wait")。173 个测试。✅v1.3.3 — 音频获取/设置、入侵检测获取/设置、WiFi 信息(从 HA v12.7.0 交叉移植)。16 个工具。✅
v1.3.4 — PTZ 命名预设(
bosch_camera_pan preset=接受home / left / right / back-left / back-right);LAN-RCP 工具在收到 401 时进行透明的凭据轮换(静默重试,无 API 变更)。✅v1.3.6 — 修复了 2026-05-24 现场审计发现的 9 个 bug(摄像头列表始终实时取自云端、Gen1/Gen2 hw_version、UUID 解析、事件字段映射、audio camelCase、intrusion Gen2 gate、错误码、快照时间戳、requirements-test.txt 镜像)。✅
v1.4.0 — 4 个新工具:
bosch_camera_mjpeg_snapshot、bosch_camera_onvif_scopes、bosch_camera_rcp_version、bosch_camera_feature_flags。_fetch_rcp_lan异步辅助函数。共 20 个工具。✅v1.5.0 — 11 个新工具 + 8 个 bug 修复,均来自实机摄像头审计(4 台硬件设备,覆盖全部 4 代):siren trigger、motion get/set、recording get/set、autofollow get/set、privacy-sound get/set、unread-count、health-check-all、token-status。✅
v1.5.1 — 修复了
_fetch_rcp_lan(之前使用了不存在的aiohttp.DigestAuth→onvif_scopes/rcp_version在局域网下始终失败;现改用httpx.DigestAuth)。测试覆盖率 83→98%,测试夹具已脱敏,CI 升级到 Node-24 原生 action 主版本。✅v1.5.2 — 依赖清理:移除了未使用的
aiohttp运行时依赖(现仅用于测试),新增pyjwt>=2.13.0/starlette>=1.0.1安全下限(pip-audit通过),修复了一个 mock 错误 HTTP 栈的测试。✅v1.5.3 — 安全补丁:为 MCP 云会话固定 Bosch 云端 CA(CWE-295、GHSA-6qh5-x5m5-vj6v);封堵了针对 OAuth 令牌的相邻网络 MITM 攻击。本地 TOFU 固定保持不变。✅
v1.5.4 — 事件时间戳不再丢失时区偏移:
/v11/events返回带偏移的时间戳(例如+02:00[Europe/Berlin]);服务器现在只去掉末尾的[zone]后缀,而不是截断到 19 个字符,从而保留显式的 UTC 偏移。✅v1.5.5 —
camera_events资源现在使用eventType + eventTags进行正确的事件分类。✅v1.6.0 — 2 个新工具:
bosch_camera_audio_detection_get/bosch_camera_audio_detection_set— 为 Gen2 Audio-Plus 摄像头提供玻璃破碎 + 烟雾/火灾报警声音检测(从 HA 集成 v14.2.0 交叉移植)。共 34 个工具。✅v1.7.0 — 家族对齐收官(
docs/family-parity-plan.md§2b):21 个新工具,弥合 MCP 与 HA/CLI 之间的能力差距 — motion zones get/set/clear、privacy masks get/set/clear、automation rules list/add/edit/delete、camera sharing/friends list/invite/share/unshare/remove、firmware status/install(复刻 HA 的async_install_firmware防护)、siren duration、LED lighting schedule get/set,以及一个监听音频对讲工具(摄像头麦克风 → 呼叫方,RTSPS URL;双向对讲在 Bosch 云 API 中完全没有开放,姊妹 CLI 也有同样的限制)。CI 加固:覆盖率门禁(--cov-fail-under=96)、pip-audit(仅运行时依赖)、pylint、codespell、CodeQL、gitleaks 密钥扫描,以及 dependency-review 工作流 — 与 HA 集成的质量门禁达到 Gold 级对齐。共 55 个工具。✅v1.7.2 — 仅文档:修复了本仓库在集成对比表中的 Login 行,无功能变更。✅
发布
最新:v1.7.2 — 完整说明请参见 GitHub 发布页: v1.7.2 发布说明 →
所有版本 | GitHub Releases 页面 — 每个带标签的版本均附说明 + 可下载的资源文件 |
完整历史 |
|
集成对比
Bosch Smart Home Camera 逆向工程 API 通过五个姊妹项目对外提供。选择适合你平台的那个。
功能 | ||||||
成熟度 | v15.0+ — HA 质量等级 Platinum | v10.12+ 稳定版(Mini-NVR BETA) | v1.8+ 稳定版 · npm | v1.7+ 稳定版 · PyPI | v0.4.0 alpha · PyPI | v0.4.0 alpha · npm |
平台 | Home Assistant(HACS) | 独立 Python 3.10+ CLI | ioBroker(npm) | Python 3.10+ · pipx / uvx · stdio + streamable-HTTP,适用于 MCP 客户端(Claude Desktop、Claude Code、自定义) | NiceGUI Web 应用 · Python 3.10+ | Node-RED 调色板 · npm |
登录 | OAuth2 PKCE(浏览器) | OAuth2 PKCE(浏览器) | OAuth2 PKCE(浏览器) | ◑ 共享 CLI | ◑ 共享 CLI | ◑ 从 CLI 获取 refresh-token |
快照 | ✅ 原生 | ✅ | ✅ 文件存储 + base64 DP | ✅ | ✅ 实时 + 事件回退 | ✅ |
实时 RTSP 流(局域网) | ✅ 通过 HA Stream 组件 | ✅ ffmpeg/RTSPS 输出 | ✅ TLS 代理 → 本地 RTSP | ✅ | ◑ 内部(go2rtc) | ◑ |
WebRTC(亚秒级延迟) | ✅ 通过集成 go2rtc | ✅ (v10.6.0) | ❌ | ❌ | ✅ 通过 go2rtc(否则快照) | ❌ |
双流 URL(主码流 + 子码流) | ✅ | ✅ | ✅ | ◑ | ❌ (仅子码流) | ◑ 仅 URL — 无子码流选项 |
外部录像机(BlueIris、Frigate) | ✅ 通过 go2rtc | ✅ stdout 管道 | ✅ Digest 凭据 URL + 局域网绑定选项 | ✅ 返回 URL,交由下游 ffmpeg / go2rtc 处理 | ❌ | ◑ |
隐私模式 | ✅ 开关实体 | ✅ 命令 | ✅ DP | ✅ | ✅ 切换 | ✅ |
前置聚光灯(Gen1/Gen2) | ✅ 灯光实体 | ✅ 命令 | ✅ DP | ✅ | ❌ (第二阶段占位) | ✅ |
RGB 洗墙灯(Gen2 Outdoor II) | ✅ 带 RGB 的灯光 | ◑ 仅开/关 — 无 RGB | ✅ 颜色 + 亮度 DP | ❌ (仅开/关 — 未暴露 RGB) | ❌ | ◑ 仅开/关 + 强度 — 无 RGB (v0.3.0-alpha) |
恐慌警报器 | ✅ 按钮实体 (Gen2 Indoor II) | ✅ 命令 (仅 Gen2 Indoor II) | ✅ DP | ✅ | ✅ 触发 + 时长 (仅 Gen2 Indoor II) | ❌ |
固件更新 | ✅ 更新实体 + 修复流程、安装按钮 (v14.4.10) | ✅ 状态 + 安装 (v10.11.0) | ✅ 固件状态 + 安装触发、写锁保护 (v1.8.0) | ✅ 状态 + 安装工具 (v1.7.0) | ◑ 只读状态显示,无安装操作 | ✅ 状态 + 安装节点 (v0.4.0-alpha) |
图像旋转 180° | ✅ 开关 | ❌ | ✅ DP | ❌ | ❌ | ❌ |
移动 / 人形 / 音频事件 | ✅ FCM 推送 + 轮询回退 | ◑ 仅 | ✅ FCM 推送 + 轮询回退 | ✅ | ◑ 仅拉取事件表 | ✅ |
移动边沿触发状态 | ✅ | 不适用 | ✅ | 不适用 (请求-响应,无订阅) | ❌ | ❌ |
移动时自动快照 | ✅ 刷新摄像机实体 | 不适用 | ✅ 写入 | 不适用 (无后台循环) | ❌ | ❌ |
模拟移动触发(外部传感器) | ✅ 服务 | 不适用 | ✅ DP | ❌ | ❌ | ❌ |
移动区域 / 隐私遮挡 | ✅ 读取 + 写入 | ✅ 读取 + 写入 | ✅ 读取 + 写入 (v1.8.0) | ✅ 获取 / 设置 / 清除 (v1.7.0) | ❌ (尚无可视化编辑器) | ❌ |
自动化规则 / 定时计划 | ✅ 读取 + 写入 | ✅ 读取 + 写入 | ✅ 完整 CRUD (v1.8.0) | ✅ 列表 / 添加 / 编辑 / 删除 (v1.7.0) | ✅ 完整 CRUD(列表/添加/编辑/删除) | ❌ |
灯光定时 | ✅ 读取(通过服务写入,仅 Gen1 Eyes Outdoor) | ✅ 读取 + 写入 | ✅ 读取 (仅 Gen1,v1.2.0) | ✅ 获取 / 设置 (v1.7.0) | ✅ 读取 + 写入 (室外 Eyes 摄像机) | ❌ |
云录像下载(约 30 天历史) | ✅ 通过媒体浏览器 | ❌ | ❌ (搁置 — 尚无社区需求) | ❌ (有意不暴露 — 负载过大) | ❌ (使用 CLI) | ◑ 事件负载中的 |
Mini-NVR(本地录像) | ✅ 连续 + 事件缓冲、环形缓冲预录 (v11.2.0 BETA → v14.7.0 模式) | ◑ 事件触发分段封装,无预录环形缓冲 (v10.7.0 BETA) | ❌ (通过免凭据 RTSP 端点委托给外部录像机) | ❌ (无 NVR 概念) | ◑ 仅连续,无事件缓冲 (v0.4.0-alpha) | ◑ 仅通过 |
SMB / NAS 录像上传 | ✅ | ✅ (v10.7.0 BETA) | ❌ | ❌ | ❌ | ❌ |
摄像机共享(好友) | ✅ 服务(共享 / 邀请 / 列表) | ✅ 命令 | ✅ 共享 / 邀请 / 移除 (仅 Gen2,v1.8.0) | ✅ 列表 / 邀请 / 共享 / 取消共享 / 移除 (v1.7.0) | ✅ 列表/邀请/移除/共享/取消共享 | ❌ |
云台 / 俯仰(360° Gen1) | ✅ 服务 | ✅ 命令 | ✅ | ✅ | ✅ 滑块连接实时 API | ❌ |
命名云台预设(home / left / right / back-left / back-right) | ✅ 可选选择实体 | ✅ | ✅ | ✅ | ❌ | ❌ |
双向语音 / 对讲 | ❌ | ✅ 命令 | ❌ | ◑ 仅监听 | ❌ | ❌ |
事件 Webhook 投递 | ✅ 服务 + 可选选项 | ✅ | ✅ 通过 MQTT 桥接 | ❌ (请求-响应模型) | ❌ | ❌ |
MQTT 事件桥接(移动 / 音频 / 人形) | 不适用 (HA 事件总线原生) | 不适用 (单次运行) | ✅ 管理员配置 | 不适用 | ❌ | ❌ |
Apple HomeKit(通过 HA Core 桥接) | ✅ 已文档化 | 不适用 | 不适用 | 不适用 | 不适用 | 不适用 |
快照定时 / 延时摄影 | ✅ examples/ YAML | ✅ cron + ffmpeg 示例 | ✅ Blockly 示例 | 不适用 | ❌ | ❌ |
原生仪表盘卡片 / 组件 | ✅ 2 个 Lovelace 卡片(单个 + 网格) | 不适用 | ✅ 2 个 vis-2 组件 — BoschCamera + BoschOverview 多摄像机 | 不适用 | ✅ (本身就是一个 Web 仪表盘) | ❌ |
画中画在后台标签页下保持运行 | ✅ | 不适用(无界面) | ✅ 自带 PiP + 冻结恢复、Web-Worker 心跳 (v1.7.2/v1.7.3) | 不适用(无界面) | ✅ 重连超时 + 冻结恢复 (v0.4.0-alpha) | 不适用(无界面) |
云中继远程回退 | ✅ 局域网不可达时自动切换 | ✅ 远程模式 | ❌ (设计上仅限本地) | ❌ (媒体仅限局域网;状态/事件通过云) | ◑ 继承 CLI | ◑ 远程选项(手动) |
基于浏览器的管理 / 配置界面 | ✅ HA 配置流程 | 不适用(CLI) | ✅ JSON 配置标签页 | 不适用(LLM 中介;通过 CLI / MCP 客户端配置) | ✅ 设置页面 | ◑ 编辑器配置节点 |
界面语言 | EN · DE · FR · ES · IT · NL · PL · PT · RU · UK · ZH-Hans (v12.4.0) | EN · DE · FR · ES · IT · NL · PL · PT · RU · UK · ZH-Hans (v10.3.0) | EN · DE · FR · ES · IT · NL · PL · PT · RU · UK · ZH-CN | 不适用 (无界面 — LLM 即前端) | ◑ 后端 i18n · 界面主要为英文 | 不适用 (仅英文) |
图例: ✅ 支持 · ❌ 不支持 / 暂无计划 · n/a 不适用于此平台。
所有四个项目共享相同的逆向工程 Cloud API + RCP 协议研究,但各自独立演进。Home Assistant 集成是功能最完整的参考实现;Python CLI 是最底层 / 可脚本化的接口;ioBroker 适配器面向 VIS 仪表板和 Blockly 自动化;MCP 服务器向 MCP 客户端(Claude Desktop、Claude Code、自定义)暴露一个精选的、局域网优先的工具接口,用于自然语言摄像头控制。
相关项目
属于 Bosch Smart Home Cameras 的五实现家族的一部分(外加一个 alpha 前端):
实现 | 仓库 | 状态 |
🏆 Home Assistant Integration | v16.0.1 · HA Quality Scale Platinum · 生产就绪 | |
🐍 Python CLI | v10.12.3 · Mini-NVR + SMB 上传(BETA)· LAN 回退(ping / --local)· PTZ 预设 · webhook 投递 · 抓拍 / 研究 / 独立使用 | |
🟢 ioBroker Adapter | v1.8.3 · 稳定 · npm · 隐私开关 Digest 凭据轮换 · MQTT 桥接 · PTZ 预设 · VIS-2 组件(BoschCamera + BoschOverview) | |
🤖 MCP Server(本仓库) | v1.7.2 · 凭据轮换 · PTZ 预设 · TOFU 证书固定 · 云端 CA 固定(CWE-295)· LAN-ping + prefer_local · zones/masks/rules/friends/firmware-install · Claude Code / Claude Desktop 集成 | |
🔴 Node-RED 节点(alpha) | v0.4.2-alpha · 事件 / 快照 / 隐私 / 配置 / 更多节点 |
此外:Bosch Smart Home Camera — Python Frontend (NiceGUI) — v0.4.2-alpha(仪表盘 + 摄像头详情 + 设置)—— 欢迎社区关注
HA 仍然是参考实现 —— 新功能首先在 HA 落地;Python CLI、ioBroker Adapter 和 MCP Server 随后逐步跟进。
许可证
MIT —— 参见 LICENSE。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables controlling and querying Home Assistant devices and services via natural language. Supports state retrieval, listing states, and calling any Home Assistant service.132765MIT
- AlicenseNot gradedqualityAmaintenanceEnables natural language control of Xiaomi smart home devices through MCP, focusing on homes, rooms, device names, and scenes without requiring protocol details.65MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.152AGPL 3.0
- AlicenseNot gradedqualityAmaintenanceEnables control of local Xiaomi smart home devices via MCP, allowing reading real-time status and setting properties through natural language, without relying on the Xiaomi cloud.MIT
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
MCP server wrapping the Tesla Fleet API and TeslaMate API
MCP server exposing the AceDataCloud Fish Audio API (text-to-speech with voice conditioning)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mosandlt/Bosch-Smart-Home-Camera-Tool-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server