Skip to main content
Glama
mosandlt

Bosch Smart Home Camera MCP Server

by mosandlt

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 安装

License Project Maintenance


目录


Related MCP server: 米家 MCP Server

免责声明

本项目是一个独立的、由社区开发的工具。它与 Robert Bosch GmbH、Bosch Smart Home GmbH 或其任何子公司或关联公司没有任何关联、未获其认可、赞助,也并非以任何方式与其有官方联系。"Bosch"、"Bosch Smart Home" 及相关名称和徽标均为 Robert Bosch GmbH 的注册商标。

该工具与一个经过逆向工程、无文档、非官方的 API 进行通信。按"原样"提供,不附带任何形式的保证。使用风险完全自负。

为什么单独做一个 MCP 服务器?

姊妹项目面向不同的运行时:

项目

版本

运行时

面向用户的界面

HA 集成

v16.0.1

Home Assistant

UI 实体、Lovelace 卡片、自动化

Python CLI

v10.12.3

终端

bosch_camera ... 命令

ioBroker 适配器

v1.8.3

ioBroker

数据点、VIS-2 小部件(BoschCamera + BoschOverview)、JSON 配置管理 UI

Node-RED 节点

v0.4.2-alpha

Node-RED

用于自动化管道的流节点

前端(NiceGUI)

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_cameraensure_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:#000

bosch_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)

工具

描述

返回

bosch_camera_list

列出所有已配置的摄像头

{id, name, model, hw_version, status} 组成的数组

bosch_camera_status

获取单个摄像头的在线/离线及隐私状态

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_snapshot

仅局域网 JPEG 抓拍(无云端)— 通过 HTTP Digest 访问摄像头 IP

{path, method, timestamp}

bosch_camera_stream_url

仅局域网 RTSPS 流地址(无云端中继)— 可供 ffmpeg/VLC/go2rtc 使用

{camera, rtsps_url, note}

bosch_camera_events

列出最近的移动/人物/音频事件

{event_id, type, tags, timestamp_iso, has_clip, clip_status} 组成的数组

bosch_camera_privacy_set

开启/关闭隐私模式;prefer_local=True 时优先走局域网 RCP

{name, status, privacy_mode, ...}

bosch_camera_light_set

开启/关闭聚光灯;prefer_local=True 时优先走局域网 RCP

{name, status, light_on, ...}

bosch_camera_pan

旋转 360° 摄像头(仅 Gen1 CAMERA_360);preset:home (0°) / left (-60°) / right (+60°) / back-left (-120°) / back-right (+120°)

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_notifications_set

切换推送通知

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_lan_ping

在局域网 443 端口对摄像头进行 TCP 探测(1.5 秒超时)

{reachable, ip, latency_ms}

bosch_camera_maintenance_status

从社区 RSS 源获取当前云端维护公告

{state, title, link, pub_date, summary, …, recommended_action}

bosch_camera_audio_get

获取麦克风音量、扬声器音量、对讲标志(仅 Gen2)

{microphone_level, speaker_level, intercom_enabled}

bosch_camera_audio_set

设置麦克风音量和/或扬声器音量 0-100(仅 Gen2)

{microphone_level, speaker_level, intercom_enabled}

bosch_camera_intrusion_get

获取入侵检测配置:模式、灵敏度 0-7、距离 1-8 米(仅 Gen2)

{mode, sensitivity, distance}

bosch_camera_intrusion_set

更新入侵检测模式/灵敏度/距离(仅 Gen2)

{mode, sensitivity, distance}

bosch_camera_audio_detection_get

获取玻璃破碎 + 烟雾/火警声音检测配置(仅 Gen2 Audio-Plus)

{glass_break, fire_alarm}

bosch_camera_audio_detection_set

更新玻璃破碎和/或火警声音检测(仅 Gen2 Audio-Plus)

{glass_break, fire_alarm}

bosch_camera_wifi

获取 WiFi RSSI、SSID 及派生的信号质量 0-100%

{rssi, ssid, signal_strength}

bosch_camera_mjpeg_snapshot

通过 RTSP inst=3 直接进行局域网 MJPEG 抓拍(仅 Gen2,ffmpeg,无云端往返)

{path, method, timestamp, camera}

bosch_camera_onvif_scopes

