Bosch Smart Home Camera MCP Server
Bosch Smart Home Camera — Servidor MCP
Servidor de Protocolo de Contexto de Modelo (MCP) que expone la API en la nube de Bosch Smart Home Camera como herramientas MCP. Compatible con Claude Code, Claude Desktop y cualquier cliente compatible con MCP. Reutiliza el cliente API de ingeniería inversa probado del proyecto hermano Herramienta CLI de Python.
Estado: v1.7.2 — cierre de paridad familiar (v1.7.0): zonas de movimiento, máscaras de privacidad, reglas de automatización, uso compartido de cámaras/amigos, instalación de firmware, duración de sirena, programación de iluminación, intercomunicador de audio. Más la ronda de ajuste de imagen/video y ciclo de vida de la cámara del 2026-08-19: superposición de marca de tiempo, LED de estado, elevación de lente, umbral de oscuridad, balance de blancos, brillo de LED superior/inferior, reinicio suave/duro, renombrar. 70 herramientas + 3 recursos + 2 avisos, stdio/SSE/HTTP transmisible, instalable con pipx/uvx
Tabla de contenidos
Lanzamientos · Registro de cambios completo · Lanzamientos de GitHub
Comparación de integraciones — elige el proyecto adecuado para tu plataforma
Related MCP server: 米家 MCP Server
Aviso legal
Este proyecto es una herramienta independiente desarrollada por la comunidad. No está afiliado, respaldado, patrocinado ni conectado oficialmente de ningún modo con Robert Bosch GmbH, Bosch Smart Home GmbH, ni con ninguna de sus subsidiarias o afiliadas. "Bosch", "Bosch Smart Home" y los nombres y logotipos relacionados son marcas registradas de Robert Bosch GmbH.
La herramienta se comunica con una API no oficial, no documentada y de ingeniería inversa. Se proporciona "tal cual", sin garantía de ningún tipo. Úsela completamente bajo su propio riesgo.
¿Por qué un servidor MCP separado?
Los proyectos hermanos se dirigen a diferentes tiempos de ejecución:
Proyecto | Versión | Tiempo de ejecución | Superficie orientada al usuario |
v16.0.1 | Home Assistant | Entidades de interfaz, tarjeta Lovelace, automatizaciones | |
v10.12.3 | terminal | Comandos | |
v1.8.3 | ioBroker | Puntos de datos, widgets VIS-2 (BoschCamera + BoschOverview), interfaz de administración JSON | |
v0.4.2-alpha | Node-RED | Nodos de flujo para pipelines de automatización | |
v0.4.2-alpha | aplicación web independiente | Panel de control + detalle de cámara + interfaz de configuración | |
Servidor MCP (este repositorio) | v1.7.1 | Clientes Claude | Herramientas MCP invocables desde LLMs |
Casos de uso de LLM que los hermanos existentes no cubren:
"Toma una instantánea de la cámara del jardín y describe lo que ves."
"¿Cuál fue el último evento de movimiento en la terraza y a qué hora?"
"Habilita el modo privacidad en la cámara interior hasta las 22:00 y luego desactívalo."
"Panorámica la cámara de 360° hacia la izquierda y toma una instantánea."
"Resume los eventos de movimiento de hoy en todas las cámaras."
Estos flujos requieren un LLM en el bucle, que es exactamente para lo que sirve MCP.
Arquitectura
┌─────────────────────────┐ 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) │
└─────────────────────────┘El servidor MCP es una capa delgada alrededor de la capa de API del CLI de Python. No reimplementa OAuth, renovación de tokens, FCM push, RTSP o RCP; los importa.
Esta es una dependencia real en tiempo de ejecución, no solo una referencia de documentación. El servidor localiza bosch_camera.py al inicio del proceso mediante la inyección de sys.path (adapters/cli_bridge.py) en lugar de una dependencia normal de pip install; el repositorio hermano de la Herramienta CLI de Python debe estar clonado en disco, y el servidor MCP necesita saber dónde. Orden de resolución: la variable de entorno BOSCH_CAMERA_CLI_PATH si está establecida; de lo contrario, una ruta predeterminada fija utilizada por la configuración del mantenedor (no portátil; sobrescríbala). Casi todas las llamadas a herramientas terminan importando bosch_camera desde esa ruta en el momento de la llamada (ensure_cli_importable()), por lo que una ruta faltante o incorrecta se manifiesta como un ImportError en la primera invocación de la herramienta, no al inicio del servidor. En la práctica: clone ambos repositorios y luego establezca BOSCH_CAMERA_CLI_PATH=/ruta/a/Bosch-Smart-Home-Camera-Tool-Python en el entorno donde se ejecuta el servidor MCP, o edite DEFAULT_CLI_PATH en adapters/cli_bridge.py para una instalación local permanente. El mismo bosch_config.json que la herramienta CLI produce mediante bosch_camera login es lo que este servidor lee para las credenciales; consulte Modelo de autenticación.
Enrutamiento de herramientas con respaldo a 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:#000Flujo de la herramienta 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}Herramientas MCP (70 en total, v1.7.2)
Herramienta | Descripción | Devuelve |
| Lista todas las cámaras configuradas | array of |
| Obtiene el estado en línea/fuera de línea + privacidad de una cámara |
|
| Captura JPEG solo LAN (sin nube) — HTTP Digest a la IP de la cámara |
|
| URL de transmisión RTSPS solo LAN (sin retransmisión en la nube) — consumible por ffmpeg/VLC/go2rtc |
|
| Lista eventos recientes de movimiento/persona/audio | array of |
| Activa/desactiva el modo privacidad; |
|
| Activa/desactiva el foco; |
|
| Panorámica de la cámara 360° (solo Gen1 CAMERA_360); |
|
| Activa/desactiva notificaciones push |
|
| Sonda TCP a una cámara en el puerto LAN 443 (timeout de 1,5 s) |
|
| Obtiene el anuncio actual de mantenimiento de la nube desde el feed RSS de la comunidad |
|
| Obtiene nivel de micrófono, nivel de altavoz, indicador de intercomunicador (solo Gen2) |
|
| Establece nivel de micrófono y/o nivel de altavoz 0-100 (solo Gen2) |
|
| Obtiene configuración de detección de intrusión: modo, sensibilidad 0-7, distancia 1-8 m (solo Gen2) |
|
| Actualiza modo/sensibilidad/distancia de detección de intrusión (solo Gen2) |
|
| Obtiene configuración de detección de sonido de rotura de cristal + alarma de humo/incendio (solo Gen2 Audio-Plus) |
|
| Actualiza detección de sonido de rotura de cristal y/o alarma de incendio (solo Gen2 Audio-Plus) |
|
| Obtiene RSSI WiFi, SSID y calidad de señal derivada 0-100% |
|
| Instantánea MJPEG directa por LAN mediante RTSP inst=3 (solo Gen2, ffmpeg, sin ida y vuelta a la nube) |
|
| Lee ámbitos de dispositivo ONVIF desde LAN RCP 0x0a98 de la cámara (solo Gen2) |
|
| Lee versión de biblioteca RCP desde opcodes LAN 0xff00 + 0xff04 de la cámara |
|
| Obtiene indicadores de funciones de la nube Bosch a nivel de cuenta (sin parámetro de cámara) |
|
| Activa la sirena interior (solo Gen2 Indoor II); |
|
| Obtiene estado de detección de movimiento habilitada + sensibilidad |
|
| Establece detección de movimiento habilitada y/o sensibilidad |
|
| Obtiene configuración de sonido de grabación en la nube |
|
| Establece sonido de grabación en la nube |
|
| Obtiene estado de seguimiento automático 360° (solo Gen1 Indoor) |
|
| Establece seguimiento automático 360° (solo Gen1 Indoor) |
|
| Obtiene estado de campanilla de privacidad audible |
|
| Establece estado de campanilla de privacidad audible |
|
| Obtiene número de eventos no leídos de una cámara |
|
| Resumen de salud masivo para todas las cámaras (estado + WiFi + privacidad + último evento + no leídos) | array of per-camera health dicts |
| Análisis local de JWT — devuelve validez, caducidad, correo electrónico (sin llamada de red) |
|
| Lista rectángulos de zona de detección de movimiento (normalizados 0.0-1.0) | array of |
| Reemplaza todas las zonas de movimiento (reemplazo completo, no fusión) | array of |
| Elimina todas las zonas de movimiento |
|
| Lista rectángulos de zona de máscara de privacidad (normalizados 0.0-1.0) | array of |
| Reemplaza todas las máscaras de privacidad (reemplazo completo, no fusión) | array of |
| Elimina todas las máscaras de privacidad |
|
| Lista reglas de automatización (horario) para una cámara | array of |
| Crea una nueva regla de horario |
|
| Actualiza una regla existente (actualización parcial) |
|
| Elimina una regla |
|
| Lista amigos/invitaciones de uso compartido de cámara (a nivel de cuenta) | array of |
| Invita a un amigo por correo electrónico (a nivel de cuenta) |
|
| Comparte una cámara con un amigo existente (se fusiona con sus acciones existentes) |
|
| Revoca todos los usos compartidos de cámara de un amigo |
|
| Elimina a un amigo por completo |
|
| Obtiene versión de firmware actual/última + disponibilidad de actualización |
|
| Instala la actualización de firmware pendiente (la cámara se reinicia en 3-7 min) |
|
| Establece la duración de la alarma de sirena, 10-300 s (solo Gen2 Indoor II) |
|
| Obtiene el horario de iluminación LED (cámaras Eyes para exteriores) |
|
| Actualiza el horario de iluminación LED (cámaras Eyes para exteriores) |
|
| Abre una sesión de audio de escucha (micrófono de cámara → llamante); devuelve una URL RTSPS, solo escucha |
|
| Obtiene si se graba una superposición de fecha/hora en el video |
|
| Activa/desactiva la superposición de fecha/hora en el video |
|
| Obtiene el estado encendido/apagado del LED de estado de la cámara (solo Gen2) |
|
| Enciende/apaga el LED de estado de la cámara (solo Gen2) |
|
| Obtiene la altura de montaje de la lente en metros (solo Gen2) |
|
| Establece la altura de montaje de la lente, 0.5-5.0 m (solo Gen2) |
|
| Obtiene el umbral de iluminación día/noche + modo de atenuación (solo Gen2) |
|
| Establece el umbral de iluminación día/noche y/o modo de atenuación (solo Gen2) |
|
| Obtiene el balance de blancos de la luz frontal, -1.0 frío .. 1.0 cálido (solo Gen2) |
|
| Establece el balance de blancos de la luz frontal (solo Gen2) |
|
| Obtiene el brillo del LED superior o inferior 0-100 % (solo Gen2) |
|
| Establece el brillo del LED superior o inferior 0-100 % (solo Gen2) |
|
| Reinicia una cámara (reinicio suave) |
|
| Restablecimiento de fábrica de una cámara — DESTRUCTIVO, desvincula la cámara; requiere |
|
| Renombra una cámara mediante la API de la nube |
|
Herramientas deliberadamente NO expuestas a los LLM (riesgo de escritura / consumen mucho tiempo):
Renovación de token (manejada silenciosamente por el cliente subyacente)
Descarga de clip en la nube (cargas útiles grandes)
Talk bidireccional (micrófono de la persona que llama → altavoz de la cámara): no está expuesto en absoluto por la API en la nube de Bosch (la misma limitación que tiene el CLI hermano) —
bosch_camera_intercom_openes solo de escucha
Portado desde la integración de HA pero deliberadamente NO añadido (desajuste de arquitectura — ver docs/family-parity-plan.md auditoría 2026-08-19 para el razonamiento completo):
open_live_connection(apertura explícita de sesión / keep-alive) — las herramientas MCP son llamadas de solicitud/respuesta de un solo disparo sin proceso de fondo persistente para mantener una sesión abierta entre llamadas;bosch_camera_stream_urlya acuña una URL fresca e inmediatamente utilizable por llamada, que es el equivalente con forma de MCP."Puerta de entrada" Frigate/RTSP externo (servidor RTSP persistente sin credenciales) — misma razón: requiere un proceso de servidor de larga duración, que esta superficie de herramientas sin estado no tiene.
delete_event/send_event_webhook— ambos operan en la caché de archivos de eventos en disco local de HA y en la configuraciónwebhook_url/enable_webhook_delivery, infraestructura que esta herramienta no tiene (los eventos aquí se extraen bajo demanda de la nube de Bosch, nunca se almacenan localmente).Lectura del historial de alertas de IA —
ai_alert_store.pyde HA lee archivos relativos ahass.config.pathen el propio diseño de almacenamiento de HA; acoplarse a eso sería frágil y no es claramente útil cuando el cliente MCP es en sí mismo típicamente el LLM que realiza el análisis.Selectores de
video_quality/stream_modeyimage_rotation_180— los tres son preferencias solo del lado del cliente en HA (sin llamada a la API en la nube de Bosch en absoluto: la calidad elige el parámetroinst=de RTSPS, stream_mode elige LOCAL vs REMOTE, la rotación es una transformación CSS/PIL solo de visualización) sin estado persistente por sesión al que adjuntarlos aquí.pan_presetya está cubierto —bosch_camera_pan(preset=...)se ha enviado desde v1.x.
Fiabilidad — rotación transparente de credenciales
La ruta de escritura LAN-RCP prefer_local=True (bosch_camera_privacy_set, bosch_camera_light_set) reintenta automáticamente una vez en HTTP 401 después de volver a obtener credenciales Digest frescas de bosch_config.json. Sin cambio de API visible para el usuario — el reintento es silencioso y el resultado de la herramienta es idéntico tanto si se necesitó rotación como si no. Esto elimina fallos de arranque en frío cuando el nonce Digest en caché ha expirado. bosch_camera_pan actualmente no toma un parámetro prefer_local — el pan siempre va a través de la nube de Bosch.
Recursos MCP
URI de recurso | Descripción |
| Lista JSON de todas las cámaras (id, nombre, modelo, estado, firmware, mac, descripción) |
| Último JPEG en caché, o captura fresca si la caché está vacía |
| Últimos 50 eventos (movimiento, persona, audio) como lista JSON |
bosch://cameras es un recurso estático. Las variantes {name} son plantillas de recursos.
Prompts MCP
Prompt | Argumentos | Descripción |
|
| Informe de varios pasos: eventos por cámara, desglose por tipo, distribución temporal, aspectos destacados de anomalías |
| (ninguno) | Instantánea de cada cámara, describir escena, marcar anomalías, recomendar modo de privacidad interior |
Postura de privacidad — las operaciones de medios son solo LAN
Las instantáneas y las URL de transmisión van directamente del host MCP a la cámara a través de la LAN — sin retransmisión en la nube de Bosch. Las herramientas restantes (estado, eventos, privacidad/luz/pan/notificaciones) todavía usan la nube porque no hay una API local expuesta actualmente para esos endpoints.
Herramienta | Ruta |
| Solo LAN — HTTP Digest a la IP de la cámara |
| Solo LAN — RTSPS a través del proxy TLS local de Bosch |
| Solo LAN — conexión TCP al puerto 443 de la cámara |
| Nube de Bosch (sin API local todavía) |
| Nube de Bosch |
| LAN-RCP primero, respaldo en la nube — solo Gen2 |
| Nube de Bosch (sin API local todavía) |
El host MCP debe estar en la misma red que las cámaras para que las herramientas de medios funcionen. Si no lo está, las herramientas de instantánea/transmisión muestran local_unavailable en lugar de recurrir a la nube — por diseño.
Modelo de autenticación
El servidor se ejecuta con el bosch_config.json existente del usuario de la herramienta CLI Python hermana — sin flujo OAuth separado, sin credenciales almacenadas por este repositorio. Genérelo una vez a través del bosch_camera login del CLI (OAuth2 PKCE basado en navegador), luego apunte el servidor MCP a él:
--config <ruta>/ variable de entornoBOSCH_CAMERA_CONFIG=<ruta>: ruta explícita abosch_config.json.Si no se establece ninguno, el puente recurre a lo que la resolución predeterminada de
get_session_and_cameras()encuentre junto al checkout del CLI hermano (ver Arquitectura — la ubicación del CLI hermano se resuelve a su vez medianteBOSCH_CAMERA_CLI_PATHo una ruta predeterminada fija).
El servidor MCP nunca lee ni escribe credenciales más allá de lo que la herramienta CLI ya hace (renovación de token en 401, guardado atómico) — llama directamente al código de sesión/configuración del CLI a través de la importación cli_bridge.
Modos de transporte
Se admiten tres modos de transporte a través de la bandera --transport:
Modo | Bandera | Caso de uso |
|
| Claude Code / Claude Desktop — subproceso local |
|
| Implementaciones remotas / multi-cliente sobre HTTP |
|
| Clientes SSE heredados |
Los modos HTTP y SSE se vinculan a 127.0.0.1:8765 por defecto (solo local, seguro).
Pase --http-host 0.0.0.0 solo en entornos de red confiables y con firewall.
# 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 8765Pila tecnológica
Python 3.10+
mcp— SDK oficial de MCP para Pythonpydantic(ya una dependencia transitiva demcp) para esquemas de herramientasReutilización:
bosch_camera.pydel repositorio CLI hermano, ubicado en tiempo de ejecución mediante inyección desys.path(variable de entornoBOSCH_CAMERA_CLI_PATHo un valor predeterminado configurable) — no es una dependencia instalada porpip, ver Arquitectura
Instalación
# 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]Mantenedores: La publicación en PyPI está automatizada — empujar una etiqueta
v*.*.*activa el flujo de trabajo publish-pypi a través de OIDC Trusted Publisher. No ejecutetwine uploadmanualmente.
Añadir a Claude Code — stdio (local, recomendado)
claude mcp add bosch-camera -- bosch-smart-home-camera-mcp \
--config ~/.config/bosch-camera/bosch_config.jsonAñadir a Claude Code — streamable-HTTP (servidor remoto)
# 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/mcpAñadir a Claude Desktop
Añada lo siguiente a su claude_desktop_config.json (normalmente ~/Library/Application Support/Claude/claude_desktop_config.json en macOS o %APPDATA%\Claude\claude_desktop_config.json en Windows):
{
"mcpServers": {
"bosch-camera": {
"command": "bosch-smart-home-camera-mcp",
"args": [
"--config",
"/path/to/bosch_config.json"
]
}
}
}Reemplace /path/to/bosch_config.json con la ruta real a su bosch_config.json (generado por la herramienta CLI Python hermana mediante bosch_camera login). El servidor se ejecuta como un subproceso stdio local — no se necesita puerto de red para Claude Desktop.
Estructura del repositorio
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
└── .gitignoreHistorial de versiones
v0.1.0 — documento conceptual + servidor esqueleto, todas las herramientas definidas pero aún no implementadas (devuelve
NotImplementedError) ✅v0.2.0 — las 8 herramientas conectadas: herramientas de lectura (list, status, events, snapshot) + herramientas de escritura (privacy, light, pan, notifications) mediante inyección de sys.path (Opción C) ✅
v0.4.0 — recursos (
bosch://cameras,bosch://cameras/{name}/snapshot.jpg,bosch://cameras/{name}/events) + prompts (daily-camera-summary,pre-leave-check) ✅v0.5.0 — transporte streamable-HTTP (
--transport http|sse|stdio), empaquetado parapipx/uvx, 24 pruebas nuevas ✅v1.0.0 — primera versión estable: 106 pruebas, wheel + sdist publicados en GitHub Releases, publicación en PyPI pendiente ✅
v1.1.0 — ruta de medios solo-LAN (privacidad reforzada):
bosch_camera_snapshoty el nuevobosch_camera_stream_urlvan directamente a la cámara por LAN, sin retransmisión en la nube de Bosch para medios. 113 pruebas. ✅v1.2.0 — herramienta
bosch_camera_maintenance_status: obtiene anuncios de mantenimiento en la nube de fuentes RSS de la comunidad; devuelve estado (activo/programado/pasado/reciente/desconocido/inactivo), título, ventana de tiempo, enlace. ✅v1.3.0 — conjunto de funciones de respaldo LAN (portado desde la integración HA v12.4.10/v12.4.11): herramienta
bosch_camera_lan_ping(sonda TCP para cualquier cámara en LAN);prefer_local=Trueenbosch_camera_privacy_set/bosch_camera_light_set(ruta de escritura RCP-LAN, Gen2, respaldo en la nube en caso de error); camporecommended_actionenbosch_camera_maintenance_status("check_lan"cuando está activo,"wait"cuando está programado). 173 pruebas. ✅v1.3.3 — obtener/establecer audio, obtener/establecer detección de intrusión, información WiFi (portado desde HA v12.7.0). 16 herramientas. ✅
v1.3.4 — presets PTZ con nombre (
bosch_camera_pan preset=aceptahome / left / right / back-left / back-right); rotación transparente de credenciales en 401 para herramientas LAN-RCP (reintento silencioso, sin cambio de API). ✅v1.3.6 — 9 correcciones de errores de la auditoría en vivo 2026-05-24 (lista de cámaras siempre en vivo desde la nube, hw_version Gen1/Gen2, resolución de UUID, mapeo de campos de eventos, audio camelCase, compuerta de intrusión Gen2, códigos de error, marca de tiempo de instantánea, espejo de requirements-test.txt). ✅
v1.4.0 — 4 herramientas nuevas:
bosch_camera_mjpeg_snapshot,bosch_camera_onvif_scopes,bosch_camera_rcp_version,bosch_camera_feature_flags. Ayudante asíncrono_fetch_rcp_lan. 20 herramientas en total. ✅v1.5.0 — 11 herramientas nuevas + 8 correcciones de errores de la auditoría de cámaras en vivo (4 unidades de hardware, las 4 generaciones): disparador de sirena, obtener/establecer movimiento, obtener/establecer grabación, obtener/establecer autoseguimiento, obtener/establecer sonido de privacidad, recuento de no leídos, verificación de salud de todo, estado de token. ✅
v1.5.1 — corregido
_fetch_rcp_lan(usaba unaiohttp.DigestAuthinexistente →onvif_scopes/rcp_versionsiempre fallaban por LAN; ahorahttpx.DigestAuth). Cobertura de pruebas 83→98%, fixtures saneados, CI actualizado a versiones principales de acciones nativas de Node-24. ✅v1.5.2 — higiene de dependencias: se eliminó la dependencia de ejecución
aiohttpno utilizada (solo para pruebas ahora), se añadieron pisos de seguridadpyjwt>=2.13.0/starlette>=1.0.1(pip-auditlimpio), se corrigió una prueba que simulaba la pila HTTP incorrecta. ✅v1.5.3 — parche de seguridad: fijar CA de la nube de Bosch para la sesión de nube MCP (CWE-295, GHSA-6qh5-x5m5-vj6v); cierra MITM de red adyacente en tokens OAuth. La fijación TOFU local no cambia. ✅
v1.5.4 — las marcas de tiempo de eventos ya no pierden el desplazamiento de zona horaria:
/v11/eventsdevuelve marcas de tiempo con desplazamiento (p. ej.+02:00[Europe/Berlin]); el servidor ahora elimina solo el sufijo[zone]final en lugar de truncar a 19 caracteres, preservando el desplazamiento UTC explícito. ✅v1.5.5 — el recurso
camera_eventsahora usaeventType + eventTagspara una clasificación correcta de eventos. ✅v1.6.0 — 2 herramientas nuevas:
bosch_camera_audio_detection_get/bosch_camera_audio_detection_set— detección de sonido de rotura de cristal + alarma de humo/incendio para cámaras Gen2 Audio-Plus (portado desde la integración HA v14.2.0). 34 herramientas en total. ✅v1.7.0 — cierre de paridad familiar (
docs/family-parity-plan.md§2b): 21 herramientas nuevas que cierran la brecha de capacidades MCP-vs-HA/CLI — obtener/establecer/limpiar zonas de movimiento, obtener/establecer/limpiar máscaras de privacidad, listar/añadir/editar/eliminar reglas de automatización, listar/invitar/compartir/dejar de compartir/eliminar uso compartido de cámaras/amigos, estado/instalación de firmware (refleja la protecciónasync_install_firmwarede HA), duración de sirena, obtener/establecer programación de iluminación LED, y una herramienta de intercomunicador de audio de escucha (micrófono de cámara → llamante, URL RTSPS; la conversación bidireccional no está expuesta en absoluto por la API en la nube de Bosch, misma limitación que la CLI hermana). Refuerzo de CI: compuerta de cobertura (--cov-fail-under=96),pip-audit(solo dependencias de ejecución),pylint,codespell, CodeQL, escaneo de secretos gitleaks, y un flujo de trabajo de revisión de dependencias — paridad de nivel Oro con las compuertas de calidad de la integración HA. 55 herramientas en total. ✅v1.7.2 — solo documentación: corregida la fila de Login de este repositorio en la tabla de Comparación de Integraciones, sin cambios funcionales. ✅
Lanzamientos
Última: v1.7.2 — consulta la página de lanzamientos de GitHub para las notas completas: Notas del lanzamiento v1.7.2 →
Todos los lanzamientos | Página de lanzamientos de GitHub — cada versión etiquetada con notas + recursos descargables |
Historial completo |
|
Comparación de Integraciones
La API de Bosch Smart Home Camera con ingeniería inversa se expone a través de cinco proyectos hermanos. Elige el que se adapte a tu plataforma.
Característica | ||||||
Madurez | v15.0+ — Escala de Calidad de HA Platinum | v10.12+ estable (Mini-NVR BETA) | v1.8+ estable · npm | v1.7+ estable · PyPI | v0.4.0 alpha · PyPI | v0.4.0 alpha · npm |
Plataforma | Home Assistant (HACS) | CLI independiente de Python 3.10+ | ioBroker (npm) | Python 3.10+ · pipx / uvx · stdio + streamable-HTTP para clientes MCP (Claude Desktop, Claude Code, personalizados) | Aplicación web NiceGUI · Python 3.10+ | Paleta Node-RED · npm |
Inicio de sesión | OAuth2 PKCE (navegador) | OAuth2 PKCE (navegador) | OAuth2 PKCE (navegador) | ◑ comparte | ◑ comparte | ◑ token de actualización desde la CLI |
Instantáneas | ✅ | ✅ comando | ✅ Almacenamiento de archivos + DP base64 | ✅ | ✅ en vivo + respaldo de eventos | ✅ nodo |
Transmisión RTSP en vivo (LAN) | ✅ mediante el componente HA Stream | ✅ salida ffmpeg/RTSPS | ✅ proxy TLS → RTSP local | ✅ | ◑ interno (go2rtc) | ◑ nodo |
WebRTC (latencia de menos de un segundo) | ✅ mediante go2rtc integrado | ✅ (v10.6.0) | ❌ | ❌ | ✅ mediante go2rtc (si no, instantánea) | ❌ |
URL de doble transmisión (principal + secundaria) | ✅ | ✅ | ✅ | ◑ | ❌ (solo transmisión secundaria) | ◑ Solo URL — sin opción secundaria |
Grabador externo (BlueIris, Frigate) | ✅ mediante go2rtc | ✅ tubería stdout | ✅ URL con credenciales Digest + opción de enlace LAN | ✅ URL devuelta, transferencia a ffmpeg / go2rtc posterior | ❌ | ◑ |
Modo privacidad | ✅ entidad de interruptor | ✅ comando | ✅ DP | ✅ | ✅ alternar | ✅ nodo |
Foco frontal (Gen1/Gen2) | ✅ entidad de luz | ✅ comando | ✅ DP | ✅ | ❌ (esquema de la Fase 2) | ✅ nodo |
Lavaparedes RGB (Gen2 Outdoor II) | ✅ luz con RGB | ◑ solo encendido/apagado — sin RGB | ✅ DP de color + brillo | ❌ (solo encendido/apagado — RGB no expuesto) | ❌ | ◑ solo encendido/apagado + intensidad — sin RGB (v0.3.0-alpha) |
Sirena de alarma de pánico | ✅ entidad de botón (Gen2 Indoor II) | ✅ comando (solo Gen2 Indoor II) | ✅ DP | ✅ | ✅ activación + duración (solo Gen2 Indoor II) | ❌ |
Actualización de firmware | ✅ Entidad de actualización + flujo de reparación de Repairs, botón de instalación (v14.4.10) | ✅ estado + instalación (v10.11.0) | ✅ estados de firmware + activación de instalación, protección de bloqueo de escritura (v1.8.0) | ✅ estado + herramientas de instalación (v1.7.0) | ◑ visualización de estado de solo lectura, sin acción de instalación | ✅ nodos de estado + instalación (v0.4.0-alpha) |
Rotación de imagen 180° | ✅ interruptor | ❌ | ✅ DP | ❌ | ❌ | ❌ |
Eventos de movimiento / persona / audio | ✅ push FCM + respaldo de sondeo | ◑ solo comando | ✅ push FCM + respaldo de sondeo | ✅ | ◑ tabla de eventos solo de extracción | ✅ nodo |
Estado de activación por flanco de movimiento | ✅ | n/a | ✅ | n/a (solicitud-respuesta, sin suscripción) | ❌ | ❌ |
Instantánea automática al detectar movimiento | ✅ actualiza la entidad Camera | n/a | ✅ escribe | n/a (sin bucle en segundo plano) | ❌ | ❌ |
Activación de movimiento sintético (sensor externo) | ✅ servicio | n/a | ✅ DP | ❌ | ❌ | ❌ |
Zonas de movimiento / máscaras de privacidad | ✅ lectura + escritura | ✅ lectura + escritura | ✅ lectura + escritura (v1.8.0) | ✅ obtener / establecer / borrar (v1.7.0) | ❌ (aún sin editor visual) | ❌ |
Reglas de automatización / programaciones | ✅ lectura + escritura | ✅ lectura + escritura | ✅ CRUD completo (v1.8.0) | ✅ listar / añadir / editar / eliminar (v1.7.0) | ✅ CRUD completo (listar/añadir/editar/eliminar) | ❌ |
Programación de iluminación | ✅ lectura (escritura mediante servicio, solo Gen1 Eyes Outdoor) | ✅ lectura + escritura | ✅ lectura (solo Gen1, v1.2.0) | ✅ obtener / establecer (v1.7.0) | ✅ lectura + escritura (cámaras Eyes de exterior) | ❌ |
Descarga de clips en la nube (historial ~30 días) | ✅ mediante Media Browser | ❌ | ❌ (en pausa — aún sin solicitud de la comunidad) | ❌ (intencionalmente no expuesto — cargas grandes) | ❌ (use la CLI) | ◑ |
Mini-NVR (grabación local) | ✅ continua + con búfer de eventos, preroll de búfer circular (v11.2.0 BETA → modos v14.7.0) | ◑ multiplexado de segmentos activado por eventos, sin anillo de preroll (v10.7.0 BETA) | ❌ (delega en un grabador externo mediante un endpoint RTSP sin credenciales) | ❌ (sin concepto de NVR) | ◑ solo continua, sin búfer de eventos (v0.4.0-alpha) | ◑ solo continua mediante el nodo |
Carga de clips SMB / NAS | ✅ | ✅ (v10.7.0 BETA) | ❌ | ❌ | ❌ | ❌ |
Compartir cámara (amigos) | ✅ servicios (compartir / invitar / listar) | ✅ comando | ✅ compartir / invitar / eliminar (solo Gen2, v1.8.0) | ✅ listar / invitar / compartir / dejar de compartir / eliminar (v1.7.0) | ✅ listar/invitar/eliminar/compartir/dejar de compartir | ❌ |
Panorámica / inclinación (360° Gen1) | ✅ servicios | ✅ comando | ✅ | ✅ | ✅ control deslizante conectado a la API en vivo | ❌ |
Preajustes de panorámica con nombre (home / left / right / back-left / back-right) | ✅ entidad de selección opt-in | ✅ indicador | ✅ | ✅ | ❌ | ❌ |
Audio bidireccional / intercomunicador | ❌ | ✅ comando | ❌ | ◑ solo escucha | ❌ | ❌ |
Entrega de webhooks en eventos | ✅ servicio + opciones opt-in | ✅ | ✅ mediante puente MQTT | ❌ (modelo de solicitud-respuesta) | ❌ | ❌ |
Puente de eventos MQTT (movimiento / audio / persona) | n/a (bus de eventos nativo de HA) | n/a (ejecución única) | ✅ configuración de administrador | n/a | ❌ | ❌ |
Apple HomeKit (mediante puente HA Core) | ✅ documentado | n/a | n/a | n/a | n/a | n/a |
Programador de instantáneas / time-lapse | ✅ ejemplos/ YAML | ✅ ejemplos de cron + ffmpeg | ✅ ejemplo de Blockly | n/a | ❌ | ❌ |
Tarjeta / widget nativo de panel | ✅ 2 tarjetas Lovelace (individual + cuadrícula) | n/a | ✅ 2 widgets vis-2 — BoschCamera + BoschOverview multicámara | n/a | ✅ (es en sí mismo un panel web) | ❌ |
Picture-in-Picture sobrevive a la pestaña en segundo plano | ✅ keep-alive | n/a (sin interfaz) | ✅ PiP propio + recuperación de congelación, latido de Web-Worker (v1.7.2/v1.7.3) | n/a (sin interfaz) | ✅ tiempo de espera de reconexión + recuperación de congelación (v0.4.0-alpha) | n/a (sin interfaz) |
Respaldo REMOTO de retransmisión en la nube | ✅ cambio automático cuando la LAN no está disponible | ✅ modo remoto | ❌ (solo LOCAL por diseño) | ❌ (multimedia solo LAN; estado/eventos mediante la nube) | ◑ hereda de la CLI | ◑ opción REMOTO (manual) |
Interfaz de administración / configuración basada en navegador | ✅ Flujo de configuración de HA | n/a (CLI) | ✅ pestañas de configuración JSON | n/a (mediado por LLM; configuración mediante CLI / cliente MCP) | ✅ página de configuración | ◑ nodo de configuración del editor |
Idiomas de la interfaz | 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 (sin interfaz — el LLM es el front-end) | ◑ i18n del backend · interfaz mayormente en EN | n/a (solo inglés) |
Leyenda: ✅ compatible · ❌ no compatible / no planificado · n/a no aplicable para esta plataforma.
Los cuatro proyectos comparten la misma investigación de protocolo RCP + API de nube con ingeniería inversa, pero evolucionan de forma independiente. La integración con Home Assistant es la implementación de referencia más completa en cuanto a funciones; la CLI de Python es la superficie de más bajo nivel / programable; el adaptador de ioBroker está orientado a paneles VIS y automatizaciones Blockly; el servidor MCP expone una superficie de herramientas seleccionada, priorizando LAN, a los clientes MCP (Claude Desktop, Claude Code, personalizados) para el control de cámaras en lenguaje natural.
Proyectos relacionados
Parte de una familia de cinco implementaciones para Bosch Smart Home Cameras (más un frontend alfa):
Implementación | Repositorio | Estado |
🏆 Integración con Home Assistant | v16.0.1 · HA Quality Scale Platinum · listo para producción | |
🐍 CLI de Python | v10.12.3 · Mini-NVR + carga SMB (BETA) · respaldo LAN (ping / --local) · presets PTZ · entrega por webhook · captura / investigación / independiente | |
🟢 Adaptador ioBroker | v1.8.3 · estable · npm · rotación de Digest con interruptor de privacidad · puente MQTT · presets PTZ · widgets VIS-2 (BoschCamera + BoschOverview) | |
🤖 Servidor MCP (este repositorio) | v1.7.2 · rotación de credenciales · presets PTZ · fijación de certificados TOFU · CA de nube fijada (CWE-295) · ping LAN + prefer_local · zonas/máscaras/reglas/amigos/instalación de firmware · integración con Claude Code / Claude Desktop | |
🔴 Nodos Node-RED (alfa) | v0.4.2-alpha · nodos para evento / instantánea / privacidad / configuración / más |
También: Bosch Smart Home Camera — Python Frontend (NiceGUI) — v0.4.2-alpha (panel + detalle de cámara + ajustes) — se agradece el interés de la comunidad
HA sigue siendo la implementación de referencia — las funciones llegan allí primero; la CLI de Python, el Adaptador ioBroker y el Servidor MCP se ponen al día con el tiempo.
Licencia
MIT — ver 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