Skip to main content
Glama
mosandlt

Bosch Smart Home Camera MCP Server

by mosandlt

Bosch Smart Home Camera — MCP-сервер

Сервер Model Context Protocol (MCP), который предоставляет облачный API Bosch Smart Home Camera в виде MCP-инструментов. Подходит для Claude Code, Claude Desktop и любого MCP-совместимого клиента. Использует проверенный API-клиент, созданный на основе обратной разработки, из родственного Python CLI-инструмента.

Статус: v1.7.2 — завершение паритета семейства (v1.7.0): зоны движения, маски конфиденциальности, правила автоматизации, общий доступ к камере/друзья, установка прошивки, длительность сирены, расписание освещения, аудио-интерком. Плюс раунд настройки изображения/видео и жизненного цикла камеры от 2026-08-19: наложение временной метки, светодиод состояния, угол наклона объектива, порог темноты, баланс белого, яркость верхнего/нижнего светодиода, мягкий/жёсткий сброс, переименование. 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

автономное веб-приложение

панель управления + детали камеры + настройки UI

MCP-сервер (этот репозиторий)

v1.7.1

клиенты Claude

MCP-инструменты, вызываемые из LLM

Сценарии использования 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-сервер — это тонкая обёртка над API-слоем Python CLI. Он не реализует заново OAuth, обновление токенов, FCM push, RTSP или RCP — он их импортирует.

Это реальная зависимость времени выполнения, а не просто ссылка в документации. Сервер находит bosch_camera.py при запуске процесса через внедрение sys.path (adapters/cli_bridge.py), а не через обычную зависимость pip install — репозиторий родственного Python CLI-инструмента должен быть склонирован на диск, и MCP-серверу нужно знать, где он находится. Порядок разрешения: переменная окружения BOSCH_CAMERA_CLI_PATH, если она задана, в противном случае — фиксированный путь по умолчанию, используемый в собственной настройке сопровождающего (не переносимый — переопределите его). Почти каждый вызов инструмента в итоге импортирует bosch_camera из этого пути во время вызова (ensure_cli_importable()), поэтому отсутствующий или неправильный путь проявится как ImportError при первом вызове инструмента, а не при запуске сервера. Практически: клонируйте оба репозитория, затем либо установите BOSCH_CAMERA_CLI_PATH=/path/to/Bosch-Smart-Home-Camera-Tool-Python в окружении, в котором работает MCP-сервер, либо отредактируйте DEFAULT_CLI_PATH в adapters/cli_bridge.py для постоянной локальной установки. Тот же bosch_config.json, который CLI-инструмент создаёт через bosch_camera login, этот сервер читает для получения учётных данных — см. Модель аутентификации.

Маршрутизация инструментов с резервным вариантом 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 только по LAN (без облака) — HTTP Digest к IP камеры

{path, method, timestamp}

bosch_camera_stream_url

URL потока RTSPS только по LAN (без облачного ретранслятора) — доступен для 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 сначала направляет к LAN RCP

{name, status, privacy_mode, ...}

bosch_camera_light_set

Включить/выключить прожектор; prefer_local=True сначала направляет к LAN 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

Переключить push-уведомления

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_lan_ping

