Bosch Smart Home Kameras mit MCP-Server steuern
Die Bosch Smart Home Kameras lassen sich jetzt direkt aus KI-Assistenten heraus steuern — ohne App, ohne Umweg über Dashboards. Dieser MCP-Server verbindet Claude Code, Claude Desktop und jede andere MCP-kompatible Umgebung mit der Bosch Kamera-Cloud-API. Snapshot aufnehmen, Privacy-Modus setzen, Bewegungsereignisse abfragen — alles per Sprache oder Prompt, in Sekunden. Neben der Home Assistant Integration, dem Python CLI Tool und dem ioBroker-Adapter ist der MCP-Server das vierte Mitglied der Bosch Kamera Open-Source-Familie — und der einzige Weg, eine KI direkt in die Steuerungsschleife zu bringen.
Das Protokoll dahinter ist dasselbe wie in den Schwester-Projekten — eine reverse-engineerte, nichtoffizielle Bosch Cloud API mit OAuth2 PKCE. Seit v1.1.0 läuft der Medien-Pfad (Snapshot und Stream-URL) jedoch strikt über das lokale Netzwerk — Bilddaten verlassen das eigene WLAN nicht mehr in Richtung Bosch-Server. Der MCP-Server ist ein dünner Wrapper um den Python CLI API-Client: kein doppelter Code, kein zweites OAuth, kein getrenntes Token-Management. Die bestehende bosch_config.json des CLI-Tools genügt.
Was ist MCP — und warum für Kameras?
Das Model Context Protocol (MCP) ist ein offenes Protokoll von Anthropic, das KI-Assistenten wie Claude den Zugriff auf externe Tools und Datenquellen ermöglicht. Statt Kamerasteuerung über ein Dashboard oder eine Kommandozeile läuft die Anfrage direkt durch den Kontext des Assistenten: „Zeig mir, was gerade vor der Haustür passiert“ — Claude ruft bosch_camera_snapshot auf, lädt das JPEG und beschreibt die Szene.
Use-Cases, die die drei Schwester-Projekte nicht abdecken können, weil dafür eine KI in der Schleife nötig ist:
- „Mach einen Snapshot der Gartenkamera und beschreib, was du siehst.“
- „Was war das letzte Bewegungsereignis auf der Terrasse, und um wie viel Uhr?“
- „Aktiviere Privacy-Modus auf der Innenkamera bis 22:00 Uhr, dann deaktiviere ihn wieder.“
- „Schwenke die 360°-Kamera nach links und hol einen Snapshot.“
- „Fasse die heutigen Bewegungsereignisse aller Kameras zusammen.“
Vier Projekte, vier Zielgruppen
Alle vier Projekte teilen denselben API-Client und dieselbe OAuth2 PKCE Authentifizierung — sie unterscheiden sich nur im Einsatzfeld.
Alle vier Plattformen im Vergleich
Alle vier Geschwister-Projekte teilen sich die gleiche reverse-engineerte Cloud-API und das RCP-Protokoll, entwickeln sich aber unabhängig weiter. Wer im LAN bleiben möchte, profitiert von einem klaren Konzept: der ioBroker-Adapter ist LOCAL-only by design — er greift nur dann auf die Cloud zu, wenn es unvermeidbar ist (OAuth-Login + FCM-Subscribe + Sessions-Token). Die Home Assistant Integration kann beides — LOCAL als Default mit automatischem REMOTE-Fallback, wenn das LAN kurzzeitig nicht erreichbar ist. Das Python CLI Tool ist die niedrigste, skriptbare Schnittstelle für Capture- und Research-Use-Cases. Der MCP-Server bringt eine KI-gesteuerte Steuerungsebene für Claude Code und kompatible Assistenten.
| Feature | HA Integration | Python CLI | ioBroker Adapter | MCP Server |
|---|---|---|---|---|
| Reife | Quality Scale Platinum | stabil | Beta | stabil · PyPI |
| Plattform | Home Assistant (HACS) | Python 3.10+ CLI | ioBroker (npm) | Python 3.10+ · stdio + HTTP |
| Login | ✅ OAuth2 PKCE (Browser) | ✅ OAuth2 PKCE (Browser) | ✅ OAuth2 PKCE (Browser) | ✅ nutzt CLI-Config |
| Snapshots | ✅ native Camera.image | ✅ snapshot-Kommando | ✅ File-Store + Base64-DP | ✅ bosch_camera_snapshot (LAN-only) |
| Live RTSP-Stream (LAN) | ✅ HA Stream Component | ✅ FFmpeg / RTSPS | ✅ TLS-Proxy → lokales RTSP | ✅ bosch_camera_stream_url (LAN-only) |
| WebRTC (Sub-Sekunden-Latenz) | ✅ via go2rtc | ✅ live --webrtc | ❌ | ❌ |
| Dual-Stream (Haupt + Sub) | ✅ sensor.bosch_<n>_stream_url + _sub | ✅ live --sub | ✅ stream_url + stream_url_sub | ✅ via bosch_camera_stream_url |
| Externer Recorder (Frigate, BlueIris) | ✅ über go2rtc | ✅ Stdout-Pipe | ✅ Digest-Creds-URL + LAN-Bind | ✅ URL zurückgegeben |
| Privacy-Modus | ✅ Switch | ✅ Kommando | ✅ DP | ✅ bosch_camera_privacy_set |
| Frontlicht (Gen1/Gen2) | ✅ Light-Entity | ✅ Kommando | ✅ DP | ✅ bosch_camera_light_set |
| RGB-Wallwasher (Gen2 Außen II) | ✅ Light mit RGB | ✅ Kommando | ✅ Farbe + Helligkeit DPs | ❌ (nur Ein/Aus) |
| Panik-Sirene (Gen2) | ✅ Button | ✅ Kommando | ✅ DP | ❌ |
| Bildrotation 180° | ✅ Switch | ✅ Flag | ✅ DP | ❌ |
| Bewegung / Person / Audio-Events | ✅ FCM-Push + Polling | ✅ event-watch | ✅ FCM-Push + Polling | ✅ bosch_camera_events |
| Motion-Edge-Trigger | ✅ binary_sensor.motion | n/a | ✅ motion_active | n/a |
| Auto-Snapshot bei Bewegung | ✅ refresht Camera | n/a | ✅ last_event_image Base64 | n/a |
| Synthetischer Motion-Trigger (externer Sensor) | ✅ Service | n/a | ✅ DP | ❌ |
| Cloud-Clip-Download (~30 Tage) | ✅ über Media Browser | ✅ download-Kommando | ❌ (LOCAL-only) | ❌ |
| Mini-NVR (bewegungsgetriggerte Aufnahme) | ✅ Beta | ✅ Beta | ❌ | ❌ |
| SMB / NAS Clip-Upload | ✅ | ✅ Beta | ❌ | ❌ |
| Audio-Alarm-Empfindlichkeit (Gen2) | ✅ Select | ✅ Kommando | ❌ | ❌ |
| Kamera-Sharing (Freunde) | ❌ | ✅ Kommando | ❌ | ❌ |
| Pan / Tilt (360° Gen1) | ✅ Services | ✅ Kommando | ✅ pan_position DP | ✅ bosch_camera_pan |
| Benannte Pan-Presets (home / links / rechts…) | ✅ opt-in Select-Entity | ✅ pan --preset | ✅ pan_preset DP | ✅ bosch_camera_pan preset= |
| Zwei-Wege-Audio / Intercom | ❌ | ✅ Kommando | ❌ | ❌ |
| Webhook-Zustellung bei Events | ✅ Service + opt-in | ✅ watch --webhook URL | ✅ via MQTT-Bridge | ❌ (Request-Response-Modell) |
| MQTT-Event-Bridge (Bewegung / Audio / Person) | n/a (HA Event Bus nativ) | n/a | ✅ Admin-Konfiguration | n/a |
| Apple HomeKit (über HA Core Bridge) | ✅ dokumentiert | n/a | n/a | n/a |
| Snapshot-Scheduler / Time-Lapse | ✅ examples/ YAML | ✅ cron + ffmpeg Beispiele | ✅ Blockly-Beispiel | n/a |
| Custom Lovelace-Card | ✅ 2 Cards (Einzel + Grid) | n/a | n/a | n/a |
| ioBroker VIS Dashboard | n/a | n/a | ✅ VIS-2 Widget (alpha) | n/a |
| Cloud-Relay REMOTE-Fallback | ✅ automatisch bei LAN-Ausfall | ✅ --remote-Modus | ❌ (LOCAL-only by design) | ❌ |
| Browser-Admin- / Config-UI | ✅ HA Config Flow | n/a (CLI) | ✅ JSON-Config-Tabs | n/a (LLM-gesteuert) |
| KI-gesteuerte Auswertung | ❌ | ❌ | ❌ | ✅ Prompts + Tools |
| UI-Sprachen | 11 | 11 | 11 | n/a |
| LAN-Ping / Erreichbarkeitstest | ✅ Coordinator | ✅ ping --local | ✅ Coordinator | ✅ bosch_camera_lan_ping |
Legende: ✅ unterstützt · ❌ nicht unterstützt / nicht geplant · n/a auf dieser Plattform nicht anwendbar.
Die HA-Integration ist die feature-vollste Referenz-Implementierung. Das Python-CLI ist die niedrigste, skriptbare Schnittstelle für Research und Automation. Der ioBroker-Adapter positioniert sich klar als Local-Champion. Der MCP-Server bringt Bosch-Kamerasteuerung direkt in den KI-Assistenten-Kontext.
10 Tools im Überblick
Der MCP-Server bietet zehn Tools, die Claude direkt aufrufen kann. Schreibende Befehle (Privacy setzen, Licht, Pan, Benachrichtigungen) werden vom Assistenten nur auf explizite Anfrage ausgeführt — keine automatischen Aktionen ohne Benutzerauftrag. Snapshot und Stream-URL laufen strikt über das lokale Netzwerk — kein Bosch-Cloud-Roundtrip für Bilddaten. Für Snapshot und Privacy-/Licht-Steuerung bevorzugt der Server beim Routing automatisch den LAN-Pfad (prefer_local-Logik), wenn die Kamera erreichbar ist.
| Tool | Beschreibung | Gibt zurück |
|---|---|---|
bosch_camera_list | Alle konfigurierten Kameras auflisten | Array mit {id, name, model, hw_version, status} |
bosch_camera_status | Online/Offline + Privacy-Status einer Kamera | {name, status, privacy_mode, light_on, last_event_at} |
bosch_camera_snapshot | LAN-only JPEG-Aufnahme via HTTP Digest direkt zur Kamera-IP — kein Cloud-Umweg | {path, method, timestamp} |
bosch_camera_stream_url | LAN-only RTSPS-Stream-URL — direkt nutzbar mit ffmpeg, VLC oder go2rtc (neu in v1.1.0) | {camera, rtsps_url, note} |
bosch_camera_events | Letzte Bewegungs-/Person-/Audio-Ereignisse | Array mit {event_id, type, timestamp, has_clip} |
bosch_camera_privacy_set | Privacy-Modus ein- oder ausschalten | {camera, privacy_mode} |
bosch_camera_light_set | Kamera-Spotlight ein- oder ausschalten (Gen1+Gen2) | {camera, light_on} |
bosch_camera_pan | 360°-Kamera schwenken: left/center/right oder −120..120; mit preset=home / preset=left etc. auch benannte Positionen | {camera, position} |
bosch_camera_notifications_set | Push-Benachrichtigungen ein-/ausschalten | {camera, notifications_on} |
bosch_camera_lan_ping | Kamera-IP direkt per LAN anpingen — prüft Erreichbarkeit ohne Cloud-Roundtrip; Grundlage für prefer_local-Routing | {camera, reachable, latency_ms} |
3 Resources + 2 Prompts
Neben den Tools bietet der MCP-Server drei Resources (abrufbare Daten) und zwei vorgefertigte Prompts, die Claude direkt ausführen kann.
Resources
| Resource URI | Beschreibung |
|---|---|
bosch://cameras | JSON-Liste aller Kameras (id, name, model, status, firmware, mac) |
bosch://cameras/{name}/snapshot.jpg | Letztes gecachtes JPEG oder frischer Capture wenn Cache leer |
bosch://cameras/{name}/events | Letzte 50 Ereignisse (Bewegung, Person, Audio) als JSON-Liste |
Prompts
| Prompt | Argumente | Beschreibung |
|---|---|---|
daily-camera-summary | hours: int = 24 | Mehrstufiger Report: Ereignisse pro Kamera, Typ-Aufschlüsselung, Zeitverteilung, Anomalie-Highlights |
pre-leave-check | (keine) | Snapshot jeder Kamera, Szene beschreiben, Anomalien markieren, Innenkamera Privacy empfehlen |
Privacy-Posture: Medien-Operationen sind LAN-only
Snapshot-Bilder und Stream-Daten verlassen das eigene Netzwerk nicht — der MCP-Host spricht direkt mit der Kamera-IP über HTTPS (HTTP Digest) für Snapshots und über TLS-Proxy für RTSPS-Streams. Bosch’s Cloud-Infrastruktur wird für diese Operationen nicht angefasst. Für Privacy-Schalter und Licht wählt der Server bei erreichbarer Kamera-IP automatisch den LAN-Pfad (prefer_local); erst bei nicht erreichbarer Kamera fällt er auf den Cloud-Pfad zurück. Die übrigen Tools (Status, Events, Pan, Benachrichtigungen) nutzen weiterhin die Cloud.
| Tool | Pfad |
|---|---|
bosch_camera_snapshot | LAN-only — HTTP Digest direkt zur Kamera-IP |
bosch_camera_stream_url | LAN-only — RTSPS via lokalem TLS-Proxy |
bosch_camera_lan_ping | LAN-only — direktes Anpingen der Kamera-IP |
bosch_camera_privacy_set / light_set | prefer_local: LAN wenn erreichbar, sonst Bosch Cloud |
bosch_camera_list / status / events | Bosch Cloud (kein lokaler API-Pfad) |
bosch_camera_pan / notifications_set | Bosch Cloud (kein lokaler API-Pfad) |
Der MCP-Host muss im selben Netzwerk wie die Kameras laufen, damit Snapshot und Stream funktionieren. Ist das nicht der Fall, geben die beiden Tools local_unavailable zurück — und greifen nicht still auf die Cloud zurück. Bewusst so designt.
Zuverlässigkeit: Transparente Credential-Rotation
Erhält der MCP-Server einen HTTP-401-Fehler bei einem Cloud-API-Call — etwa weil der OAuth-Access-Token abgelaufen ist — erneuert er ihn automatisch über den Refresh-Token aus bosch_config.json und wiederholt den Tool-Call. Der aufrufende Assistent (Claude Code, Claude Desktop) bekommt davon nichts mit: das Tool antwortet mit dem korrekten Ergebnis, ohne dass ein erneuter Browser-Login nötig wäre. Schlägt auch der Token-Refresh fehl (abgelaufener Refresh-Token), gibt das Tool eine erklärende Fehlermeldung zurück und weist auf den einmaligen CLI-Login hin.
Für LAN-Direkt-Calls (Privacy-Schalter, Frontlicht, Snapshots via prefer_local) verwendet der Server TOFU-Fingerprint-Pinning: beim ersten Verbindungsaufbau zu einer Kamera-IP wird der SHA-256-Fingerprint des Kamera-TLS-Zertifikats in bosch_config.json gespeichert. Jede Folgeverbindung gleicht den Fingerprint ab — eine Abweichung bricht den Call mit einem klaren Fehler ab, statt den MITM-Angreifer stillschweigend zu vertrauen. Das Prinzip ist identisch zum Python CLI Tool, das denselben cam_cert_fingerprints-Mechanismus verwendet.
Systemarchitektur
Der MCP-Server ist ein dünner Wrapper um den API-Client des Python CLI Tools. OAuth2, Token-Refresh, FCM-Push, RTSP und RCP werden nicht neu implementiert — sie werden importiert. Das System setzt auf einen einzigen Authentifizierungsflow.
┌─────────────────────────┐ 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) │
└────────────┬────────────┘
│ HTTPS (OAuth2 PKCE)
▼
┌─────────────────────────┐
│ Bosch Cloud API │
│ (cbs.boschsecurity.com) │
└─────────────────────────┘
Drei Transport-Modi stehen zur Verfügung: stdio (Standard, für Claude Code und Claude Desktop — lokaler Subprozess), streamable-HTTP (für Remote- oder Multi-Client-Einsatz) und SSE (für ältere MCP-Clients). Der Server liest die bestehende bosch_config.json des Python CLI Tools — kein separater OAuth-Flow, kein zweites Token-Management.
Installation
Voraussetzung: Python 3.10+ und eine eingerichtete bosch_config.json vom Python CLI Tool (einmaliger OAuth2-Browser-Login). Danach läuft der MCP-Server ohne weiteren Setup-Aufwand.
# empfohlen: pipx (isolierte Umgebung, PATH-Eintrag)
pipx install bosch-smart-home-camera-mcp
# zero-install, einmaliger Aufruf
uvx bosch-smart-home-camera-mcp --help
# aus dem Quellcode (Entwicklung)
pip install -e .[test]
In Claude Code einbinden (stdio — lokal, empfohlen)
claude mcp add bosch-camera -- bosch-smart-home-camera-mcp \
--config ~/.config/bosch-camera/bosch_config.json
In Claude Code einbinden (streamable-HTTP — Remote-Server)
# Server zuerst starten:
bosch-smart-home-camera-mcp --transport http --http-port 8765
# HTTP-Endpunkt registrieren:
claude mcp add bosch-camera --transport http http://127.0.0.1:8765/mcp
Transport-Modi
# stdio (Standard) — Claude Code / Claude Desktop
bosch-smart-home-camera-mcp --config ~/.config/bosch-camera/bosch_config.json
# streamable-HTTP — lokaler Port, mehrere Clients
bosch-smart-home-camera-mcp --transport http --http-port 8765
# streamable-HTTP — LAN-Zugriff (nur in gesicherter Umgebung!)
bosch-smart-home-camera-mcp --transport http --http-host 0.0.0.0 --http-port 8765
Was kann ich damit machen?
Snapshot aufnehmen und analysieren
Claude kann direkt einen Snapshot anfordern, das zurückgegebene JPEG in den Kontext laden und die Szene beschreiben — ohne, dass der Benutzer die Kamera-App öffnen muss. Ein typischer Ablauf: „Was ist gerade im Garten los?“ → Claude ruft bosch_camera_snapshot auf, lädt das Bild, gibt eine Beschreibung zurück und schlägt bei Bedarf Folgemaßnahmen vor.
Täglicher Bewegungs-Report
Der Prompt daily-camera-summary fasst alle Ereignisse der letzten 24 Stunden (oder eines konfigurierbaren Zeitraums) zusammen: Anzahl pro Kamera, Ereignis-Typ-Aufschlüsselung, zeitliche Verteilung, Auffälligkeiten. Ideal als morgendliche Routine oder nach einer langen Abwesenheit.
Vor-dem-Verlassen-Check
Der Prompt pre-leave-check macht automatisch einen Snapshot aller Kameras, beschreibt jede Szene, markiert Anomalien und empfiehlt bei Bedarf, den Privacy-Modus der Innenkamera zu aktivieren. Das Ergebnis ist eine kompakte Einschätzung — „Alles ok, Terrasse leer, Gartenpforte geschlossen“ — bevor man das Haus verlässt.
Privacy-Modus per Sprachbefehl
„Aktiviere Privacy-Modus auf der Innenkamera bis 22:00 Uhr“ — Claude ruft bosch_camera_privacy_set auf, bestätigt die Aktion und plant bei Bedarf einen Folge-Call zum Deaktivieren. Kein Dashboard, kein App-Wechsel.
Automatisierungen mit Claude Code
Im Claude Code Kontext lässt sich der MCP-Server in Automatisierungs-Workflows einbetten: Skripte, die Kamera-Snapshots mit anderen Tool-Aufrufen kombinieren, Ereignisse mit Home Assistant-Entitäten korrelieren oder Bewegungsdaten in Berichte umwandeln.
Haftungsausschluss / Rechtliches
Dieses Projekt ist eine unabhängige, community-entwickelte Software. Es besteht keine Verbindung zu Robert Bosch GmbH oder Bosch Smart Home GmbH. „Bosch“ und „Bosch Smart Home“ sind eingetragene Marken der Robert Bosch GmbH.
Der Server kommuniziert mit einer reverse-engineerten, undokumentierten und inoffiziellen API. Die Software wird „wie sie ist“ ohne Gewährleistung bereitgestellt. Die Nutzung erfolgt auf eigene Gefahr. Das Reverse Engineering erfolgte ausschließlich zum Zweck der Interoperabilität mit eigenen Geräten und Daten — was nach § 69e UrhG und Artikel 6 der EU-Richtlinie 2009/24/EG ausdrücklich zulässig ist.
Häufige Fragen (FAQ)
Brauche ich das Python CLI Tool, um den MCP-Server zu nutzen?
Ja — einmalig. Der MCP-Server nutzt die bosch_config.json, die beim ersten Aufruf des Python CLI Tools per OAuth2 Browser-Login erstellt wird. Danach ist das CLI nicht mehr aktiv notwendig; der MCP-Server übernimmt das Token-Refresh automatisch.
Läuft der MCP-Server auch ohne Internet?
Teilweise. Snapshot, Stream-URL und bosch_camera_lan_ping laufen vollständig über das LAN. Privacy-Schalter und Frontlicht verwenden bei erreichbarer Kamera ebenfalls den LAN-Pfad. Für Status, Events, Pan und Benachrichtigungen wird die Bosch Cloud benötigt. Für ein vollständig cloud-unabhängiges Setup ist die Home Assistant Integration oder der ioBroker-Adapter die bessere Wahl.
Welche MCP-Clients werden unterstützt?
Alle MCP-kompatiblen Clients: Claude Code (stdio, empfohlen), Claude Desktop (stdio), und beliebige Clients über streamable-HTTP oder SSE. Der Server folgt dem offiziellen MCP Python SDK von Anthropic.
Kann Claude die Kamera ohne mein Zutun steuern?
Nein. Schreibende Tools (Privacy setzen, Licht, Pan, Benachrichtigungen) werden nur auf explizite Anfrage ausgeführt. Claude bestätigt vor Aktionen, die den Kamerastatus ändern. Bewusst nicht als MCP-Tool exposed: Live-Stream-URLs, Token-Refresh, Kamera-Sharing, Cloud-Clip-Download und Audio-Intercom.
Welche Kameramodelle werden unterstützt?
Alle vier aktuellen Bosch Smart Home Kamera-Modelle: 360° Innenkamera (Gen1), Eyes Innenkamera II (Gen2), Eyes Außenkamera (Gen1, IP66) und Eyes Außenkamera II (Gen2, IP66). Der Pan-Befehl ist nur für die 360° Gen1 verfügbar.
Community und Support
Fragen, Bug-Reports und Diskussionen rund um den MCP-Server laufen in den folgenden Communities — dort wird das Projekt aktiv begleitet und neue Themen werden direkt aufgegriffen.
- community.simon42.com — deutschsprachige Smart-Home-Community mit Schwerpunkt Home Assistant und ioBroker. Gut geeignet für MCP-Workflows, Automatisierungs-Patterns und Claude-Integration.
- community.home-assistant.io — das offizielle Home-Assistant-Forum. Relevant wenn der MCP-Server parallel zur HA-Integration läuft.
- GitHub Issues — strukturierte Bug-Reports und Feature-Anfragen direkt am Repo. Bevorzugter Weg für reproduzierbare Probleme mit Tool-Output und MCP-Protokoll-Logs.
Direkter Kontakt geht über das Kontaktformular. Für Smart-Home-Themen jenseits des MCP-Servers führt der Smart-Home-Hub alle vier Bosch-Kamera-Projekte plus weitere Tools zusammen.
Weitere Bosch Smart Home Kamera Projekte: Home Assistant Integration · Python CLI Tool · ioBroker-Adapter · Node-RED · Smart-Home-Hub