从摄像头局域网 RCP 0x0a98 读取 ONVIF 设备作用域(仅 Gen2)

{name, hardware, profiles, raw_scopes}

bosch_camera_rcp_version

从摄像头局域网操作码 0xff00 + 0xff04 读取 RCP 库版本

{primary, secondary, raw_primary_hex, raw_secondary_hex}

bosch_camera_feature_flags

获取账户级别的 Bosch 云端功能开关(无需摄像头参数)

{FLAG_NAME: bool, ...}

bosch_camera_siren_trigger

触发室内警报器(仅 Gen2 Indoor II);stop=True 取消

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_motion_get

获取移动检测启用状态 + 灵敏度

{enabled, sensitivity}

bosch_camera_motion_set

设置移动检测启用状态和/或灵敏度

{enabled, sensitivity}

bosch_camera_recording_get

获取云端录像声音设置

{sound_on}

bosch_camera_recording_set

设置云端录像声音

{sound_on}

bosch_camera_autofollow_get

获取 360° 自动跟踪状态(仅 Gen1 Indoor)

{enabled}

bosch_camera_autofollow_set

设置 360° 自动跟踪(仅 Gen1 Indoor)

{enabled}

bosch_camera_privacy_sound_get

获取隐私提示音状态

{enabled}

bosch_camera_privacy_sound_set

设置隐私提示音状态

{enabled}

bosch_camera_unread_get

获取摄像头的未读事件数

{count}

bosch_camera_health_check_all

所有摄像头的批量健康摘要(状态 + WiFi + 隐私 + 最近事件 + 未读)

由每个摄像头的健康字典组成的数组

bosch_camera_token_status

本地 JWT 解析 — 返回有效性、过期时间、邮箱(无网络调用)

{valid, expires_in_min, email}

bosch_camera_motion_zones_get

列出移动检测区域矩形(归一化 0.0-1.0)

{x, y, w, h} 组成的数组

bosch_camera_motion_zones_set

替换所有移动区域(全量替换,非合并)

{x, y, w, h} 组成的数组

bosch_camera_motion_zones_clear

移除所有移动区域

[]

bosch_camera_privacy_masks_get

列出隐私遮罩区域矩形(归一化 0.0-1.0)

{x, y, w, h} 组成的数组

bosch_camera_privacy_masks_set

替换所有隐私遮罩(全量替换,非合并)

{x, y, w, h} 组成的数组

bosch_camera_privacy_masks_clear

移除所有隐私遮罩

[]

bosch_camera_rules_list

列出单个摄像头的自动化(时间计划)规则

{id, name, active, start, end, days} 组成的数组

bosch_camera_rules_add

创建新的计划规则

{id, name, active, start, end, days}

bosch_camera_rules_edit

更新现有规则(部分更新)

{id, name, active, start, end, days}

bosch_camera_rules_delete

删除规则

{deleted, rule_id}

bosch_camera_friends_list

列出摄像头共享好友/邀请(账户级别)

{id, email, nickname, status, shared_cameras} 组成的数组

bosch_camera_friends_invite

通过邮箱邀请好友(账户级别)

{id, email, nickname, status, shared_cameras}

bosch_camera_friends_share

与现有好友共享一个摄像头(与其现有共享合并)

{shared, friend_id, camera}

bosch_camera_friends_unshare

撤销好友的所有摄像头共享

{unshared, friend_id}

bosch_camera_friends_remove

完全移除好友

{removed, friend_id}

bosch_camera_firmware_status

获取当前/最新固件版本 + 更新可用性

{camera, current, up_to_date, update_available, installing}

bosch_camera_firmware_install

安装待处理的固件更新(摄像头重启 3-7 分钟)

{camera, current, up_to_date, update_available, installing}

bosch_camera_siren_duration_set

设置警报器报警时长,10-300 秒(仅 Gen2 Indoor II)

{alarm_delay_seconds}

bosch_camera_lighting_schedule_get

获取 LED 照明计划(室外 Eyes 摄像头)

{on_time, off_time, light_on_motion, darkness_threshold, schedule_status}

bosch_camera_lighting_schedule_set

更新 LED 照明计划(室外 Eyes 摄像头)

{on_time, off_time, light_on_motion, darkness_threshold, schedule_status}

bosch_camera_intercom_open

