Bosch Smart Home Camera MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| bosch_camera_listA | List all configured Bosch cameras with their online status. |
| bosch_camera_statusB | Get the current status of one camera by name (case-insensitive). |
| bosch_camera_snapshotB | Capture a fresh snapshot via LAN only (HTTP Digest to camera IP). No Bosch cloud roundtrip. Requires the MCP host to be on the same network as the camera. Saves to ~/.cache/bosch-camera-mcp/snapshots//.jpg. |
| bosch_camera_stream_urlA | Get the LAN RTSPS stream URL for one camera. No Bosch cloud relay. The returned URL is consumable by ffmpeg/VLC/go2rtc. Requires that the MCP host runs on the same network as the camera and has local credentials configured for the camera (bosch_config.json → cameras[name].local_*). |
| bosch_camera_eventsB | Return the most recent motion / person / audio events for one camera. Each item contains: event_id, type, timestamp_iso, has_clip. |
| bosch_camera_lan_pingA | Probe whether a camera is reachable on the LAN (TCP port 443, 1.5 s timeout). Pass either Returns |
| bosch_camera_privacy_setA | Turn privacy mode on or off. enabled=True hides the camera. When |
| bosch_camera_light_setA | Turn the camera's spotlight on or off. Only for cameras with When |
| bosch_camera_panA | Pan the 360° indoor camera (Gen1 CAMERA_360 only, panLimit > 0). Named presets (preferred, via
When |
| bosch_camera_siren_triggerA | Trigger (or stop) the indoor siren on a camera. Endpoint depends on the camera model:
The siren plays for the camera-side configured duration (typically 30–60 s
on Gen2). To change the duration, use Raises Args: camera: Camera name (case-insensitive). stop: If True, send the stop variant ({"enabled": False} or {"status": "OFF"}). Useful for cancelling an active Gen2 panic alarm before its duration expires. |
| bosch_camera_siren_duration_setA | Set the siren alarm duration for one camera (Gen2 Indoor II only). Read-modify-write on Raises Args: camera: Camera name (case-insensitive). seconds: New siren duration, 10-300 seconds inclusive. |
| bosch_camera_lighting_schedule_getA | Get the LED lighting schedule for one outdoor (Eyes) camera. API: |
| bosch_camera_lighting_schedule_setA | Update the LED lighting schedule for one outdoor (Eyes) camera. Read-modify-write on Only available on outdoor cameras with LED light — raises
Args: camera: Camera name (case-insensitive). on_time: Light-on time, "HH:MM" or "HH:MM:SS". off_time: Light-off time, "HH:MM" or "HH:MM:SS". light_on_motion: Whether motion also triggers the light. darkness_threshold: Ambient-darkness trigger threshold, 0.0-1.0. |
| bosch_camera_intercom_openA | Open a listen-audio session tunnel to a camera (cloud proxy). Listen-only — returns an RTSPS URL streaming the camera's microphone
audio to the caller. True two-way talk (caller mic -> camera speaker) is
not exposed via the Bosch cloud API (same limitation as the Python CLI's
own Flow: optionally sets the camera's speaker level (full-body PUT to
Args:
camera: Camera name (case-insensitive).
duration: Requested session duration in seconds (embedded in the URL
as |
| bosch_camera_notifications_setC | Toggle push notifications for one camera. |
| bosch_camera_maintenance_statusA | Fetch the current Bosch Smart Home cloud maintenance announcement from the official community RSS feed. Returns title, time window, link, state (active/scheduled/past/recent/unknown/idle),
and a
Use this tool when users ask why cameras are unavailable or when the cloud returns 5xx errors. |
| bosch_camera_audio_getA | Get the microphone and speaker level settings for one Gen2 camera. Only for cameras with Returns |
| bosch_camera_audio_setA | Set the microphone level and/or speaker level for one Gen2 camera. Only for cameras with Both values must be in the range 0-100. The API persists the full audio payload — unspecified fields are preserved from the current camera state. Returns updated |
| bosch_camera_intrusion_getA | Get the intrusion detection configuration for one Gen2 camera. Returns
|
| bosch_camera_intrusion_setA | Update the intrusion detection configuration for one Gen2 camera. Gen2-only feature — raises
Unspecified fields are preserved from the current camera configuration.
Returns the updated |
| bosch_camera_audio_detection_getA | Get the glass-break + smoke/fire-alarm sound detection config for one Gen2 camera. Only available on Gen2 Audio-Plus cameras ( Returns |
| bosch_camera_audio_detection_setA | Update glass-break and/or fire-alarm sound detection for one Gen2 camera. Gen2 Audio-Plus-only feature — raises Read-modify-write: the current config is fetched first, only the provided
field(s) are merged in, and both Returns the updated |
| bosch_camera_wifiA | Get the WiFi signal quality for one camera. Queries
Useful for diagnosing intermittent connectivity, stream drops, or deciding
whether to force |
| bosch_camera_mjpeg_snapshotA | Direct LAN MJPEG snapshot via RTSP inst=3 (Gen2 only). Faster than snap.jpg, no cloud roundtrip. Uses ffmpeg to pull a single frame from the camera's RTSPS stream (inst=3 = sub-stream, lower resolution but faster). Saves JPEG to ~/.cache/bosch-camera-mcp/snapshots/. Requires ffmpeg installed and MCP host on same LAN as camera. Gen2 only (HOME_Eyes_Outdoor / HOME_Eyes_Indoor). |
| bosch_camera_onvif_scopesA | Read ONVIF device scopes from camera via LAN RCP command 0x0a98 (Gen2 only). Returns parsed scope fields: name, hardware model, ONVIF profiles, and the raw scope string. Requires local_ip + local credentials in bosch_config.json. Gen2 only (HOME_Eyes_Outdoor / HOME_Eyes_Indoor). |
| bosch_camera_rcp_versionA | Read RCP firmware version from camera via LAN (opcodes 0xff00 + 0xff04). Returns primary and secondary RCP library versions in dotted decimal and raw hex. Useful for diagnosing protocol compatibility. Requires local_ip + local credentials. |
| bosch_camera_feature_flagsA | Fetch account-level Bosch cloud feature flags from GET /v11/feature_flags. Returns the raw dict of feature flag names to boolean values, e.g. {"APP_RATING": true, "IOT_THINGS_INTEGRATION": true, ...}. No camera parameter — flags are account-level. Useful for discovering which Bosch platform features are active for this account. |
| bosch_camera_motion_getA | Get motion detection settings for one camera. Returns API: GET /v11/video_inputs/{id}/motion. |
| bosch_camera_motion_setA | Set motion detection enabled state and/or sensitivity for one camera. At least one of
API: PUT /v11/video_inputs/{id}/motion. |
| bosch_camera_recording_getB | Get cloud recording options for one camera. Returns API: GET /v11/video_inputs/{id}/recording_options. |
| bosch_camera_recording_setB | Enable or disable audio in cloud recordings for one camera.
API: PUT /v11/video_inputs/{id}/recording_options Body: |
| bosch_camera_autofollow_getA | Get auto-follow (360° auto-tracking) state for one camera. Returns API: GET /v11/video_inputs/{id}/autofollow. |
| bosch_camera_autofollow_setA | Enable or disable 360° auto-tracking for one camera. Only available on 360° indoor cameras ( API: PUT /v11/video_inputs/{id}/autofollow Body: |
| bosch_camera_privacy_sound_getA | Get the privacy-sound indicator setting for one camera. When enabled, the camera plays an audible indicator when privacy mode changes.
Returns API: GET /v11/video_inputs/{id}/privacy_sound_override. |
| bosch_camera_privacy_sound_setA | Enable or disable the audible indicator that plays when privacy mode changes.
API: PUT /v11/video_inputs/{id}/privacy_sound_override Body: |
| bosch_camera_unread_getA | Get the unread event count for one camera. Reads Returns |
| bosch_camera_health_check_allA | Bulk health check for ALL configured cameras in one call. Returns status + WiFi signal + privacy mode + last event + unread count for each camera. Replaces 4+ separate MCP calls for dashboard use. Errors per camera are captured in the |
| bosch_camera_token_statusA | Return the current bearer token validity, expiry, and account email. Parses the JWT Returns |
| bosch_camera_motion_zones_getA | List the motion-detection zone rectangles configured for one camera. Coordinates are normalized 0.0-1.0 (x/y = top-left corner, w/h = size).
Returns an empty list if no zones are configured. Raises |
| bosch_camera_motion_zones_setA | Replace ALL motion-detection zones for one camera with the given list. This is a full replace, not a merge — pass every zone you want to keep.
Each zone is |
| bosch_camera_motion_zones_clearB | Remove all motion-detection zones for one camera. Returns the (empty) list. |
| bosch_camera_privacy_masks_getA | List the privacy-mask zone rectangles configured for one camera. Coordinates are normalized 0.0-1.0 (x/y = top-left corner, w/h = size). Masked areas are permanently blacked out in both live view and recordings. |
| bosch_camera_privacy_masks_setA | Replace ALL privacy-mask zones for one camera with the given list. Full replace, not a merge. Each mask is |
| bosch_camera_privacy_masks_clearA | Remove all privacy-mask zones for one camera. Returns the (empty) list. |
| bosch_camera_rules_listB | List the automation (time-schedule) rules configured for one camera. |
| bosch_camera_rules_addA | Create a new automation rule for one camera.
|
| bosch_camera_rules_editB | Update an existing automation rule for one camera. Only provided fields change. |
| bosch_camera_rules_deleteA | Delete an automation rule from one camera. Returns {deleted, rule_id}. |
| bosch_camera_friends_listA | List all friends/invitations this account has shared cameras with. No camera parameter — friends are account-level, not per-camera. |
| bosch_camera_friends_inviteB | Invite a new friend (by email) to share cameras with. Account-level. |
| bosch_camera_friends_shareA | Share one camera with an existing friend.
|
| bosch_camera_friends_unshareA | Revoke ALL camera shares from a friend (the friend entry itself remains). Returns {unshared, friend_id}. |
| bosch_camera_friends_removeA | Remove a friend entirely (revokes shares and deletes the invitation/friendship). Returns {removed, friend_id}. |
| bosch_camera_firmware_statusB | Get the current/latest firmware version and update-availability for one camera. |
| bosch_camera_firmware_installA | Install the pending firmware update for one camera right now. Mirrors the HA integration's |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| daily-camera-summary | Walk through today's events on all cameras and produce a structured daily report: motion count, person count, audio events, time distribution, and anomaly highlights. |
| pre-leave-check | Pre-departure routine: snapshot every camera, describe what is visible, flag anomalies (open windows, unexpected occupants, lights on), and recommend enabling privacy mode on indoor cameras. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| cameras-list | JSON list of all configured Bosch cameras with status, firmware, and MAC. |
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