TCP-проверка камеры на LAN-порту 443 (таймаут 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

Прямой снимок MJPEG по LAN через RTSP inst=3 (только Gen2, ffmpeg, без облачного обхода)

{path, method, timestamp, camera}

bosch_camera_onvif_scopes

Чтение областей устройства ONVIF из LAN RCP камеры 0x0a98 (только Gen2)

{name, hardware, profiles, raw_scopes}

bosch_camera_rcp_version

Чтение версии библиотеки RCP из LAN-опкодов камеры 0xff00 + 0xff04

{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 — возвращает действительность, срок действия, email (без сетевого вызова)

{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

Пригласить друга по email (на уровне аккаунта)

{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

Открыть сеанс прослушивания аудио (микрофон камеры → вызывающий); возвращает URL 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

Получить состояние светодиода состояния камеры вкл/выкл (только Gen2)

{enabled}

bosch_camera_status_led_set

Включить/выключить светодиод состояния камеры (только 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

Получить яркость верхнего или нижнего светодиода 0-100 % (только Gen2)

{position, brightness_percent}

bosch_camera_led_brightness_set

Установить яркость верхнего или нижнего светодиода 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 (рискованные для записи / затратные по времени):

  • Обновление токена (обрабатывается незаметно базовым клиентом)

  • Загрузка облачных клипов (большие объёмы данных)

  • Двусторонняя связь (микрофон вызывающего → динамик камеры): вообще не предоставляется облачным API Bosch (то же ограничение, что и у родственного 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-сервер без учётных данных) — по той же причине: требует длительно работающего серверного процесса, которого нет в этом stateless-интерфейсе.

  • delete_event / send_event_webhook — оба работают с собственным локальным кэшем файлов событий HA и конфигурацией webhook_url/enable_webhook_delivery; этой инфраструктуры у данного инструмента нет (события здесь извлекаются по запросу из облака Bosch и никогда не хранятся локально).

  • Чтение истории AI-оповещений — ai_alert_store.py из HA читает файлы относительно hass.config.path в собственной структуре хранения HA; связывание с этим было бы хрупким и не имеет явной пользы, когда MCP-клиент сам обычно является LLM, выполняющим анализ.

  • Выборы video_quality / stream_mode и image_rotation_180 — все три являются только клиентскими предпочтениями в HA (вообще без вызова облачного API Bosch: качество выбирает параметр RTSPS inst=, stream_mode выбирает LOCAL vs REMOTE, поворот — это только отображаемое CSS/PIL-преобразование) без постоянного состояния сессии, к которому их можно было бы привязать здесь. pan_preset уже покрыт — bosch_camera_pan(preset=...) доступен с версии v1.x.

Надёжность — прозрачная ротация учётных данных

Путь записи LAN-RCP с prefer_local=True (bosch_camera_privacy_set, bosch_camera_light_set) автоматически повторяет попытку один раз при HTTP 401 после повторного получения свежих Digest-учётных данных из bosch_config.json. Никаких видимых пользователю изменений API — повтор незаметен, и результат инструмента идентичен независимо от того, потребовалась ли ротация. Это устраняет сбои холодного старта, когда кэшированный nonce Digest истёк. bosch_camera_pan в настоящее время не принимает параметр prefer_local — панорамирование всегда идёт через облако Bosch.

Ресурсы MCP

URI ресурса

Описание

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

Промпт

Аргументы

Описание

daily-camera-summary

hours: int = 24

Многошаговый отчёт: события по каждой камере, разбивка по типам, распределение по времени, выделение аномалий

pre-leave-check

(нет)

Снимок каждой камеры, описание сцены, отметка аномалий, рекомендация включить локальный режим конфиденциальности

Позиция по конфиденциальности — медиа-операции только через LAN

Снимки и URL потоков идут напрямую от MCP-хоста к камере по LAN — без ретрансляции через облако Bosch. Остальные инструменты (статус, события, конфиденциальность/свет/панорамирование/уведомления) по-прежнему используют облако, поскольку для этих конечных точек локальный API в настоящее время не предоставлен.

Инструмент

Путь

bosch_camera_snapshot

Только LAN — HTTP Digest к IP камеры

bosch_camera_stream_url

Только LAN — RTSPS через локальный TLS-прокси Bosch

bosch_camera_lan_ping

Только LAN — TCP-подключение к порту 443 камеры

bosch_camera_list / status / events

Облако Bosch (локального API пока нет)

bosch_camera_privacy_set / light_set (по умолчанию)

Облако Bosch

bosch_camera_privacy_set / light_set (prefer_local=True)

Сначала LAN-RCP, затем облако — только Gen2

bosch_camera_pan / notifications_set

Облако Bosch (локального API пока нет)

MCP-хост должен находиться в той же сети, что и камеры, для работы медиа-инструментов. Если это не так, инструменты снимков/потоков возвращают local_unavailable, а не переключаются на облако — это сделано намеренно.

Модель аутентификации

Сервер работает с существующим bosch_config.json пользователя из родственного Python CLI-инструмента — без отдельного потока OAuth, без хранения учётных данных этим репозиторием. Сгенерируйте его один раз через bosch_camera login в CLI (браузерный OAuth2 PKCE), затем укажите MCP-серверу путь к нему:

  • --config <путь> / переменная окружения BOSCH_CAMERA_CONFIG=<путь>: явный путь к bosch_config.json.

  • Если ни то, ни другое не задано, мост использует то, что найдёт разрешение по умолчанию в get_session_and_cameras() рядом с checkout родственного CLI (см. Архитектура — расположение самого родственного CLI определяется через BOSCH_CAMERA_CLI_PATH или фиксированный путь по умолчанию).

MCP-сервер никогда не читает и не записывает учётные данные сверх того, что уже делает CLI-инструмент (обновление токена при 401, атомарное сохранение) — он напрямую вызывает код сессии/конфигурации CLI через импорт cli_bridge.

Режимы транспорта

Поддерживаются три режима транспорта через флаг --transport:

Режим

Флаг

Сценарий использования

stdio

--transport stdio (по умолчанию)

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 — официальный Python SDK MCP

  • pydantic (уже транзитивная зависимость mcp) для схем инструментов

  • Переиспользование: bosch_camera.py из родственного CLI-репозитория, расположение определяется во время выполнения через 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 автоматизирована — push тега v*.*.* запускает workflow publish-pypi через OIDC Trusted Publisher. Не запускайте 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 (обычно ~/Library/Application Support/Claude/claude_desktop_config.json на macOS или %APPDATA%\Claude\claude_desktop_config.json на Windows):

{
  "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 инструментов подключены: инструменты чтения (list, status, events, snapshot) + инструменты записи (privacy, light, pan, notifications) через инъекцию sys.path (Option C) ✅

  • 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 — медиа-путь только через LAN (усиленная конфиденциальность): bosch_camera_snapshot и новый bosch_camera_stream_url идут напрямую к камере по LAN, без облачного ретранслятора Bosch для медиа. 113 тестов. ✅

  • v1.2.0 — инструмент bosch_camera_maintenance_status: получает облачные объявления о техническом обслуживании из RSS-лент сообщества; возвращает состояние (active/scheduled/past/recent/unknown/idle), заголовок, временное окно, ссылку. ✅

  • v1.3.0 — набор функций с запасным вариантом через LAN (перенесено из HA-интеграции v12.4.10/v12.4.11): инструмент bosch_camera_lan_ping (TCP-проба любой камеры в LAN); prefer_local=True для bosch_camera_privacy_set / bosch_camera_light_set (путь записи RCP-LAN, Gen2, облачный запасной вариант при сбое); поле recommended_action у bosch_camera_maintenance_status ("check_lan" при активном статусе, "wait" при запланированном). 173 теста. ✅

  • v1.3.3 — аудио get/set, обнаружение вторжений get/set, информация о WiFi (кросс-порт из HA v12.7.0). 16 инструментов. ✅

  • v1.3.4 — именованные пресеты PTZ (bosch_camera_pan preset= принимает home / left / right / back-left / back-right); прозрачная ротация учётных данных при 401 для LAN-RCP инструментов (тихий повтор, без изменения API). ✅

  • v1.3.6 — 9 исправлений ошибок по итогам live-аудита 2026-05-24 (список камер всегда актуален из облака, hw_version для Gen1/Gen2, разрешение UUID, сопоставление полей событий, audio camelCase, шлюз intrusion для Gen2, коды ошибок, временная метка снимка, зеркало 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 исправлений ошибок по итогам live-аудита камер (4 аппаратных устройства, все 4 поколения): запуск сирены, 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 всегда падали по LAN; теперь httpx.DigestAuth). Покрытие тестами 83→98%, фикстуры очищены, CI обновлён до мажорных версий экшенов, нативных для Node-24. ✅

  • v1.5.2 — гигиена зависимостей: убрана неиспользуемая runtime-зависимость aiohttp (теперь только для тестов), добавлены минимальные версии безопасности pyjwt>=2.13.0 / starlette>=1.0.1 (pip-audit чист), исправлен тест, который мокал не тот HTTP-стек. ✅

  • v1.5.3 — патч безопасности: закреплён облачный CA Bosch для MCP-облачной сессии (CWE-295, GHSA-6qh5-x5m5-vj6v); закрывает MITM из соседней сети для OAuth-токенов. Локальный 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 integration v14.2.0). Всего 34 инструмента. ✅

  • v1.7.0 — завершение family-parity (docs/family-parity-plan.md §2b): 21 новый инструмент закрывает разрыв возможностей MCP vs HA/CLI — зоны движения get/set/clear, приватные маски get/set/clear, правила автоматизации list/add/edit/delete, общий доступ к камере и список друзей: invite/share/unshare/remove, статус/установка прошивки (зеркалирует защиту async_install_firmware из HA), длительность сирены, расписание LED-подсветки get/set и инструмент аудиосвязи listen-audio (микрофон камеры → вызывающий, RTSPS URL; двусторонняя связь вообще не представлена в облачном API Bosch — то же ограничение, что и у родственного CLI). Усиление CI: порог покрытия (--cov-fail-under=96), pip-audit (только runtime-зависимости), pylint, codespell, CodeQL, gitleaks secret-scan и workflow dependency-review — паритет уровня Gold с гейтами качества HA-интеграции. Всего 55 инструментов. ✅

  • v1.7.2 — только документация: исправлена строка Login в таблице Integration Comparison для этого репозитория, без функциональных изменений. ✅

Релизы

Последняя версия: v1.7.2 — полные примечания см. на странице релизов GitHub: Примечания к релизу v1.7.2 →

Все релизы

Страница GitHub Releases — каждая тегнутая версия с примечаниями и загружаемыми файлами

Полная история

CHANGELOG.md — те же примечания, доступные для просмотра в репозитории

Сравнение интеграций

API камер Bosch Smart Home, восстановленный в результате реверс-инжиниринга, доступен через пять родственных проектов. Выберите тот, который подходит для вашей платформы.

Функция

Интеграция Home Assistant

Python CLI-инструмент

Адаптер ioBroker

MCP-сервер

Фронтенд (NiceGUI)

Node-RED

Зрелость

v15.0+ — шкала качества HA Platinum

v10.12+ стабильная (Mini-NVR BETA)

v1.8+ стабильная · npm

v1.7+ стабильная · PyPI

v0.4.0 альфа · PyPI

v0.4.0 альфа · npm

Платформа

Home Assistant (HACS)

Автономный CLI на Python 3.10+

ioBroker (npm)

Python 3.10+ · pipx / uvx · stdio + streamable-HTTP для MCP-клиентов (Claude Desktop, Claude Code, пользовательских)

Веб-приложение NiceGUI · Python 3.10+

Палитра Node-RED · npm

Вход

OAuth2 PKCE (браузер)

OAuth2 PKCE (браузер)

OAuth2 PKCE (браузер)

◑ использует CLI bosch_config.json

◑ использует CLI bosch_config.json

◑ refresh-токен из CLI

Снимки

✅ Встроенный Camera.image

✅ команда snapshot

✅ Файловое хранилище + base64 DP

bosch_camera_snapshot (только LAN)

✅ живой + резервный по событиям

✅ узел snapshot

Живой RTSP-поток (LAN)

✅ через компонент HA Stream

✅ вывод ffmpeg/RTSPS

✅ TLS-прокси → локальный RTSP

bosch_camera_stream_url (только LAN, без облачного ретранслятора)

◑ внутренний (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

✅ URL с Digest-учётными данными + опция привязки к LAN

✅ возвращается URL, передача в ffmpeg / go2rtc ниже по цепочке

stream-url → подключение ниже по цепочке

Режим конфиденциальности

✅ сущность-переключатель

✅ команда

✅ DP

bosch_camera_privacy_set (резервный LAN через prefer_local)

✅ переключатель

✅ узел privacy

Передний прожектор (Gen1/Gen2)

✅ сущность-свет

✅ команда

✅ DP

bosch_camera_light_set (резервный LAN)

(заглушка фазы 2)

✅ узел 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)

Обновление прошивки

✅ сущность обновления + поток исправлений Repairs, кнопка установки (v14.4.10)

✅ статус + установка (v10.11.0)

✅ состояния прошивки + триггер установки, защита от записи (v1.8.0)

✅ статус + инструменты установки (v1.7.0)

◑ отображение статуса только для чтения, без установки

✅ узлы статуса + установки (v0.4.0-alpha)

Поворот изображения на 180°

✅ переключатель

✅ DP

События движения / человека / аудио

✅ FCM push + резервный опрос

◑ только команда watch (команда событий удалена)

✅ FCM push + резервный опрос

bosch_camera_events (извлечение по запросу)

◑ таблица событий только для извлечения

✅ узел event (опрос)

Состояние срабатывания по фронту движения

binary_sensor.motion

н/д

motion_active DP (v0.5.3)

н/д (запрос-ответ, без подписки)

Автоснимок при движении

✅ обновляет сущность Camera

н/д

✅ записывает last_event_image base64 (v0.5.3)

н/д (без фонового цикла)

Синтетический триггер движения (внешний датчик)

✅ сервис

н/д

✅ DP

Зоны движения / маски конфиденциальности

✅ чтение + запись

✅ чтение + запись

✅ чтение + запись (v1.8.0)

✅ get / set / clear (v1.7.0)

(пока нет визуального редактора)

Правила автоматизации / расписания

✅ чтение + запись

✅ чтение + запись

✅ полный CRUD (v1.8.0)

✅ list / add / edit / delete (v1.7.0)

✅ полный CRUD (list/add/edit/delete)

Расписание освещения

✅ чтение (запись через сервис, только Gen1 Eyes Outdoor)

✅ чтение + запись

✅ чтение (только Gen1, v1.2.0)

✅ get / set (v1.7.0)

✅ чтение + запись (уличные камеры Eyes)

Загрузка облачных клипов (история ~30 дней)

✅ через Media Browser

(отложено — пока нет запросов сообщества)

(намеренно не реализовано — большие объёмы данных)

(используйте CLI)

clip_url в полезной нагрузке события

Mini-NVR (локальная запись)

✅ непрерывная + буферизованная по событиям, кольцевой буфер с предзаписью (v11.2.0 BETA → v14.7.0 modes)

◑ мультиплексирование сегментов по событиям, без кольцевого буфера предзаписи (v10.7.0 BETA)

(передаёт внешнему рекордеру через RTSP-конечную точку без учётных данных)

(нет концепции NVR)

◑ только непрерывная, без буферизации по событиям (v0.4.0-alpha)

◑ только непрерывная через узел bosch-camera-nvr-record (v0.4.0-alpha)

Загрузка клипов на SMB / NAS

(v10.7.0 BETA)

Общий доступ к камере (друзья)

✅ сервисы (share / invite / list)

✅ команда

✅ share / invite / remove (только Gen2, v1.8.0)

✅ list / invite / share / unshare / remove (v1.7.0)

✅ list/invite/remove/share/unshare

Панорамирование / наклон (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)

Доставка вебхуков по событиям

✅ сервис + опции по выбору

watch --webhook URL

✅ через MQTT-мост

(модель запрос-ответ)

MQTT-мост событий (движение / аудио / человек)

н/д (встроенная шина событий HA)

н/д (однократный запуск)

✅ настраивается администратором

н/д

Apple HomeKit (через мост HA Core)

✅ задокументировано

н/д

н/д

н/д

н/д

н/д

Планировщик снимков / таймлапс

✅ примеры/ YAML

✅ примеры cron + ffmpeg

✅ пример Blockly

н/д

Встроенная карточка / виджет панели

✅ 2 карточки Lovelace (одиночная + сетка)

н/д

✅ 2 виджета vis-2 — BoschCamera + BoschOverview multi-cam

н/д

(сам является веб-панелью)

Картинка-в-картинке переживает фоновую вкладку

hass-suspend-when-hidden keep-alive (v14.0.0)

н/д (нет интерфейса)

✅ собственный PiP + восстановление после зависания, Web-Worker heartbeat (v1.7.2/v1.7.3)

н/д (нет интерфейса)

✅ reconnect-timeout + восстановление после зависания (v0.4.0-alpha)

н/д (нет интерфейса)

Облачный ретранслятор REMOTE (резервный)

✅ автоматическое переключение при недоступности LAN

✅ удалённый режим

(только LOCAL по дизайну)

(медиа только через LAN; статус/события через облако)

◑ наследует CLI

◑ опция REMOTE (вручную)

Веб-интерфейс администрирования / настройки

✅ HA Config Flow

н/д (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 на бэкенде · интерфейс в основном EN

н/д (только английский)

Легенда: ✅ поддерживается · ❌ не поддерживается / не запланировано · n/a неприменимо для этой платформы.

Все четыре проекта используют одну и ту же исследовательскую базу по обратному проектированию Cloud API и протокола RCP, но развиваются независимо. Интеграция Home Assistant — самая функционально полная эталонная реализация; Python CLI — низкоуровневый / скриптуемый интерфейс; адаптер ioBroker ориентирован на дашборды VIS и автоматизации Blockly; MCP-сервер предоставляет MCP-клиентам (Claude Desktop, Claude Code, кастомным) курируемый набор инструментов, ориентированный в первую очередь на LAN, для управления камерами на естественном языке.


Связанные проекты

Часть семейства из пяти реализаций для камер Bosch Smart Home Cameras (плюс альфа-фронтенд):

Реализация

Репозиторий

Статус

🏆 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 · доставка вебхуков · захват / исследование / автономный

🟢 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 nodes (alpha)

Bosch-Smart-Home-Camera-Tool-NodeRED

v0.4.2-alpha · узлы для событий / снимков / приватности / конфигурации и др.

Также: Bosch Smart Home Camera — Python Frontend (NiceGUI) — v0.4.2-alpha (дашборд + детали камеры + настройки) — приветствуется интерес сообщества

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