打开音频监听会话(摄像头麦克风 → 呼叫方);返回 RTSPS 地址,仅监听

{camera, rtsps_url, duration, speaker_level_set}

bosch_camera_timestamp_overlay_get

获取视频中是否烧录了日期/时间叠加层

{enabled}

bosch_camera_timestamp_overlay_set

开启/关闭视频日期/时间叠加层

{enabled}

bosch_camera_status_led_get

获取摄像头状态 LED 的开关状态(仅 Gen2)

{enabled}

bosch_camera_status_led_set

开启/关闭摄像头状态 LED(仅 Gen2)

{enabled}

bosch_camera_lens_elevation_get

获取镜头安装高度(米)(仅 Gen2)

{meters}

bosch_camera_lens_elevation_set

设置镜头安装高度,0.5-5.0 米(仅 Gen2)

{meters}

bosch_camera_darkness_threshold_get

获取昼夜照明阈值 + 渐暗模式(仅 Gen2)

{threshold_percent, soft_light_fading}

bosch_camera_darkness_threshold_set

设置昼夜照明阈值和/或渐暗模式(仅 Gen2)

{threshold_percent, soft_light_fading}

bosch_camera_white_balance_get

获取前置灯的白平衡,-1.0 冷 .. 1.0 暖(仅 Gen2)

{value}

bosch_camera_white_balance_set

设置前置灯的白平衡(仅 Gen2)

{value}

bosch_camera_led_brightness_get

获取顶部或底部 LED 亮度 0-100%(仅 Gen2)

{position, brightness_percent}

bosch_camera_led_brightness_set

设置顶部或底部 LED 亮度 0-100%(仅 Gen2)

{position, brightness_percent}

bosch_camera_soft_reset

重启单个摄像头(软重置)

{camera, rebooting}

bosch_camera_hard_reset

将单个摄像头恢复出厂设置 — 破坏性操作,会解除摄像头配对;需要 confirm=True

{camera, factory_reset}

bosch_camera_rename

通过云端 API 重命名摄像头

{camera, new_name}

有意不向 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_setbosch_camera_light_set)在从 bosch_config.json 重新获取新的 Digest 凭据后,会在 HTTP 401 时自动重试一次。没有用户可见的 API 变化——重试是静默的,无论是否需要轮换,工具结果都是相同的。这消除了缓存的 Digest nonce 过期时的冷启动失败。bosch_camera_pan 目前不接受 prefer_local 参数——pan 始终通过 Bosch 云进行。

MCP 资源

Resource URI

Description

bosch://cameras

所有摄像头的 JSON 列表(id、name、model、status、firmware、mac、description)

bosch://cameras/{name}/snapshot.jpg

最新缓存的 JPEG,如果缓存为空则进行新拍摄

bosch://cameras/{name}/events

最近 50 个事件(motion、person、audio)的 JSON 列表

bosch://cameras 是静态资源。{name} 变体是资源模板。

MCP 提示

Prompt

Arguments

Description

daily-camera-summary

hours: int = 24

多步骤报告:每个摄像头的事件、类型细分、时间分布、异常高亮

pre-leave-check

(none)

拍摄每个摄像头的快照,描述场景,标记异常,推荐室内隐私模式

隐私立场——媒体操作仅限局域网

快照和流 URL 直接从 MCP 主机通过局域网发送到摄像头——没有 Bosch 云中继。其余工具(status、events、privacy/light/pan/notifications)仍使用云,因为目前没有为这些端点暴露本地 API。

Tool

Path

bosch_camera_snapshot

仅局域网——HTTP Digest 到摄像头 IP

bosch_camera_stream_url

仅局域网——通过本地 Bosch TLS 代理的 RTSPS

bosch_camera_lan_ping

仅局域网——TCP 连接到摄像头端口 443

bosch_camera_list / status / events

Bosch 云(尚无本地 API)

bosch_camera_privacy_set / light_set (default)

Bosch 云

bosch_camera_privacy_set / light_set (prefer_local=True)

先 LAN-RCP,云回退——仅 Gen2

bosch_camera_pan / notifications_set

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

stdio

--transport stdio (default)

Claude Code / Claude Desktop——本地子进程

streamable-http

--transport http

通过 HTTP 的远程/多客户端部署

sse

--transport sse

