Bosch Smart Home Camera MCP Server
Bosch Smart Home Camera — MCP Server
Model Context Protocol (MCP) server, der die Cloud-API der Bosch Smart Home Camera als MCP-Tools bereitstellt. Als Drop-in für Claude Code, Claude Desktop und jeden MCP-kompatiblen Client einsetzbar. Verwendet den bewährten, per Reverse Engineering gewonnenen API-Client des Schwesterprojekts Python CLI tool.
Status: v1.7.2 — Abschluss der Familien-Parität (v1.7.0): Bewegungszonen, Privatsphäre-Masken, Automatisierungsregeln, Kamera-Freigabe/Freunde, Firmware-Installation, Sirenendauer, Beleuchtungszeitplan, Audio-Gegensprechen. Dazu die Bild-/Video-Optimierungs- und Kamera-Lebenszyklus-Runde vom 2026-08-19: Zeitstempel-Overlay, Status-LED, Objektiv-Neigung, Dunkelheitsschwelle, Weißabgleich, Helligkeit der oberen/unteren LED, Soft-/Hard-Reset, Umbenennen. 70 Tools + 3 Ressourcen + 2 Prompts, stdio/SSE/streamable-HTTP, per pipx/uvx installierbar
Inhaltsverzeichnis
Integrationsvergleich — wähle das passende Projekt für deine Plattform
Related MCP server: 米家 MCP Server
Haftungsausschluss
Dieses Projekt ist ein unabhängiges, von der Community entwickeltes Tool. Es ist weder mit der Robert Bosch GmbH, der Bosch Smart Home GmbH noch mit deren Tochtergesellschaften oder verbundenen Unternehmen verbunden, noch wird es von diesen unterstützt, gesponsert oder steht es in irgendeiner offiziellen Verbindung zu ihnen. „Bosch", „Bosch Smart Home" sowie die zugehörigen Namen und Logos sind eingetragene Marken der Robert Bosch GmbH.
Das Tool kommuniziert mit einer per Reverse Engineering gewonnenen, undokumentierten, inoffiziellen API. Bereitgestellt „wie besehen", ohne jegliche Gewährleistung. Die Nutzung erfolgt vollständig auf eigenes Risiko.
Warum ein separater MCP-Server?
Die Schwesterprojekte zielen auf unterschiedliche Laufzeitumgebungen ab:
Projekt | Version | Laufzeitumgebung | Benutzeroberfläche |
v16.0.1 | Home Assistant | UI-Entitäten, Lovelace-Karte, Automatisierungen | |
v10.12.3 | Terminal |
| |
v1.8.3 | ioBroker | Datenpunkte, VIS-2-Widgets (BoschCamera + BoschOverview), JSON-Config-Admin-UI | |
v0.4.2-alpha | Node-RED | Flow-Knoten für Automatisierungspipelines | |
v0.4.2-alpha | eigenständige Web-App | Dashboard + Kamera-Detail + Einstellungen-UI | |
MCP Server (dieses Repository) | v1.7.1 | Claude-Clients | MCP-Tools, die von LLMs aufgerufen werden können |
LLM-Anwendungsfälle, die die bestehenden Schwesterprojekte nicht abdecken:
„Mach einen Schnappschuss von der Gartenkamera und beschreibe, was du siehst."
„Was war das letzte Bewegungsereignis auf der Terrasse, und um welche Uhrzeit?"
„Aktiviere den Privatsphäre-Modus an der Innenkamera bis 22:00 Uhr und deaktiviere ihn danach."
„Schwenke die 360°-Kamera nach links und mach einen Schnappschuss."
„Fasse die heutigen Bewegungsereignisse über alle Kameras hinweg zusammen."
Diese Abläufe erfordern ein LLM im Loop — genau dafür ist MCP gedacht.
Architektur
┌─────────────────────────┐ 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) │
└─────────────────────────┘Der MCP-Server ist ein dünner Wrapper um die API-Schicht der Python-CLI. Er implementiert OAuth, Token-Erneuerung, FCM-Push, RTSP und RCP nicht neu — er importiert sie.
Dies ist eine echte Laufzeitabhängigkeit, keine reine Dokumentationsreferenz. Der Server findet bosch_camera.py beim Prozessstart über sys.path-Injektion (adapters/cli_bridge.py) und nicht über eine normale pip install-Abhängigkeit — das Repo des Schwesterprojekts Python CLI tool muss auf der Festplatte ausgecheckt sein, und der MCP-Server muss wissen, wo. Auflösungsreihenfolge: die Umgebungsvariable BOSCH_CAMERA_CLI_PATH, sofern gesetzt, andernfalls ein fester Standardpfad, der in der eigenen Umgebung des Maintainers verwendet wird (nicht portabel — überschreiben). Nahezu jeder Tool-Aufruf importiert bosch_camera zur Aufrufzeit aus diesem Pfad (ensure_cli_importable()), sodass ein fehlender oder falscher Pfad beim ersten Tool-Aufruf als ImportError auftritt und nicht beim Serverstart. In der Praxis: Klone beide Repos und setze dann entweder BOSCH_CAMERA_CLI_PATH=/path/to/Bosch-Smart-Home-Camera-Tool-Python in der Umgebung, in der der MCP-Server läuft, oder bearbeite DEFAULT_CLI_PATH in adapters/cli_bridge.py für eine dauerhafte lokale Installation. Die bosch_config.json, die das CLI-Tool über bosch_camera login erzeugt, ist dieselbe Datei, die dieser Server für die Anmeldedaten liest — siehe Auth-Modell.
LAN-Fallback-Tool-Routing
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-Tool-Ablauf
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-Tools (insgesamt 70, v1.7.2)
Tool | Beschreibung | Rückgabe |
| Alle konfigurierten Kameras auflisten | Array von |
| Online-/Offline- und Datenschutzstatus einer Kamera abrufen |
|
| Nur-LAN-JPEG-Aufnahme (keine Cloud) — HTTP Digest an Kamera-IP |
|
| Nur-LAN-RTSPS-Stream-URL (keine Cloud-Weiterleitung) — nutzbar mit ffmpeg/VLC/go2rtc |
|
| Letzte Bewegungs-/Personen-/Audio-Ereignisse auflisten | Array von |
| Datenschutzmodus ein-/ausschalten; |
|
| Scheinwerfer ein-/ausschalten; |
|
| Die 360°-Kamera schwenken (nur Gen1 CAMERA_360); |
|
| Push-Benachrichtigungen umschalten |
|
| Kamera per TCP auf LAN-Port 443 prüfen (1.5 s Timeout) |
|
| Aktuelle Cloud-Wartungsankündigung aus dem Community-RSS-Feed abrufen |
|
| Mikrofonpegel, Lautsprecherpegel und Intercom-Flag abrufen (nur Gen2) |
|
| Mikrofonpegel und/oder Lautsprecherpegel einstellen (0-100) (nur Gen2) |
|
| Konfiguration der Eindringungserkennung abrufen: Modus, Empfindlichkeit 0-7, Entfernung 1-8 m (nur Gen2) |
|
| Modus/Empfindlichkeit/Entfernung der Eindringungserkennung aktualisieren (nur Gen2) |
|
| Konfiguration der Geräuscherkennung für Glasbruch und Rauch-/Feueralarm abrufen (nur Gen2 Audio-Plus) |
|
| Geräuscherkennung für Glasbruch und/oder Feueralarm aktualisieren (nur Gen2 Audio-Plus) |
|
| WiFi-RSSI, SSID und abgeleitete Signalqualität 0-100 % abrufen |
|
| Direkter MJPEG-Schnappschuss über LAN per RTSP inst=3 (nur Gen2, ffmpeg, kein Cloud-Roundtrip) |
|
| ONVIF-Geräte-Scopes aus Kamera-LAN-RCP 0x0a98 lesen (nur Gen2) |
|
| RCP-Bibliotheksversion aus Kamera-LAN-Opcodes 0xff00 + 0xff04 lesen |
|
| Bosch-Cloud-Feature-Flags auf Kontenebene abrufen (kein Kamera-Parameter) |
|
| Die Innensirene auslösen (nur Gen2 Indoor II); |
|
| Aktivierungsstatus der Bewegungserkennung und Empfindlichkeit abrufen |
|
| Aktivierung der Bewegungserkennung und/oder Empfindlichkeit einstellen |
|
| Toneinstellung für Cloud-Aufnahmen abrufen |
|
| Ton für Cloud-Aufnahmen einstellen |
|
| Status der 360°-Autoverfolgung abrufen (nur Gen1 Indoor) |
|
| 360°-Autoverfolgung einstellen (nur Gen1 Indoor) |
|
| Status des akustischen Datenschutz-Signaltons abrufen |
|
| Akustischen Datenschutz-Signalton ein-/ausschalten |
|
| Anzahl ungelesener Ereignisse einer Kamera abrufen |
|
| Gesundheitsübersicht für alle Kameras (Status + WiFi + Datenschutz + letztes Ereignis + ungelesen) | Array von Dicts pro Kamera |
| Lokales JWT-Parsing – liefert Gültigkeit, Ablaufzeit, E-Mail (kein Netzwerkaufruf) |
|
| Rechtecke der Bewegungserkennungszonen auflisten (normalisiert 0.0-1.0) | Array von |
| Alle Bewegungszonen ersetzen (vollständiges Ersetzen, kein Zusammenführen) | Array von |
| Alle Bewegungszonen entfernen |
|
| Rechtecke der Datenschutzmasken-Zonen auflisten (normalisiert 0.0-1.0) | Array von |
| Alle Datenschutzmasken ersetzen (vollständiges Ersetzen, kein Zusammenführen) | Array von |
| Alle Datenschutzmasken entfernen |
|
| Automatisierungsregeln (Zeitpläne) für eine Kamera auflisten | Array von |
| Eine neue Zeitplanregel erstellen |
|
| Eine vorhandene Regel aktualisieren (partielle Aktualisierung) |
|
| Eine Regel löschen |
|
| Freunde/Einladungen für die Kamerafreigabe auflisten (auf Kontenebene) | Array von |
| Einen Freund per E-Mail einladen (auf Kontenebene) |
|
| Eine Kamera mit einem vorhandenen Freund teilen (wird mit dessen vorhandenen Freigaben zusammengeführt) |
|
| Alle Kamerafreigaben von einem Freund widerrufen |
|
| Einen Freund vollständig entfernen |
|
| Aktuelle/neueste Firmware-Version und Update-Verfügbarkeit abrufen |
|
| Ausstehendes Firmware-Update installieren (Kamera startet in 3-7 Minuten neu) |
|
| Sirenen-Alarmdauer einstellen, 10-300 s (nur Gen2 Indoor II) |
|
| LED-Beleuchtungszeitplan abrufen (Eyes-Außenkameras) |
|
| LED-Beleuchtungszeitplan aktualisieren (Eyes-Außenkameras) |
|
| Eine Audio-Sitzung zum Zuhören öffnen (Kamera-Mikrofon → Anrufer); gibt eine RTSPS-URL zurück, nur Zuhören |
|
| Abrufen, ob eine Datums-/Zeit-Einblendung in das Video eingebrannt ist |
|
| Datums-/Zeit-Einblendung im Video ein-/ausschalten |
|
| Ein-/Aus-Zustand der Status-LED der Kamera abrufen (nur Gen2) |
|
| Status-LED der Kamera ein-/ausschalten (nur Gen2) |
|
| Montagehöhe des Objektivs in Metern abrufen (nur Gen2) |
|
| Montagehöhe des Objektivs einstellen, 0.5-5.0 m (nur Gen2) |
|
| Tages-/Nacht-Beleuchtungsschwelle und Fading-Modus abrufen (nur Gen2) |
|
| Tages-/Nacht-Beleuchtungsschwelle und/oder Fading-Modus einstellen (nur Gen2) |
|
| Weißabgleich des Frontlichts abrufen, -1.0 kalt .. 1.0 warm (nur Gen2) |
|
| Weißabgleich des Frontlichts einstellen (nur Gen2) |
|
| Helligkeit der oberen oder unteren LED abrufen (0-100 %) (nur Gen2) |
|
| Helligkeit der oberen oder unteren LED einstellen (0-100 %) (nur Gen2) |
|
| Eine Kamera neu starten (Soft-Reset) |
|
| Kamera auf Werkseinstellungen zurücksetzen – DESTRUKTIV, entkoppelt die Kamera; erfordert |
|
| Eine Kamera über die Cloud-API umbenennen |
|
Tools, die absichtlich NICHT für LLMs offengelegt werden (schreib-/risikobehaftet / zeitaufwendig):
Token-Refresh (wird vom zugrunde liegenden Client stillschweigend durchgeführt)
Cloud-Clip-Download (große Datenmengen)
Zwei-Wege-Sprechen (Mikrofon des Anrufers → Lautsprecher der Kamera): von der Bosch-Cloud-API überhaupt nicht bereitgestellt (gleiche Einschränkung wie die Schwester-CLI) —
bosch_camera_intercom_openist nur zum Zuhören (listen-only)
Aus der HA-Integration übernommen, aber bewusst NICHT hinzugefügt (Architektur-Konflikt — siehe Audit in docs/family-parity-plan.md vom 2026-08-19 für die vollständige Begründung):
open_live_connection(explizites Öffnen/Halten einer Sitzung) — MCP-Tools sind einmalige Anfrage-/Antwort-Aufrufe ohne dauerhaften Hintergrundprozess, der eine Sitzung zwischen Aufrufen offenhalten könnte;bosch_camera_stream_urlerzeugt bereits pro Aufruf eine frische, sofort nutzbare URL, was das MCP-gerechte Äquivalent ist.Frigate/externer RTSP-„front door“ (dauerhafter RTSP-Server ohne Zugangsdaten) — aus demselben Grund: er erfordert einen langlebigen Serverprozess, der dieser zustandslosen Tool-Oberfläche fehlt.
delete_event/send_event_webhook— beide arbeiten mit HAs eigenem lokalem Event-Datei-Cache auf der Festplatte und derwebhook_url/enable_webhook_delivery-Konfiguration, Infrastruktur, über die dieses Tool nicht verfügt (Ereignisse werden hier bei Bedarf aus der Bosch-Cloud abgerufen und nie lokal gespeichert).Rücklesen des AI-Alert-Verlaufs — HAs
ai_alert_store.pyliest aus Dateien relativ zuhass.config.pathin HAs eigenem Speicherlayout; eine Kopplung daran wäre fragil und nicht klar nützlich, wenn der MCP-Client selbst typischerweise das LLM ist, das die Analyse durchführt.Die Selects
video_quality/stream_modeundimage_rotation_180— alle drei sind in HA reine Client-seitige Einstellungen (überhaupt kein Bosch-Cloud-API-Aufruf: Qualität wählt den RTSPS-inst=-Parameter, stream_mode wählt LOCAL vs. REMOTE, Rotation ist eine reine Anzeige-Transformation per CSS/PIL) und es gibt hier keinen persistenten Zustand pro Sitzung, an den sie angehängt werden könnten.pan_presetist bereits abgedeckt —bosch_camera_pan(preset=...)ist seit v1.x verfügbar.
Zuverlässigkeit — transparente Zugangsdatenrotation
Der LAN-RCP-Schreibpfad mit prefer_local=True (bosch_camera_privacy_set, bosch_camera_light_set) wiederholt bei HTTP 401 automatisch einmal, nachdem frische Digest-Zugangsdaten aus bosch_config.json abgerufen wurden. Keine benutzersichtbare API-Änderung — der Wiederholungsversuch läuft still ab und das Tool-Ergebnis ist identisch, egal ob eine Rotation nötig war oder nicht. Dadurch werden Kaltstart-Fehler beseitigt, wenn das zwischengespeicherte Digest-Nonce abgelaufen ist. bosch_camera_pan akzeptiert derzeit keinen prefer_local-Parameter — der Schwenk läuft immer über die Bosch-Cloud.
MCP-Ressourcen
Ressourcen-URI | Beschreibung |
| JSON-Liste aller Kameras (id, name, model, status, firmware, mac, description) |
| Neuestes zwischengespeichertes JPEG oder frische Aufnahme, wenn der Cache leer ist |
| Die letzten 50 Ereignisse (Bewegung, Person, Audio) als JSON-Liste |
bosch://cameras ist eine statische Ressource. Die {name}-Varianten sind Ressourcen-Templates.
MCP-Prompts
Prompt | Argumente | Beschreibung |
|
| Mehrstufiger Bericht: Ereignisse pro Kamera, Verteilung nach Typ, zeitliche Verteilung, Anomalie-Highlights |
| (keine) | Schnappschuss von jeder Kamera erstellen, Szene beschreiben, Anomalien markieren, Indoor-Datenschutzmodus empfehlen |
Datenschutz-Haltung — Medienoperationen nur über LAN
Schnappschüsse und Stream-URLs gehen direkt vom MCP-Host über das LAN an die Kamera — ohne Bosch-Cloud-Relay. Die übrigen Tools (status, events, privacy/light/pan/notifications) nutzen weiterhin die Cloud, weil für diese Endpunkte derzeit keine lokale API bereitgestellt ist.
Tool | Pfad |
| Nur LAN — HTTP Digest an Kamera-IP |
| Nur LAN — RTSPS über lokalen Bosch-TLS-Proxy |
| Nur LAN — TCP-Verbindung zu Kamera-Port 443 |
| Bosch-Cloud (noch keine lokale API) |
| Bosch-Cloud |
| Zuerst LAN-RCP, Cloud-Fallback — nur Gen2 |
| Bosch-Cloud (noch keine lokale API) |
Der MCP-Host muss sich für die Funktion der Medien-Tools im selben Netzwerk wie die Kameras befinden. Ist das nicht der Fall, melden die Snapshot-/Stream-Tools local_unavailable, anstatt auf die Cloud zurückzugreifen — konstruktionsbedingt.
Auth-Modell
Der Server arbeitet mit der bereits vorhandenen bosch_config.json des Nutzers vom Schwester-Python-CLI-Tool — kein separater OAuth-Ablauf, keine von diesem Repo gespeicherten Zugangsdaten. Erzeugen Sie sie einmal über bosch_camera login der CLI (browserbasiertes OAuth2-PKCE) und richten Sie dann den MCP-Server darauf aus:
--config <path>/ UmgebungsvariableBOSCH_CAMERA_CONFIG=<path>: expliziter Pfad zubosch_config.json.Wenn keines von beiden gesetzt ist, fällt die Bridge auf das zurück, was die Standardauflösung von
get_session_and_cameras()neben dem Checkout der Schwester-CLI findet (siehe Architektur — der Speicherort der Schwester-CLI wird selbst überBOSCH_CAMERA_CLI_PATHoder einen festen Standardpfad aufgelöst).
Der MCP-Server liest oder schreibt niemals Zugangsdaten über das hinaus, was das CLI-Tool bereits tut (Token-Refresh bei 401, atomares Speichern) — er ruft über den cli_bridge-Import direkt den eigenen Sitzungs-/Konfigurationscode der CLI auf.
Transportmodi
Über das --transport-Flag werden drei Transportmodi unterstützt:
Modus | Flag | Anwendungsfall |
|
| Claude Code / Claude Desktop — lokaler Subprozess |
|
| Remote-/Multi-Client-Bereitstellungen über HTTP |
|
| Legacy-SSE-Clients |
HTTP- und SSE-Modi binden standardmäßig an 127.0.0.1:8765 (aus Sicherheitsgründen nur lokal).
Übergeben Sie --http-host 0.0.0.0 nur in vertrauenswürdigen, durch Firewalls geschützten Netzwerkumgebungen.
# 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 8765Tech-Stack
Python 3.10+
mcp— offizielles MCP-Python-SDKpydantic(bereits eine transitive Abhängigkeit vonmcp) für Tool-SchemasWiederverwendung:
bosch_camera.pyaus dem Repo der Schwester-CLI, zur Laufzeit übersys.path-Injection lokalisiert (BOSCH_CAMERA_CLI_PATH-Umgebungsvariable oder ein konfigurierbarer Standardwert) — keine perpipinstallierte Abhängigkeit, siehe Architektur
Installation
# 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]Maintainer: Die PyPI-Veröffentlichung ist automatisiert — das Pushen eines
v*.*.*-Tags löst den publish-pypi-Workflow über OIDC Trusted Publisher aus. Führen Sietwine uploadnicht manuell aus.
Zu Claude Code hinzufügen — stdio (lokal, empfohlen)
claude mcp add bosch-camera -- bosch-smart-home-camera-mcp \
--config ~/.config/bosch-camera/bosch_config.jsonZu Claude Code hinzufügen — streamable-HTTP (Remote-Server)
# 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/mcpZu Claude Desktop hinzufügen
Fügen Sie Folgendes zu Ihrer claude_desktop_config.json hinzu (normalerweise ~/Library/Application Support/Claude/claude_desktop_config.json unter macOS oder %APPDATA%\Claude\claude_desktop_config.json unter Windows):
{
"mcpServers": {
"bosch-camera": {
"command": "bosch-smart-home-camera-mcp",
"args": [
"--config",
"/path/to/bosch_config.json"
]
}
}
}Ersetzen Sie /path/to/bosch_config.json durch den tatsächlichen Pfad zu Ihrer bosch_config.json (vom Schwester-Python-CLI-Tool über bosch_camera login erzeugt). Der Server läuft als lokaler stdio-Subprozess — für Claude Desktop wird kein Netzwerkport benötigt.
Repo-Struktur
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
└── .gitignoreVersionsverlauf
v0.1.0 — Konzeptdokument + Skeleton-Server, alle Tools definiert, aber noch nicht implementiert (gibt
NotImplementedErrorzurück) ✅v0.2.0 — alle 8 Tools angebunden: Lese-Tools (list, status, events, snapshot) + Schreib-Tools (privacy, light, pan, notifications) per sys.path-Injektion (Option C) ✅
v0.4.0 — Ressourcen (
bosch://cameras,bosch://cameras/{name}/snapshot.jpg,bosch://cameras/{name}/events) + Prompts (daily-camera-summary,pre-leave-check) ✅v0.5.0 — streamable-HTTP-Transport (
--transport http|sse|stdio), Paketierung fürpipx/uvx, 24 neue Tests ✅v1.0.0 — erste stabile Version: 106 Tests, Wheel + sdist auf GitHub Releases veröffentlicht, PyPI-Veröffentlichung ausstehend ✅
v1.1.0 — Nur-LAN-Medienpfad (Privatsphäre-Härtung):
bosch_camera_snapshotund das neuebosch_camera_stream_urlgehen direkt über LAN zur Kamera, kein Bosch-Cloud-Relay für Medien. 113 Tests. ✅v1.2.0 —
bosch_camera_maintenance_status-Tool: ruft Cloud-Wartungsankündigungen aus Community-RSS-Feeds ab; gibt Zustand (active/scheduled/past/recent/unknown/idle), Titel, Zeitfenster und Link zurück. ✅v1.3.0 — LAN-Fallback-Funktionsumfang (portiert aus HA-Integration v12.4.10/v12.4.11):
bosch_camera_lan_ping-Tool (TCP-Probe für jede Kamera im LAN);prefer_local=Truebeibosch_camera_privacy_set/bosch_camera_light_set(RCP-LAN-Schreibpfad, Gen2, Cloud-Fallback bei Fehler);recommended_action-Feld beibosch_camera_maintenance_status("check_lan"bei active,"wait"bei scheduled). 173 Tests. ✅v1.3.3 — Audio Get/Set, Einbrucherkennung Get/Set, WLAN-Info (Portierung aus HA v12.7.0). 16 Tools. ✅
v1.3.4 — benannte PTZ-Voreinstellungen (
bosch_camera_pan preset=akzeptierthome / left / right / back-left / back-right); transparente Anmeldedaten-Rotation bei 401 für LAN-RCP-Tools (stiller Wiederholungsversuch, keine API-Änderung). ✅v1.3.6 — 9 Fehlerkorrekturen aus dem Live-Audit 2026-05-24 (Kamera-Liste immer live aus der Cloud, Gen1/Gen2 hw_version, UUID-Auflösung, Event-Feldzuordnung, Audio camelCase, Einbrucherkennung Gen2-Gate, Fehlercodes, Snapshot-Zeitstempel, requirements-test.txt-Mirror). ✅
v1.4.0 — 4 neue Tools:
bosch_camera_mjpeg_snapshot,bosch_camera_onvif_scopes,bosch_camera_rcp_version,bosch_camera_feature_flags._fetch_rcp_lan-Async-Helper. Insgesamt 20 Tools. ✅v1.5.0 — 11 neue Tools + 8 Fehlerkorrekturen aus dem Live-Kamera-Audit (4 Hardware-Geräte, alle 4 Generationen): Sirenen-Auslösung, Bewegung Get/Set, Aufnahme Get/Set, Autofollow Get/Set, Privacy-Sound Get/Set, Unread-Count, Health-Check-All, Token-Status. ✅
v1.5.1 —
_fetch_rcp_lankorrigiert (verwendete ein nicht existierendesaiohttp.DigestAuth→onvif_scopes/rcp_versionschlugen über LAN immer fehl; jetzthttpx.DigestAuth). Testabdeckung 83→98 %, Fixtures bereinigt, CI auf Node-24-native Action-Major-Versionen angehoben. ✅v1.5.2 — Abhängigkeits-Hygiene: nicht verwendete
aiohttp-Laufzeitabhängigkeit entfernt (jetzt nur noch Test),pyjwt>=2.13.0/starlette>=1.0.1als Sicherheitsuntergrenzen hinzugefügt (pip-auditsauber), einen Test korrigiert, der den falschen HTTP-Stack mockte. ✅v1.5.3 — Sicherheitspatch: Bosch-Cloud-CA für die MCP-Cloud-Sitzung festgepinnt (CWE-295, GHSA-6qh5-x5m5-vj6v); schließt MITM über angrenzende Netzwerke bei OAuth-Tokens. Lokales TOFU-Pinning unverändert. ✅
v1.5.4 — Ereignis-Zeitstempel verlieren nicht mehr den Zeitzonen-Offset:
/v11/eventsliefert Zeitstempel mit Offset (z. B.+02:00[Europe/Berlin]); der Server entfernt jetzt nur das nachgestellte[zone]-Suffix, anstatt auf 19 Zeichen zu kürzen, und bewahrt so den expliziten UTC-Offset. ✅v1.5.5 — Die
camera_events-Ressource verwendet jetzteventType + eventTagsfür eine korrekte Ereignisklassifizierung. ✅v1.6.0 — 2 neue Tools:
bosch_camera_audio_detection_get/bosch_camera_audio_detection_set— Glasbruch- und Rauch-/Feueralarm-Tonerkennung für Gen2-Audio-Plus-Kameras (portiert aus HA-Integration v14.2.0). Insgesamt 34 Tools. ✅v1.7.0 — Abschluss der Familien-Parität (
docs/family-parity-plan.md§2b): 21 neue Tools schließen die Funktionslücke zwischen MCP und HA/CLI — Bewegungszonen Get/Set/Clear, Privacy-Masken Get/Set/Clear, Automationsregeln List/Add/Edit/Delete, Kamera-Freigabe/Freundesliste/Einladen/Teilen/Freigabe aufheben/Entfernen, Firmware-Status/Installation (entspricht derasync_install_firmware-Absicherung aus HA), Sirenen-Dauer, LED-Beleuchtungszeitplan Get/Set und ein Audio-Listen-Intercom-Tool (Kamera-Mikrofon → Anrufer, RTSPS-URL; Gegensprechen wird von der Bosch-Cloud-API überhaupt nicht bereitgestellt, dieselbe Einschränkung wie beim Schwester-CLI). CI-Härtung: Coverage-Gate (--cov-fail-under=96),pip-audit(nur Laufzeitabhängigkeiten),pylint,codespell, CodeQL, Gitleaks-Secret-Scan und ein Dependency-Review-Workflow — Parität auf Gold-Niveau mit den Qualitäts-Gates der HA-Integration. Insgesamt 55 Tools. ✅v1.7.2 — Nur Dokumentation: Login-Zeile dieses Repos in der Integrationsvergleich-Tabelle korrigiert, keine funktionalen Änderungen. ✅
Releases
Neueste Version: v1.7.2 — vollständige Hinweise auf der GitHub-Release-Seite: v1.7.2 Versionshinweise →
Alle Releases | GitHub-Releases-Seite — jede getaggte Version mit Hinweisen + herunterladbaren Assets |
Gesamte Historie |
|
Integrationsvergleich
Die reverse-engineerte API der Bosch Smart Home Camera wird über fünf Schwesterprojekte bereitgestellt. Wähle dasjenige, das zu deiner Plattform passt.
Funktion | ||||||
Reifegrad | v15.0+ — HA-Qualitätsskala Platin | v10.12+ stabil (Mini-NVR BETA) | v1.8+ stabil · npm | v1.7+ stabil · PyPI | v0.4.0 alpha · PyPI | v0.4.0 alpha · npm |
Plattform | Home Assistant (HACS) | Eigenständige Python-3.10+-CLI | ioBroker (npm) | Python 3.10+ · pipx / uvx · stdio + streamable-HTTP für MCP-Clients (Claude Desktop, Claude Code, benutzerdefinierte) | NiceGUI-Web-App · Python 3.10+ | Node-RED-Palette · npm |
Anmeldung | OAuth2 PKCE (Browser) | OAuth2 PKCE (Browser) | OAuth2 PKCE (Browser) | ◑ teilt | ◑ teilt | ◑ Refresh-Token von der CLI |
Schnappschüsse | ✅ Natives | ✅ | ✅ Datei-Store + base64-DP | ✅ | ✅ Live + Ereignis-Fallback | ✅ |
Live-RTSP-Stream (LAN) | ✅ über HA-Stream-Komponente | ✅ ffmpeg/RTSPS-Ausgabe | ✅ TLS-Proxy → lokales RTSP | ✅ | ◑ intern (go2rtc) | ◑ |
WebRTC (Subsekunden-Latenz) | ✅ über integriertes go2rtc | ✅ (v10.6.0) | ❌ | ❌ | ✅ über go2rtc (sonst Schnappschuss) | ❌ |
Dual-Stream-URL (Haupt- + Sub-Stream) | ✅ | ✅ | ✅ | ◑ | ❌ (nur Sub-Stream) | ◑ nur URL — keine Sub-Option |
Externer Recorder (BlueIris, Frigate) | ✅ über go2rtc | ✅ stdout-Pipe | ✅ Digest-Zugangsdaten-URL + LAN-Bind-Option | ✅ URL wird zurückgegeben, Übergabe an ffmpeg / go2rtc nachgelagert | ❌ | ◑ |
Privatsphäre-Modus | ✅ Schalter-Entität | ✅ Befehl | ✅ DP | ✅ | ✅ Umschalter | ✅ |
Front-Scheinwerfer (Gen1/Gen2) | ✅ Licht-Entität | ✅ Befehl | ✅ DP | ✅ | ❌ (Phase-2-Platzhalter) | ✅ |
RGB-Wallwasher (Gen2 Outdoor II) | ✅ Licht mit RGB | ◑ nur ein/aus — kein RGB | ✅ Farb- + Helligkeits-DPs | ❌ (nur ein/aus — RGB nicht verfügbar) | ❌ | ◑ nur ein/aus + Intensität — kein RGB (v0.3.0-alpha) |
Panikalarm-Sirene | ✅ Taster-Entität (Gen2 Indoor II) | ✅ Befehl (nur Gen2 Indoor II) | ✅ DP | ✅ | ✅ Auslösen + Dauer (nur Gen2 Indoor II) | ❌ |
Firmware-Update | ✅ Update-Entität + Repairs-Fix-Flow, Installations-Schaltfläche (v14.4.10) | ✅ Status + Installation (v10.11.0) | ✅ Firmware-Status + Installations-Trigger, Schreibsperre-Schutz (v1.8.0) | ✅ Status- + Installations-Tools (v1.7.0) | ◑ schreibgeschützte Statusanzeige, keine Installationsaktion | ✅ Status- + Installations-Knoten (v0.4.0-alpha) |
Bildrotation 180° | ✅ Schalter | ❌ | ✅ DP | ❌ | ❌ | ❌ |
Bewegungs- / Personen- / Audio-Ereignisse | ✅ FCM-Push + Polling-Fallback | ◑ nur | ✅ FCM-Push + Polling-Fallback | ✅ | ◑ Nur-Pull-Ereignistabelle | ✅ |
Bewegungsstatus (flankengetriggert) | ✅ | n/a | ✅ | n/a (Anfrage-Antwort, kein Abonnement) | ❌ | ❌ |
Automatischer Schnappschuss bei Bewegung | ✅ aktualisiert die Kamera-Entität | n/a | ✅ schreibt | n/a (keine Hintergrundschleife) | ❌ | ❌ |
Synthetischer Bewegungstrigger (externer Sensor) | ✅ Dienst | n/a | ✅ DP | ❌ | ❌ | ❌ |
Bewegungszonen / Datenschutzmasken | ✅ lesen + schreiben | ✅ lesen + schreiben | ✅ lesen + schreiben (v1.8.0) | ✅ abrufen / setzen / löschen (v1.7.0) | ❌ (noch kein visueller Editor) | ❌ |
Automatisierungsregeln / Zeitpläne | ✅ lesen + schreiben | ✅ lesen + schreiben | ✅ vollständiges CRUD (v1.8.0) | ✅ auflisten / hinzufügen / bearbeiten / löschen (v1.7.0) | ✅ vollständiges CRUD (auflisten/hinzufügen/bearbeiten/löschen) | ❌ |
Beleuchtungszeitplan | ✅ lesen (schreiben über Dienst, nur Gen1 Eyes Outdoor) | ✅ lesen + schreiben | ✅ lesen (nur Gen1, v1.2.0) | ✅ abrufen / setzen (v1.7.0) | ✅ lesen + schreiben (Outdoor-Eyes-Kameras) | ❌ |
Cloud-Clip-Download (Verlauf ~30 Tage) | ✅ über Medien-Browser | ❌ | ❌ (zurückgestellt — noch keine Community-Anfrage) | ❌ (bewusst nicht verfügbar — große Datenmengen) | ❌ (CLI verwenden) | ◑ |
Mini-NVR (lokale Aufnahme) | ✅ kontinuierlich + ereignisgepuffert, Ringpuffer-Vorlauf (v11.2.0 BETA → v14.7.0-Modi) | ◑ ereignisgesteuertes Segment-Muxing, kein Vorlauf-Ring (v10.7.0 BETA) | ❌ (delegiert an externen Recorder über RTSP-Endpunkt ohne Anmeldedaten) | ❌ (kein NVR-Konzept) | ◑ nur kontinuierlich, nicht ereignisgepuffert (v0.4.0-alpha) | ◑ nur kontinuierlich über |
SMB-/NAS-Clip-Upload | ✅ | ✅ (v10.7.0 BETA) | ❌ | ❌ | ❌ | ❌ |
Kamera-Freigabe (Freunde) | ✅ Dienste (Freigeben / Einladen / Auflisten) | ✅ Befehl | ✅ Freigeben / Einladen / Entfernen (nur Gen2, v1.8.0) | ✅ auflisten / einladen / freigeben / Freigabe aufheben / entfernen (v1.7.0) | ✅ auflisten/einladen/entfernen/freigeben/Freigabe aufheben | ❌ |
Schwenken / Neigen (360° Gen1) | ✅ Dienste | ✅ Befehl | ✅ | ✅ | ✅ Schieberegler mit Live-API verbunden | ❌ |
Benannte Schwenk-Presets (Zuhause / links / rechts / hinten-links / hinten-rechts) | ✅ Opt-in-Auswahl-Entität | ✅ | ✅ | ✅ | ❌ | ❌ |
Zwei-Wege-Audio / Gegensprechanlage | ❌ | ✅ Befehl | ❌ | ◑ Nur-Zuhören | ❌ | ❌ |
Webhook-Zustellung bei Ereignissen | ✅ Dienst + Opt-in-Optionen | ✅ | ✅ über MQTT-Brücke | ❌ (Anfrage-Antwort-Modell) | ❌ | ❌ |
MQTT-Ereignisbrücke (Bewegung / Audio / Person) | n/a (nativ über HA-Ereignisbus) | n/a (Einzelausführung) | ✅ Admin-Konfiguration | n/a | ❌ | ❌ |
Apple HomeKit (über HA-Core-Brücke) | ✅ dokumentiert | n/a | n/a | n/a | n/a | n/a |
Schnappschuss-Planer / Zeitraffer | ✅ examples/ YAML | ✅ cron- + ffmpeg-Beispiele | ✅ Blockly-Beispiel | n/a | ❌ | ❌ |
Native Dashboard-Karte / Widget | ✅ 2 Lovelace-Karten (einzeln + Raster) | n/a | ✅ 2 vis-2-Widgets — BoschCamera + BoschOverview Multi-Kamera | n/a | ✅ (ist selbst ein Web-Dashboard) | ❌ |
Bild-im-Bild übersteht Tab im Hintergrund | ✅ | n/a (keine UI) | ✅ eigenes PiP + Freeze-Wiederherstellung, Web-Worker-Heartbeat (v1.7.2/v1.7.3) | n/a (keine UI) | ✅ Reconnect-Timeout + Freeze-Wiederherstellung (v0.4.0-alpha) | n/a (keine UI) |
Cloud-Relay-REMOTE-Fallback | ✅ automatische Umschaltung, wenn LAN nicht erreichbar | ✅ Remote-Modus | ❌ (konzeptionell nur LOCAL) | ❌ (Medien nur LAN; Status/Ereignisse über Cloud) | ◑ erbt von der CLI | ◑ REMOTE-Option (manuell) |
Browserbasierte Admin-/Konfigurations-UI | ✅ HA-Config-Flow | n/a (CLI) | ✅ JSON-Konfigurations-Tabs | n/a (LLM-vermittelt; Konfiguration über CLI / MCP-Client) | ✅ Einstellungsseite | ◑ Editor-Konfigurationsknoten |
UI-Sprachen | 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 | n/a (keine UI — das LLM ist das Frontend) | ◑ Backend-i18n · UI überwiegend EN | n/a (nur Englisch) |
Legende: ✅ unterstützt · ❌ nicht unterstützt / nicht geplant · n/a nicht zutreffend für diese Plattform.
Alle vier Projekte teilen sich dieselbe reverse-engineerte Cloud-API- und RCP-Protokoll-Forschung, entwickeln sich aber unabhängig voneinander. Die Home-Assistant-Integration ist die funktionsreichste Referenzimplementierung; die Python-CLI ist die niedrigste / scriptbare Oberfläche; der ioBroker-Adapter zielt auf VIS-Dashboards und Blockly-Automationen; der MCP-Server bietet MCP-Clients (Claude Desktop, Claude Code, benutzerdefiniert) eine kuratierte, LAN-first Tool-Oberfläche für die Steuerung von Kameras in natürlicher Sprache.
Verwandte Projekte
Teil einer Familie von fünf Implementierungen für Bosch Smart Home Cameras (plus ein Alpha-Frontend):
Implementierung | Repo | Status |
🏆 Home Assistant Integration | v16.0.1 · HA Quality Scale Platinum · produktionsreif | |
🐍 Python CLI | v10.12.3 · Mini-NVR + SMB-Upload (BETA) · LAN-Fallback (ping / --local) · PTZ-Voreinstellungen · Webhook-Zustellung · Aufnahme / Forschung / eigenständig | |
🟢 ioBroker Adapter | v1.8.3 · stabil · npm · privacy-toggle Digest-Rotation · MQTT-Brücke · PTZ-Voreinstellungen · VIS-2-Widgets (BoschCamera + BoschOverview) | |
🤖 MCP Server (dieses Repo) | v1.7.2 · cred-rotation · PTZ-Voreinstellungen · TOFU-Zertifikats-Pinning · cloud CA gepinnt (CWE-295) · LAN-ping + prefer_local · Zonen/Masken/Regeln/Freunde/Firmware-Installation · Claude Code / Claude Desktop-Integration | |
🔴 Node-RED nodes (alpha) | v0.4.2-alpha · Knoten für Ereignis / Schnappschuss / Datenschutz / Konfiguration / mehr |
Außerdem: Bosch Smart Home Camera — Python Frontend (NiceGUI) — v0.4.2-alpha (Dashboard + Kameradetails + Einstellungen) — Community-Interesse willkommen
HA bleibt die Referenzimplementierung — Funktionen landen zuerst dort; die Python-CLI, der ioBroker-Adapter und der MCP-Server holen im Laufe der Zeit auf.
Lizenz
MIT — siehe 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