旧版 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 SDK

  • pydantic(已经是 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://camerasbosch://cameras/{name}/snapshot.jpgbosch://cameras/{name}/events)+ 提示词(daily-camera-summarypre-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.0bosch_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_snapshotbosch_camera_onvif_scopesbosch_camera_rcp_versionbosch_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.DigestAuthonvif_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.5camera_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(仅运行时依赖)、pylintcodespell、CodeQL、gitleaks 密钥扫描,以及 dependency-review 工作流 — 与 HA 集成的质量门禁达到 Gold 级对齐。共 55 个工具。✅

  • v1.7.2 — 仅文档:修复了本仓库在集成对比表中的 Login 行,无功能变更。✅

发布

最新:v1.7.2 — 完整说明请参见 GitHub 发布页: v1.7.2 发布说明 →

所有版本

GitHub Releases 页面 — 每个带标签的版本均附说明 + 可下载的资源文件

完整历史

CHANGELOG.md — 相同的说明,可在仓库内浏览

集成对比

Bosch Smart Home Camera 逆向工程 API 通过五个姊妹项目对外提供。选择适合你平台的那个。

功能

Home Assistant Integration

Python CLI Tool

ioBroker Adapter

MCP Server

Frontend (NiceGUI)

Node-RED

成熟度

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 bosch_config.json

◑ 共享 CLI bosch_config.json

◑ 从 CLI 获取 refresh-token

快照

✅ 原生 Camera.image

snapshot 命令

✅ 文件存储 + base64 DP

bosch_camera_snapshot(仅局域网)

✅ 实时 + 事件回退

snapshot 节点

实时 RTSP 流(局域网)

✅ 通过 HA Stream 组件

✅ ffmpeg/RTSPS 输出

✅ TLS 代理 → 本地 RTSP

bosch_camera_stream_url(仅局域网,无云中继)

◑ 内部(go2rtc)

stream-url 节点(仅 URL)

WebRTC(亚秒级延迟)

✅ 通过集成 go2rtc

(v10.6.0) live --webrtc

✅ 通过 go2rtc(否则快照)

双流 URL(主码流 + 子码流)

sensor.bosch_<n>_stream_url + _sub (v12.4.0,每台摄像机可选)

info 显示两者 · live --sub (v10.5.0)

stream_url + stream_url_sub (v0.5.3 实验性)

bosch_camera_stream_url — 仅主码流

(仅子码流)

◑ 仅 URL — 无子码流选项

外部录像机(BlueIris、Frigate)

✅ 通过 go2rtc

✅ stdout 管道

✅ Digest 凭据 URL + 局域网绑定选项

✅ 返回 URL,交由下游 ffmpeg / go2rtc 处理

stream-url → 连接下游

隐私模式

✅ 开关实体

✅ 命令

✅ DP

bosch_camera_privacy_set(通过 prefer_local 局域网回退)

✅ 切换

privacy 节点

前置聚光灯(Gen1/Gen2)

✅ 灯光实体

✅ 命令

✅ DP

bosch_camera_light_set(局域网回退)

(第二阶段占位)

bosch-camera-light 节点 (v0.3.0-alpha)

RGB 洗墙灯(Gen2 Outdoor II)

✅ 带 RGB 的灯光

◑ 仅开/关 — 无 RGB

✅ 颜色 + 亮度 DP

(仅开/关 — 未暴露 RGB)

◑ 仅开/关 + 强度 — 无 RGB (v0.3.0-alpha)

恐慌警报器

✅ 按钮实体 (Gen2 Indoor II)

✅ 命令 (仅 Gen2 Indoor II)

✅ DP

bosch_camera_siren_trigger (仅 Gen2 Indoor II)

✅ 触发 + 时长 (仅 Gen2 Indoor II)

固件更新

✅ 更新实体 + 修复流程、安装按钮 (v14.4.10)

✅ 状态 + 安装 (v10.11.0)

✅ 固件状态 + 安装触发、写锁保护 (v1.8.0)

✅ 状态 + 安装工具 (v1.7.0)

◑ 只读状态显示,无安装操作

✅ 状态 + 安装节点 (v0.4.0-alpha)

图像旋转 180°

✅ 开关

✅ DP

移动 / 人形 / 音频事件

✅ FCM 推送 + 轮询回退

◑ 仅 watch 命令(事件命令已移除)

✅ FCM 推送 + 轮询回退

bosch_camera_events(按需拉取)

◑ 仅拉取事件表

event 节点(轮询)

移动边沿触发状态

binary_sensor.motion

不适用

motion_active DP (v0.5.3)

不适用 (请求-响应,无订阅)

移动时自动快照

✅ 刷新摄像机实体

不适用

✅ 写入 last_event_image base64 (v0.5.3)

不适用 (无后台循环)

模拟移动触发(外部传感器)

✅ 服务

不适用

✅ 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)

◑ 事件负载中的 clip_url

Mini-NVR(本地录像)

✅ 连续 + 事件缓冲、环形缓冲预录 (v11.2.0 BETA → v14.7.0 模式)

◑ 事件触发分段封装,无预录环形缓冲 (v10.7.0 BETA)

(通过免凭据 RTSP 端点委托给外部录像机)

(无 NVR 概念)

◑ 仅连续,无事件缓冲 (v0.4.0-alpha)

◑ 仅通过 bosch-camera-nvr-record 节点连续录像 (v0.4.0-alpha)

SMB / NAS 录像上传

(v10.7.0 BETA)

摄像机共享(好友)

✅ 服务(共享 / 邀请 / 列表)

✅ 命令

✅ 共享 / 邀请 / 移除 (仅 Gen2,v1.8.0)

✅ 列表 / 邀请 / 共享 / 取消共享 / 移除 (v1.7.0)

✅ 列表/邀请/移除/共享/取消共享

云台 / 俯仰(360° Gen1)

✅ 服务

✅ 命令

pan_position DP

bosch_camera_pan

✅ 滑块连接实时 API

命名云台预设(home / left / right / back-left / back-right)

✅ 可选选择实体

pan --preset 标志

pan_preset DP

bosch_camera_pan preset=

双向语音 / 对讲

✅ 命令

◑ 仅监听 bosch_camera_intercom_open (v1.7.0)

事件 Webhook 投递

✅ 服务 + 可选选项

watch --webhook URL

✅ 通过 MQTT 桥接

(请求-响应模型)

MQTT 事件桥接(移动 / 音频 / 人形)

不适用 (HA 事件总线原生)

不适用 (单次运行)

✅ 管理员配置

不适用

Apple HomeKit(通过 HA Core 桥接)

✅ 已文档化

不适用

不适用

不适用

不适用

不适用

快照定时 / 延时摄影

✅ examples/ YAML

✅ cron + ffmpeg 示例

✅ Blockly 示例

不适用

原生仪表盘卡片 / 组件

✅ 2 个 Lovelace 卡片(单个 + 网格)

不适用

✅ 2 个 vis-2 组件 — BoschCamera + BoschOverview 多摄像机

不适用

(本身就是一个 Web 仪表盘)

画中画在后台标签页下保持运行

hass-suspend-when-hidden 保活 (v14.0.0)

不适用(无界面)

✅ 自带 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

Bosch-Smart-Home-Camera-Tool-HomeAssistant

v16.0.1 · HA Quality Scale Platinum · 生产就绪

🐍 Python CLI

Bosch-Smart-Home-Camera-Tool-Python

v10.12.3 · Mini-NVR + SMB 上传(BETA)· LAN 回退(ping / --local)· PTZ 预设 · webhook 投递 · 抓拍 / 研究 / 独立使用

🟢 ioBroker Adapter

ioBroker.bosch-smart-home-camera

v1.8.3 · 稳定 · npm · 隐私开关 Digest 凭据轮换 · MQTT 桥接 · PTZ 预设 · VIS-2 组件(BoschCamera + BoschOverview)

🤖 MCP Server(本仓库)

Bosch-Smart-Home-Camera-Tool-MCP

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)

Bosch-Smart-Home-Camera-Tool-NodeRED

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

A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
4dRelease cycle
21Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    F
    maintenance
    Enables controlling and querying Home Assistant devices and services via natural language. Supports state retrieval, listing states, and calling any Home Assistant service.
    13
    276
    5
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables natural language control of Xiaomi smart home devices through MCP, focusing on homes, rooms, device names, and scenes without requiring protocol details.
    65
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.
    15
    2
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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

View all related MCP servers

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)

View all MCP Connectors

Latest Blog Posts

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