Skip to main content
Glama
mosandlt

Bosch Smart Home Camera MCP Server

by mosandlt

Bosch Smart Home Camera — MCP Server

Model Context Protocol (MCP) server that exposes the Bosch Smart Home Camera cloud API as MCP tools. Drop-in for Claude Code, Claude Desktop, and any MCP-compatible client. Reuses the proven reverse-engineered API client from the sister Python CLI tool.

Status: v1.7.2 — family-parity closeout (v1.7.0): motion zones, privacy masks, automation rules, camera sharing/friends, firmware install, siren duration, lighting schedule, listen-audio intercom. Plus the 2026-08-19 image/video tuning + camera-lifecycle round: timestamp overlay, status LED, lens elevation, darkness threshold, white balance, top/bottom LED brightness, soft/hard reset, rename. 70 tools + 3 resources + 2 prompts, stdio/SSE/streamable-HTTP, pipx/uvx-installable

License Project Maintenance


Table of Contents


Related MCP server: Loxone MCP Server

Disclaimer

This project is an independent, community-developed tool. It is not affiliated with, endorsed by, sponsored by, or in any way officially connected to Robert Bosch GmbH, Bosch Smart Home GmbH, or any of their subsidiaries or affiliates. "Bosch", "Bosch Smart Home", and related names and logos are registered trademarks of Robert Bosch GmbH.

The tool communicates with a reverse-engineered, undocumented, unofficial API. Provided "as is", without warranty of any kind. Use entirely at your own risk.

Why a separate MCP server?

The sister projects target different runtimes:

Project

Version

Runtime

User-facing surface

HA Integration

v16.0.1

Home Assistant

UI entities, Lovelace card, automations

Python CLI

v10.12.3

terminal

bosch_camera ... commands

ioBroker Adapter

v1.8.3

ioBroker

datapoints, VIS-2 widgets (BoschCamera + BoschOverview), JSON-config admin UI

Node-RED nodes

v0.4.2-alpha

Node-RED

flow nodes for automation pipelines

Frontend (NiceGUI)

v0.4.2-alpha

standalone web app

dashboard + camera detail + settings UI

MCP Server (this repo)

v1.7.1

Claude clients

MCP tools callable from LLMs

LLM use-cases the existing sisters don't cover:

  • "Take a snapshot of the garden camera and describe what you see."

  • "What was the last motion event on the terrace, and at what time?"

  • "Enable privacy mode on the indoor camera until 22:00, then disable it."

  • "Pan the 360° camera to the left and grab a snapshot."

  • "Summarise today's motion events across all cameras."

These flows require an LLM in the loop — which is exactly what MCP is for.


Architecture

┌─────────────────────────┐      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)    │
                                                                  └─────────────────────────┘

The MCP server is a thin wrapper around the Python CLI's API layer. It does not re-implement OAuth, token refresh, FCM push, RTSP, or RCP — it imports them.

This is a real runtime dependency, not just a doc reference. The server locates bosch_camera.py at process startup via sys.path injection (adapters/cli_bridge.py) rather than a normal pip install dependency — the sister Python CLI tool repo must be checked out on disk, and the MCP server needs to know where. Resolution order: the BOSCH_CAMERA_CLI_PATH environment variable if set, otherwise a fixed default path used by the maintainer's own setup (not portable — override it). Nearly every tool call ends up importing bosch_camera from that path at call time (ensure_cli_importable()), so a missing or wrong path surfaces as an ImportError on the first tool invocation, not at server startup. Practically: clone both repos, then either set BOSCH_CAMERA_CLI_PATH=/path/to/Bosch-Smart-Home-Camera-Tool-Python in the environment the MCP server runs in, or edit DEFAULT_CLI_PATH in adapters/cli_bridge.py for a permanent local install. The same bosch_config.json the CLI tool produces via bosch_camera login is what this server reads for credentials — see Auth model.

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:#000

bosch_camera_lan_ping tool flow

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 (70 total, v1.7.2)

Tool

Description

Returns

bosch_camera_list

List all configured cameras

array of {id, name, model, hw_version, status}

bosch_camera_status

Get online/offline + privacy state for one camera

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_snapshot

LAN-only JPEG capture (no cloud) — HTTP Digest to camera IP

{path, method, timestamp}

bosch_camera_stream_url

LAN-only RTSPS stream URL (no cloud relay) — consumable by ffmpeg/VLC/go2rtc

{camera, rtsps_url, note}

bosch_camera_events

List recent motion/person/audio events

array of {event_id, type, tags, timestamp_iso, has_clip, clip_status}

bosch_camera_privacy_set

Turn privacy mode on/off; prefer_local=True routes to LAN RCP first

{name, status, privacy_mode, ...}

bosch_camera_light_set

Turn spotlight on/off; prefer_local=True routes to LAN RCP first

{name, status, light_on, ...}

bosch_camera_pan

Pan the 360° camera (Gen1 CAMERA_360 only); preset: home (0°) / left (-60°) / right (+60°) / back-left (-120°) / back-right (+120°)

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_notifications_set

Toggle push notifications

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_lan_ping

TCP-probe a camera on LAN port 443 (1.5 s timeout)

{reachable, ip, latency_ms}

bosch_camera_maintenance_status

Fetch current cloud maintenance announcement from community RSS feed

{state, title, link, pub_date, summary, …, recommended_action}

bosch_camera_audio_get

Get microphone level, speaker level, intercom flag (Gen2 only)

{microphone_level, speaker_level, intercom_enabled}

bosch_camera_audio_set

Set microphone level and/or speaker level 0-100 (Gen2 only)

{microphone_level, speaker_level, intercom_enabled}

bosch_camera_intrusion_get

Get intrusion detection config: mode, sensitivity 0-7, distance 1-8 m (Gen2 only)

{mode, sensitivity, distance}

bosch_camera_intrusion_set

Update intrusion detection mode/sensitivity/distance (Gen2 only)

{mode, sensitivity, distance}

bosch_camera_audio_detection_get

Get glass-break + smoke/fire-alarm sound detection config (Gen2 Audio-Plus only)

{glass_break, fire_alarm}

bosch_camera_audio_detection_set

Update glass-break and/or fire-alarm sound detection (Gen2 Audio-Plus only)

{glass_break, fire_alarm}

bosch_camera_wifi

Get WiFi RSSI, SSID, and derived signal quality 0-100 %

{rssi, ssid, signal_strength}

bosch_camera_mjpeg_snapshot

Direct LAN MJPEG snapshot via RTSP inst=3 (Gen2 only, ffmpeg, no cloud roundtrip)

{path, method, timestamp, camera}

bosch_camera_onvif_scopes

Read ONVIF device scopes from camera LAN RCP 0x0a98 (Gen2 only)

{name, hardware, profiles, raw_scopes}

bosch_camera_rcp_version

Read RCP library version from camera LAN opcodes 0xff00 + 0xff04

{primary, secondary, raw_primary_hex, raw_secondary_hex}

bosch_camera_feature_flags

Fetch account-level Bosch cloud feature flags (no camera param)

{FLAG_NAME: bool, ...}

bosch_camera_siren_trigger

Trigger the indoor siren (Gen2 Indoor II only); stop=True to cancel

{name, status, privacy_mode, light_on, last_event_at}

bosch_camera_motion_get

Get motion detection enabled state + sensitivity

{enabled, sensitivity}

bosch_camera_motion_set

Set motion detection enabled and/or sensitivity

{enabled, sensitivity}

bosch_camera_recording_get

Get cloud recording sound setting

{sound_on}

bosch_camera_recording_set

Set cloud recording sound

{sound_on}

bosch_camera_autofollow_get

Get 360° auto-tracking state (Gen1 Indoor only)

{enabled}

bosch_camera_autofollow_set

Set 360° auto-tracking (Gen1 Indoor only)

{enabled}

bosch_camera_privacy_sound_get

Get audible privacy-chime state

{enabled}

bosch_camera_privacy_sound_set

Set audible privacy-chime state

{enabled}

bosch_camera_unread_get

Get unread event count for a camera

{count}

bosch_camera_health_check_all

Bulk health summary for all cameras (status + WiFi + privacy + last-event + unread)

array of per-camera health dicts

bosch_camera_token_status

Local JWT parse — returns validity, expiry, email (no network call)

{valid, expires_in_min, email}

bosch_camera_motion_zones_get

List motion-detection zone rectangles (normalized 0.0-1.0)

array of {x, y, w, h}

bosch_camera_motion_zones_set

Replace all motion zones (full-replace, not merge)

array of {x, y, w, h}

bosch_camera_motion_zones_clear

Remove all motion zones

[]

bosch_camera_privacy_masks_get

List privacy-mask zone rectangles (normalized 0.0-1.0)

array of {x, y, w, h}

bosch_camera_privacy_masks_set

Replace all privacy masks (full-replace, not merge)

array of {x, y, w, h}

bosch_camera_privacy_masks_clear

Remove all privacy masks

[]

bosch_camera_rules_list

List automation (time-schedule) rules for one camera

array of {id, name, active, start, end, days}

bosch_camera_rules_add

Create a new schedule rule

{id, name, active, start, end, days}

bosch_camera_rules_edit

Update an existing rule (partial update)

{id, name, active, start, end, days}

bosch_camera_rules_delete

Delete a rule

{deleted, rule_id}

bosch_camera_friends_list

List camera-sharing friends/invitations (account-level)

array of {id, email, nickname, status, shared_cameras}

bosch_camera_friends_invite

Invite a friend by email (account-level)

{id, email, nickname, status, shared_cameras}

bosch_camera_friends_share

Share one camera with an existing friend (merges with their existing shares)

{shared, friend_id, camera}

bosch_camera_friends_unshare

Revoke all camera shares from a friend

{unshared, friend_id}

bosch_camera_friends_remove

Remove a friend entirely

{removed, friend_id}

bosch_camera_firmware_status

Get current/latest firmware version + update availability

{camera, current, up_to_date, update_available, installing}

bosch_camera_firmware_install

Install the pending firmware update (camera reboots 3-7 min)

{camera, current, up_to_date, update_available, installing}

bosch_camera_siren_duration_set

Set the siren alarm duration, 10-300 s (Gen2 Indoor II only)

{alarm_delay_seconds}

bosch_camera_lighting_schedule_get

Get the LED lighting schedule (outdoor Eyes cameras)

{on_time, off_time, light_on_motion, darkness_threshold, schedule_status}

bosch_camera_lighting_schedule_set

Update the LED lighting schedule (outdoor Eyes cameras)

{on_time, off_time, light_on_motion, darkness_threshold, schedule_status}

bosch_camera_intercom_open

Open a listen-audio session (camera mic → caller); returns an RTSPS URL, listen-only

{camera, rtsps_url, duration, speaker_level_set}

bosch_camera_timestamp_overlay_get

Get whether a date/time overlay is burned into the video

{enabled}

bosch_camera_timestamp_overlay_set

Turn the date/time video overlay on/off

{enabled}

bosch_camera_status_led_get

Get the camera's status LED on/off state (Gen2 only)

{enabled}

bosch_camera_status_led_set

Turn the camera's status LED on/off (Gen2 only)

{enabled}

bosch_camera_lens_elevation_get

Get the lens mounting height in meters (Gen2 only)

{meters}

bosch_camera_lens_elevation_set

Set the lens mounting height, 0.5-5.0 m (Gen2 only)

{meters}

bosch_camera_darkness_threshold_get

Get the day/night lighting threshold + fading mode (Gen2 only)

{threshold_percent, soft_light_fading}

bosch_camera_darkness_threshold_set

Set the day/night lighting threshold and/or fading mode (Gen2 only)

{threshold_percent, soft_light_fading}

bosch_camera_white_balance_get

Get the front light's white balance, -1.0 cool .. 1.0 warm (Gen2 only)

{value}

bosch_camera_white_balance_set

Set the front light's white balance (Gen2 only)

{value}

bosch_camera_led_brightness_get

Get top or bottom LED brightness 0-100 % (Gen2 only)

{position, brightness_percent}

bosch_camera_led_brightness_set

Set top or bottom LED brightness 0-100 % (Gen2 only)

{position, brightness_percent}

bosch_camera_soft_reset

Reboot one camera (soft reset)

{camera, rebooting}

bosch_camera_hard_reset

Factory-reset one camera — DESTRUCTIVE, unpairs the camera; requires confirm=True

{camera, factory_reset}

bosch_camera_rename

Rename a camera via the cloud API

{camera, new_name}

Tools intentionally NOT exposed to LLMs (write-risky / time-consuming):

  • Token refresh (handled silently by the underlying client)

  • Cloud clip download (large payloads)

  • Two-way talk (caller mic → camera speaker): not exposed by the Bosch cloud API at all (same limitation the sister CLI has) — bosch_camera_intercom_open is listen-only

Ported from the HA integration but deliberately NOT added (architecture mismatch — see docs/family-parity-plan.md 2026-08-19 audit for the full reasoning):

  • open_live_connection (explicit session open/keep-alive) — MCP tools are one-shot request/response calls with no persistent background process to hold a session open between calls; bosch_camera_stream_url already mints a fresh, immediately-usable URL per call, which is the MCP-shaped equivalent.

  • Frigate/external-RTSP "front door" (persistent credential-free RTSP server) — same reason: requires a long-running server process, which this stateless tool surface doesn't have.

  • delete_event / send_event_webhook — both operate on HA's own local-disk event-file cache and webhook_url/enable_webhook_delivery config, infrastructure this tool doesn't have (events here are pulled on-demand from the Bosch cloud, never stored locally).

  • AI alert history read-back — HA's ai_alert_store.py reads from hass.config.path-relative files in HA's own storage layout; coupling to that would be fragile and isn't clearly useful when the MCP client is itself typically the LLM doing the analysis.

  • video_quality / stream_mode selects and image_rotation_180 — all three are client-side-only preferences in HA (no Bosch cloud API call at all: quality picks the RTSPS inst= parameter, stream_mode picks LOCAL vs REMOTE, rotation is a display-only CSS/PIL transform) with no persistent per-session state to attach them to here. pan_preset is already covered — bosch_camera_pan(preset=...) has shipped since v1.x.

Reliability — transparent credential rotation

The prefer_local=True LAN-RCP write path (bosch_camera_privacy_set, bosch_camera_light_set) automatically retries once on HTTP 401 after re-fetching fresh Digest credentials from bosch_config.json. No user-visible API change — the retry is silent and the tool result is identical whether or not rotation was needed. This eliminates cold-start failures when the cached Digest nonce has expired. bosch_camera_pan does not currently take a prefer_local parameter — pan always goes through the Bosch cloud.

MCP resources

Resource URI

Description

bosch://cameras

JSON list of all cameras (id, name, model, status, firmware, mac, description)

bosch://cameras/{name}/snapshot.jpg

Latest cached JPEG, or fresh capture if cache empty

bosch://cameras/{name}/events

Last 50 events (motion, person, audio) as JSON list

bosch://cameras is a static resource. The {name} variants are resource templates.

MCP prompts

Prompt

Arguments

Description

daily-camera-summary

hours: int = 24

Multi-step report: events per camera, type breakdown, time distribution, anomaly highlights

pre-leave-check

(none)

Snapshot every camera, describe scene, flag anomalies, recommend indoor privacy mode

Privacy stance — media operations are LAN-only

Snapshots and stream URLs go directly from the MCP host to the camera over the LAN — no Bosch cloud relay. The remaining tools (status, events, privacy/light/pan/notifications) still use the cloud because no local API is currently exposed for those endpoints.

Tool

Path

bosch_camera_snapshot

LAN only — HTTP Digest to camera IP

bosch_camera_stream_url

LAN only — RTSPS via local Bosch TLS proxy

bosch_camera_lan_ping

LAN only — TCP connect to camera port 443

bosch_camera_list / status / events

Bosch cloud (no local API yet)

bosch_camera_privacy_set / light_set (default)

Bosch cloud

bosch_camera_privacy_set / light_set (prefer_local=True)

LAN-RCP first, cloud fallback — Gen2 only

bosch_camera_pan / notifications_set

Bosch cloud (no local API yet)

The MCP host must be on the same network as the cameras for media tools to work. If it isn't, the snapshot/stream tools surface local_unavailable rather than falling back to cloud — by design.

Auth model

Server runs with the user's existing bosch_config.json from the sister Python CLI tool — no separate OAuth flow, no credentials stored by this repo. Generate it once via the CLI's bosch_camera login (browser-based OAuth2 PKCE), then point the MCP server at it:

  • --config <path> / BOSCH_CAMERA_CONFIG=<path> environment variable: explicit path to bosch_config.json.

  • If neither is set, the bridge falls back to whatever get_session_and_cameras()'s default resolution finds next to the sister CLI checkout (see Architecture — the sister CLI's location is itself resolved via BOSCH_CAMERA_CLI_PATH or a fixed default path).

The MCP server never reads or writes credentials beyond what the CLI tool already does (token refresh on 401, atomic save) — it calls straight into the CLI's own session/config code via the cli_bridge import.

Transport modes

Three transport modes are supported via the --transport flag:

Mode

Flag

Use case

stdio

--transport stdio (default)

Claude Code / Claude Desktop — local subprocess

streamable-http

--transport http

Remote / multi-client deployments over HTTP

sse

--transport sse

Legacy SSE clients

HTTP and SSE modes bind to 127.0.0.1:8765 by default (security-safe local-only). Pass --http-host 0.0.0.0 only in trusted, firewalled network environments.

# stdio (default) — used by Claude Code / Claude Desktop
bosch-smart-home-camera-mcp --config ~/.config/bosch-camera/bosch_config.json

# streamable-HTTP — local port for multi-client use
bosch-smart-home-camera-mcp --transport http --http-port 8765

# streamable-HTTP — expose to LAN (ensure firewall rules!)
bosch-smart-home-camera-mcp --transport http --http-host 0.0.0.0 --http-port 8765

Tech stack

  • Python 3.10+

  • mcp — official MCP Python SDK

  • pydantic (already a transitive dep of mcp) for tool schemas

  • Reuse: bosch_camera.py from the sister CLI repo, located at runtime via sys.path injection (BOSCH_CAMERA_CLI_PATH env var or a configurable default) — not a pip-installed dependency, see Architecture

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]

Maintainers: PyPI publishing is automated — pushing a v*.*.* tag triggers the publish-pypi workflow via OIDC Trusted Publisher. Do not run twine upload manually.

claude mcp add bosch-camera -- bosch-smart-home-camera-mcp \
  --config ~/.config/bosch-camera/bosch_config.json

Add to Claude Code — 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/mcp

Add to Claude Desktop

Add the following to your claude_desktop_config.json (usually ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "bosch-camera": {
      "command": "bosch-smart-home-camera-mcp",
      "args": [
        "--config",
        "/path/to/bosch_config.json"
      ]
    }
  }
}

Replace /path/to/bosch_config.json with the actual path to your bosch_config.json (generated by the sister Python CLI tool via bosch_camera login). The server runs as a local stdio subprocess — no network port needed for Claude Desktop.

Repo layout

Bosch-Smart-Home-Camera-Tool-MCP/
├── README.md                         this file
├── CHANGELOG.md                      full version history
├── LICENSE                           MIT
├── pyproject.toml                    build + tool config
├── requirements.txt                  runtime pins (mcp, etc.)
├── requirements-test.txt             pytest, pytest-asyncio, mocks
├── src/
│   └── bosch_camera_mcp/
│       ├── __init__.py
│       ├── server.py                 FastMCP server + all 70 MCP tools
│       ├── adapters/
│       │   ├── cli_bridge.py         sys.path bridge to the sister Python CLI for cloud ops
│       │   └── __init__.py
│       ├── lan_rcp.py                direct LAN HTTPS+Digest for RCP writes
│       ├── cloud_ssl.py              pinned Bosch cloud CA / SSL context (CWE-295)
│       ├── time_utils.py             Bosch timestamp cleanup helpers
│       ├── maintenance.py            cloud maintenance RSS feed fetcher
│       ├── errors.py                 shared error types (MCPError)
│       ├── resources.py              MCP resources (bosch://cameras/…)
│       └── prompts.py                MCP prompts (daily-summary, pre-leave)
├── tests/                            30+ test modules — tool behavior, LAN-RCP/cred-rotation,
│                                      cert pinning, transports, resources, prompts, packaging
├── docs/
│   ├── architecture.md
│   └── release-process.md
└── .gitignore

Release History

  • v0.1.0 — concept doc + skeleton server, all tools defined but not yet implemented (returns NotImplementedError) ✅

  • v0.2.0 — all 8 tools wired: read tools (list, status, events, snapshot) + write tools (privacy, light, pan, notifications) via sys.path injection (Option C) ✅

  • v0.4.0 — resources (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), packaging for pipx/uvx, 24 new tests ✅

  • v1.0.0 — first stable release: 106 tests, published wheel + sdist on GitHub Releases, PyPI publish pending ✅

  • v1.1.0 — LAN-only media path (privacy hardened): bosch_camera_snapshot and new bosch_camera_stream_url go directly to camera over LAN, no Bosch cloud relay for media. 113 tests. ✅

  • v1.2.0bosch_camera_maintenance_status tool: fetches cloud maintenance announcements from community RSS feeds; returns state (active/scheduled/past/recent/unknown/idle), title, time window, link. ✅

  • v1.3.0 — LAN-fallback feature set (ported from HA integration v12.4.10/v12.4.11): bosch_camera_lan_ping tool (TCP-probe any camera on LAN); prefer_local=True on bosch_camera_privacy_set / bosch_camera_light_set (RCP-LAN write path, Gen2, cloud fallback on failure); recommended_action field on bosch_camera_maintenance_status ("check_lan" when active, "wait" when scheduled). 173 tests. ✅

  • v1.3.3 — audio get/set, intrusion detection get/set, WiFi info (cross-port from HA v12.7.0). 16 tools. ✅

  • v1.3.4 — PTZ named presets (bosch_camera_pan preset= accepts home / left / right / back-left / back-right); transparent cred-rotation on 401 for LAN-RCP tools (silent retry, no API change). ✅

  • v1.3.6 — 9 bug fixes from live audit 2026-05-24 (camera list always live from cloud, Gen1/Gen2 hw_version, UUID resolution, events field mapping, audio camelCase, intrusion Gen2 gate, error codes, snapshot timestamp, requirements-test.txt mirror). ✅

  • v1.4.0 — 4 new tools: bosch_camera_mjpeg_snapshot, bosch_camera_onvif_scopes, bosch_camera_rcp_version, bosch_camera_feature_flags. _fetch_rcp_lan async helper. 20 tools total. ✅

  • v1.5.0 — 11 new tools + 8 bug fixes from live-camera audit (4 hardware units, all 4 generations): siren trigger, motion get/set, recording get/set, autofollow get/set, privacy-sound get/set, unread-count, health-check-all, token-status. ✅

  • v1.5.1 — fixed _fetch_rcp_lan (used a non-existent aiohttp.DigestAuthonvif_scopes / rcp_version always failed over LAN; now httpx.DigestAuth). Test coverage 83→98%, fixtures sanitized, CI bumped to Node-24-native action majors. ✅

  • v1.5.2 — dependency hygiene: dropped unused aiohttp runtime dep (test-only now), added pyjwt>=2.13.0 / starlette>=1.0.1 security floors (pip-audit clean), fixed a test that mocked the wrong HTTP stack. ✅

  • v1.5.3 — security patch: pin Bosch cloud CA for the MCP cloud session (CWE-295, GHSA-6qh5-x5m5-vj6v); closes adjacent-network MITM on OAuth tokens. Local TOFU pinning unchanged. ✅

  • v1.5.4 — event timestamps no longer drop the timezone offset: /v11/events returns offset-bearing timestamps (e.g. +02:00[Europe/Berlin]); the server now strips only the trailing [zone] suffix instead of truncating to 19 characters, preserving the explicit UTC offset. ✅

  • v1.5.5camera_events resource now uses eventType + eventTags for correct event classification. ✅

  • v1.6.0 — 2 new tools: bosch_camera_audio_detection_get / bosch_camera_audio_detection_set — glass-break + smoke/fire-alarm sound detection for Gen2 Audio-Plus cameras (cross-port from HA integration v14.2.0). 34 tools total. ✅

  • v1.7.0 — family-parity closeout (docs/family-parity-plan.md §2b): 21 new tools closing the MCP-vs-HA/CLI capability gap — motion zones get/set/clear, privacy masks get/set/clear, automation rules list/add/edit/delete, camera sharing/friends list/invite/share/unshare/remove, firmware status/install (mirrors HA's async_install_firmware guard), siren duration, LED lighting schedule get/set, and a listen-audio intercom tool (camera mic → caller, RTSPS URL; two-way talk is not exposed by Bosch's cloud API at all, same limitation as the sister CLI). CI hardening: coverage gate (--cov-fail-under=96), pip-audit (runtime deps only), pylint, codespell, CodeQL, gitleaks secret-scan, and a dependency-review workflow — Gold-tier parity with the HA integration's quality gates. 55 tools total. ✅

  • v1.7.2 — docs-only: fixed this repo's Login row in the Integration Comparison table, no functional changes. ✅

Releases

Latest: v1.7.2 — see the GitHub release page for full notes: v1.7.2 release notes →

All releases

GitHub Releases page — every tagged version with notes + downloadable assets

Full history

CHANGELOG.md — same notes, browsable inside the repo

Integration Comparison

The Bosch Smart Home Camera reverse-engineered API is exposed via five sibling projects. Pick the one that fits your platform.

Feature

Home Assistant Integration

Python CLI Tool

ioBroker Adapter

MCP Server

Frontend (NiceGUI)

Node-RED

Maturity

v15.0+ — HA Quality Scale Platinum

v10.12+ stable (Mini-NVR BETA)

v1.8+ stable · npm

v1.7+ stable · PyPI

v0.4.0 alpha · PyPI

v0.4.0 alpha · npm

Platform

Home Assistant (HACS)

Standalone Python 3.10+ CLI

ioBroker (npm)

Python 3.10+ · pipx / uvx · stdio + streamable-HTTP for MCP clients (Claude Desktop, Claude Code, custom)

NiceGUI web app · Python 3.10+

Node-RED palette · npm

Login

OAuth2 PKCE (browser)

OAuth2 PKCE (browser)

OAuth2 PKCE (browser)

◑ shares CLI bosch_config.json

◑ shares CLI bosch_config.json

◑ refresh-token from CLI

Snapshots

✅ Native Camera.image

snapshot command

✅ File-store + base64 DP

bosch_camera_snapshot (LAN-only)

✅ live + event fallback

snapshot node

Live RTSP stream (LAN)

✅ via HA Stream component

✅ ffmpeg/RTSPS output

✅ TLS proxy → local RTSP

bosch_camera_stream_url (LAN-only, no cloud relay)

◑ internal (go2rtc)

stream-url node (URL only)

WebRTC (sub-second latency)

✅ via integrated go2rtc

(v10.6.0) live --webrtc

✅ via go2rtc (else snapshot)

Dual-stream URL (main + sub)

sensor.bosch_<n>_stream_url + _sub (v12.4.0, opt-in per cam)

info shows both · live --sub (v10.5.0)

stream_url + stream_url_sub (v0.5.3 experimental)

bosch_camera_stream_url — main stream only

(sub-stream only)

◑ URL only — no sub option

External recorder (BlueIris, Frigate)

✅ via go2rtc

✅ stdout pipe

✅ Digest-creds URL + LAN bind option

✅ URL returned, hand off to ffmpeg / go2rtc downstream

stream-url → wire downstream

Privacy mode

✅ switch entity

✅ command

✅ DP

bosch_camera_privacy_set (LAN-fallback via prefer_local)

✅ toggle

privacy node

Front spotlight (Gen1/Gen2)

✅ light entity

✅ command

✅ DP

bosch_camera_light_set (LAN-fallback)

(Phase 2 stub)

bosch-camera-light node (v0.3.0-alpha)

RGB wallwasher (Gen2 Outdoor II)

✅ light w/ RGB

◑ on/off only — no RGB

✅ color + brightness DPs

(on/off only — RGB not exposed)

◑ on/off + intensity only — no RGB (v0.3.0-alpha)

Panic-alarm siren

✅ button entity (Gen2 Indoor II)

✅ command (Gen2 Indoor II only)

✅ DP

bosch_camera_siren_trigger (Gen2 Indoor II only)

✅ trigger + duration (Gen2 Indoor II only)

Firmware update

✅ Update-Entity + Repairs fix-flow, install button (v14.4.10)

✅ status + install (v10.11.0)

✅ firmware states + install trigger, write-lock guard (v1.8.0)

✅ status + install tools (v1.7.0)

◑ read-only status display, no install action

✅ status + install nodes (v0.4.0-alpha)

Image rotation 180°

✅ switch

✅ DP

Motion / person / audio events

✅ FCM push + polling fallback

watch command only (events cmd removed)

✅ FCM push + polling fallback

bosch_camera_events (on-demand pull)

◑ pull-only events table

event node (poll)

Motion edge-trigger state

binary_sensor.motion

n/a

motion_active DP (v0.5.3)

n/a (request-response, no subscription)

Auto-snapshot on motion

✅ refreshes Camera entity

n/a

✅ writes last_event_image base64 (v0.5.3)

n/a (no background loop)

Synthetic motion trigger (external sensor)

✅ service

n/a

✅ DP

Motion zones / privacy masks

✅ read + write

✅ read + write

✅ read + write (v1.8.0)

✅ get / set / clear (v1.7.0)

(no visual editor yet)

Automation rules / schedules

✅ read + write

✅ read + write

✅ full CRUD (v1.8.0)

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

✅ full CRUD (list/add/edit/delete)

Lighting schedule

✅ read (write via service, Gen1 Eyes Outdoor only)

✅ read + write

✅ read (Gen1-only, v1.2.0)

✅ get / set (v1.7.0)

✅ read + write (outdoor Eyes cameras)

Cloud clip download (history ~30 d)

✅ via Media Browser

(parked — no community request yet)

(intentionally not exposed — large payloads)

(use CLI)

clip_url in event payload

Mini-NVR (local recording)

✅ continuous + event-buffered, ring-buffer preroll (v11.2.0 BETA → v14.7.0 modes)

◑ event-triggered segment muxing, no preroll ring (v10.7.0 BETA)

(delegates to external recorder via credential-free RTSP endpoint)

(no NVR concept)

◑ continuous only, no event-buffered (v0.4.0-alpha)

◑ continuous only via bosch-camera-nvr-record node (v0.4.0-alpha)

SMB / NAS clip upload

(v10.7.0 BETA)

Camera sharing (friends)

✅ services (share / invite / list)

✅ command

✅ share / invite / remove (Gen2 only, v1.8.0)

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

✅ list/invite/remove/share/unshare

Pan / tilt (360° Gen1)

✅ services

✅ command

pan_position DP

bosch_camera_pan

✅ slider wired to live API

Named pan presets (home / left / right / back-left / back-right)

✅ opt-in select entity

pan --preset flag

pan_preset DP

bosch_camera_pan preset=

Two-way audio / intercom

✅ command

◑ listen-only bosch_camera_intercom_open (v1.7.0)

Webhook delivery on events

✅ service + opt-in options

watch --webhook URL

✅ via MQTT bridge

(request-response model)

MQTT event bridge (motion / audio / person)

n/a (HA event bus native)

n/a (single-run)

✅ admin-config

n/a

Apple HomeKit (via HA Core bridge)

✅ documented

n/a

n/a

n/a

n/a

n/a

Snapshot scheduler / time-lapse

✅ examples/ YAML

✅ cron + ffmpeg examples

✅ Blockly example

n/a

Native dashboard card / widget

✅ 2 Lovelace cards (single + grid)

n/a

✅ 2 vis-2 widgets — BoschCamera + BoschOverview multi-cam

n/a

(is itself a web dashboard)

Picture-in-Picture survives backgrounded tab

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

n/a (no UI)

✅ own PiP + freeze-recovery, Web-Worker heartbeat (v1.7.2/v1.7.3)

n/a (no UI)

✅ reconnect-timeout + freeze-recovery (v0.4.0-alpha)

n/a (no UI)

Cloud-relay REMOTE fallback

✅ auto-switch when LAN unreachable

✅ remote mode

(LOCAL-only by design)

(media LAN-only; status/events via cloud)

◑ inherits CLI

◑ REMOTE opt (manual)

Browser-based admin / config UI

✅ HA Config Flow

n/a (CLI)

✅ JSON-config tabs

n/a (LLM-mediated; config via CLI / MCP client)

✅ Settings page

◑ editor config node

UI languages

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 (no UI — LLM is the front-end)

◑ backend i18n · UI mostly EN

n/a (English only)

Legend: ✅ supported · ❌ not supported / not planned · n/a not applicable for this platform.

All four projects share the same reverse-engineered Cloud API + RCP protocol research, but evolve independently. The Home Assistant integration is the most feature-complete reference implementation; the Python CLI is the lowest-level / scriptable surface; the ioBroker adapter targets VIS dashboards and Blockly automations; the MCP server exposes a curated, LAN-first tool surface to MCP clients (Claude Desktop, Claude Code, custom) for natural-language camera control.


Part of a five-implementation family for Bosch Smart Home Cameras (plus an alpha frontend):

Implementation

Repo

Status

🏆 Home Assistant Integration

Bosch-Smart-Home-Camera-Tool-HomeAssistant

v16.0.1 · HA Quality Scale Platinum · production-ready

🐍 Python CLI

Bosch-Smart-Home-Camera-Tool-Python

v10.12.3 · Mini-NVR + SMB upload (BETA) · LAN-fallback (ping / --local) · PTZ presets · webhook delivery · capture / research / standalone

🟢 ioBroker Adapter

ioBroker.bosch-smart-home-camera

v1.8.3 · stable · npm · privacy-toggle Digest rotation · MQTT bridge · PTZ presets · VIS-2 widgets (BoschCamera + BoschOverview)

🤖 MCP Server (this repo)

Bosch-Smart-Home-Camera-Tool-MCP

v1.7.2 · cred-rotation · PTZ presets · TOFU cert pinning · cloud CA pinned (CWE-295) · LAN-ping + prefer_local · zones/masks/rules/friends/firmware-install · Claude Code / Claude Desktop integration

🔴 Node-RED nodes (alpha)

Bosch-Smart-Home-Camera-Tool-NodeRED

v0.4.2-alpha · nodes for event / snapshot / privacy / config / more

Also: Bosch Smart Home Camera — Python Frontend (NiceGUI) — v0.4.2-alpha (dashboard + camera detail + settings) — community interest welcome

HA stays the reference implementation — features land there first; the Python CLI, ioBroker Adapter and MCP Server catch up over time.


License

MIT — see LICENSE.

Available Tools

70 tools
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 (featureSupport.sound=true). Raises hardware_unsupported for Gen1 cameras. Ported from HA integration v14.2.0 (BoschGlassBreakDetectionSwitch / BoschFireAlarmDetectionSwitch).

Returns {glass_break, fire_alarm} (Bosch API fields detectGlassBreak / detectFireAlarm).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
fire_alarmNoWhether smoke/fire-alarm sound detection is enabled (Bosch API field 'detectFireAlarm')
glass_breakNoWhether glass-break sound detection is enabled (Bosch API field 'detectGlassBreak')

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries the full burden. Discloses the return format ({glass_break, fire_alarm}) and a key error case (hardware_unsupported for Gen1). Does not mention authentication, rate limits, or other potential errors, but is sufficiently transparent for a simple read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the main purpose, followed by compatibility and return format. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, simple return) and the existence of an output schema, the description covers purpose, constraints, error behavior, and return format comprehensively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description adds minimal value beyond the parameter name. The 'camera' parameter is not described in terms of format or expected values (e.g., serial number vs device ID). With only one parameter, the description should provide more context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'get' and resource 'glass-break + smoke/fire-alarm sound detection config' for a Gen2 camera. It distinguishes from siblings like 'bosch_camera_audio_detection_set' and other audio tools by specifying the exact configuration returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit compatibility conditions: only Gen2 Audio-Plus cameras with featureSupport.sound=true, and raises hardware_unsupported for Gen1. However, lacks explicit guidance on when to use this tool versus related siblings like bosch_camera_audio_get or privacy_sound_get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_audio_detection_setA

Update glass-break and/or fire-alarm sound detection for one Gen2 camera.

Gen2 Audio-Plus-only feature — raises hardware_unsupported for Gen1 cameras. At least one of glass_break or fire_alarm must be provided.

Read-modify-write: the current config is fetched first, only the provided field(s) are merged in, and both detectGlassBreak and detectFireAlarm are always sent together on the PUT — Bosch's API silently resets whichever field is omitted (same requirement as intrusionDetectionConfig).

Returns the updated {glass_break, fire_alarm} after write.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
fire_alarmNo
glass_breakNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
fire_alarmNoWhether smoke/fire-alarm sound detection is enabled (Bosch API field 'detectFireAlarm')
glass_breakNoWhether glass-break sound detection is enabled (Bosch API field 'detectGlassBreak')

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses read-modify-write behavior, the fact that both fields are always sent on PUT (Bosch API resets omitted fields), and the return value. This is highly transparent for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Six sentences, each providing essential information. Front-loaded with main action. No wasted words. Important details are included without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, read-modify-write, API quirk, Gen2 requirement), the description covers all necessary context. Output schema exists, but description still succinctly notes return value. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. It explains that glass_break and fire_alarm are boolean, at least one required, and how they merge with current config. Does not explain camera parameter, but that is self-explanatory as device identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it updates glass-break and fire-alarm detection for Gen2 cameras. The verb 'update' and specific resource 'audio detection' are explicit. It distinguishes from siblings like bosch_camera_audio_detection_get (read) and bosch_camera_audio_set (general audio settings).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states it is a Gen2 Audio-Plus-only feature and raises hardware_unsupported for Gen1. Specifies that at least one of glass_break or fire_alarm must be provided. However, it does not explicitly compare with sibling tools like bosch_camera_audio_detection_get, though the usage is clear from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_audio_getA

Get the microphone and speaker level settings for one Gen2 camera.

Only for cameras with featureSupport.sound=true (Gen2 Indoor II and Gen2 Outdoor II). Raises hardware_unsupported immediately for Gen1 cameras or Gen2 cameras without audio hardware.

Returns {microphone_level, speaker_level, intercom_enabled}. intercom_enabled is None for cameras without a two-way intercom (e.g. Outdoor II).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
speaker_levelNoSpeaker / intercom playback volume (0-100)
intercom_enabledNoTwo-way intercom enabled flag (Gen2 Indoor II only; None for cameras without intercom)
microphone_levelNoMicrophone recording level (0-100)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It details the return structure ({microphone_level, speaker_level, intercom_enabled}) and explains the intercom_enabled field can be None. It also mentions the hardware_unsupported error condition. This is sufficient transparency for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with only 4 sentences, each adding value. It is front-loaded with the core purpose and efficiently covers scope, error condition, and return details without unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (implied by listing return fields), the description provides all necessary context: purpose, hardware requirements, error behavior, and return structure. It is fully adequate for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% (no parameter descriptions in schema). While the description does not explicitly describe the 'camera' parameter, it provides context about which cameras are valid (Gen2 with sound=true), implying the parameter is a camera identifier. However, it does not specify format or constraints on the parameter value, so it partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'microphone and speaker level settings', and qualifies it as 'for one Gen2 camera', distinguishing it from sibling tools like bosch_camera_audio_set (set) and bosch_camera_audio_detection_get (get detection settings).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly limits usage to cameras with featureSupport.sound=true, specifically Gen2 Indoor II and Gen2 Outdoor II, and warns that it raises an error for Gen1 or unsupported Gen2 cameras. It does not explicitly name alternative tools for unsupported cases, but the guidance is clear and practical.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_audio_setA

Set the microphone level and/or speaker level for one Gen2 camera.

Only for cameras with featureSupport.sound=true (Gen2 Indoor II and Gen2 Outdoor II). Raises hardware_unsupported for cameras without audio hardware. At least one of mic_level or speaker_level must be provided.

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 {microphone_level, speaker_level, intercom_enabled} after write.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
mic_levelNo
speaker_levelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
speaker_levelNoSpeaker / intercom playback volume (0-100)
intercom_enabledNoTwo-way intercom enabled flag (Gen2 Indoor II only; None for cameras without intercom)
microphone_levelNoMicrophone recording level (0-100)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description fully discloses: hardware unsupported error, range constraints, persistence of unspecified fields, and return value structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise but slightly dense; could be broken into bullet points, but all information is front-loaded and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisites, errors, constraints, behavior with unspecified fields, and return fields. Output schema exists, but description sufficiently describes return structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description explains parameter roles, optional nature, range (0-100), and at-least-one requirement, adding substantial meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool sets microphone and/or speaker levels for Gen2 cameras with specific feature support, distinguishing it from siblings like bosch_camera_audio_get which retrieves levels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly specifies conditions (featureSupport.sound=true), raises hardware_unsupported otherwise, and requires at least one of mic_level/speaker_level. Lacks explicit alternatives but provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_autofollow_getA

Get auto-follow (360° auto-tracking) state for one camera.

Returns {enabled}. Only meaningful for 360° cameras with panLimit > 0 (Gen1 CAMERA_360 indoor). Raises hardware_unsupported for non-360° cameras.

API: GET /v11/video_inputs/{id}/autofollow.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether auto-follow tracking is enabled

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses return format ({enabled}), conditions for meaningful use, error case for unsupported cameras, and underlying API endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with purpose, no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameter, return format, conditions, and error case. Output schema exists, so return details are sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter 'camera', which is intuitive from tool name. Description could clarify it's a camera ID but schema coverage is 0% and no additional semantics added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it gets the auto-follow state for one camera. The description distinguishes it from 'set' sibling and specifies the camera type condition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for reading state, but lacks explicit comparison to 'set' tool. Provides context on when it's meaningful (360° cameras with panLimit>0) and error handling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_autofollow_setA

Enable or disable 360° auto-tracking for one camera.

Only available on 360° indoor cameras (panLimit > 0). Raises hardware_unsupported for non-360° cameras.

API: PUT /v11/video_inputs/{id}/autofollow Body: {"result": bool}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether auto-follow tracking is enabled

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the main behavior (enable/disable), hardware dependency, and error condition. It does not detail side effects or response format, but for a toggle tool this is adequate. No contradiction with annotations as none exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, each adding value. The first sentence sets the purpose, the second adds a usage constraint, and the third provides the API endpoint and body format. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists (not shown but indicated), the description need not explain return values. It covers the hardware requirement, error handling, and API details. For a simple set operation, this is near-complete, though adding a note that it performs a write operation would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains that 'enabled' is a boolean for turning auto-tracking on/off, but does not specify the format or expected values for the 'camera' parameter (likely an ID string). The API body example clarifies the structure, yet the camera parameter remains ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool enables or disables 360° auto-tracking for one camera, using a specific verb and resource. It distinguishes from siblings, such as bosch_camera_autofollow_get which retrieves the state, by indicating this tool is for setting the autofollow state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context on when to use the tool: only for 360° indoor cameras with panLimit > 0. It also specifies the error raised for unsupported camera types. However, it does not explicitly state when not to use it, such as for non-360° cameras, beyond the error condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_darkness_threshold_getA

Get the day/night lighting threshold and fading mode. Gen2 cameras only.

0% = always day, 100% = always night. API: GET /v11/video_inputs/{id}/lighting.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
soft_light_fadingYesWhether lights fade smoothly (True) or snap on/off (False)
threshold_percentYesAmbient-darkness trigger threshold, 0=always day .. 100=always night

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of explaining behavior. It discloses the GET endpoint, the read-only nature through 'Get', the camera-generation limitation, and the interpretation of ranges (0% = always day, 100% = always night). This is useful contextual behavior beyond just restating the tool's name. It does not go into authentication or rate limits, but those are not present in any annotation and may not be expected for a simple GET.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short lines cover the high-level operation, compatibility, value semantics, and the HTTP endpoint. Every sentence earns its place and there is no filler. It is appropriately front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only operation, the description covers the purpose, important range interpretation, and API endpoint. An output schema exists and can define the response format. But because annotations and schema param descriptions are absent, the description falls short of fully explaining the camera param, and it doesn't mention whether any special auth or camera state is needed. It is useful but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, 'camera', and the schema gives no description for it. The description's API line, 'GET /v11/video_inputs/{id}/lighting', obliquely suggests that the camera parameter corresponds to an ID, but it never explicitly maps 'camera' to '{id}' or explains expected values or format. With 0% schema coverage, the description should compensate more decisively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and a specific resource ('day/night lighting threshold and fading mode'), and it adds a compatibility restriction ('Gen2 cameras only'). It doesn't explicitly name sibling tools to differentiate itself, but the tool name and the read-oriented phrasing make its purpose unmistakable. A small deduction because it doesn't contrast itself with related tools like bosch_camera_darkness_threshold_set or bosch_camera_lighting_schedule_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear compatibility constraint: 'Gen2 cameras only.' This implies when not to use the tool, but it doesn't explicitly say 'use this when reading the threshold; use darkness_threshold_set when writing' or identify alternative siblings. The usage context is mostly inferable from the name and context signals, but it lacks direct when-to-use vs. alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_darkness_threshold_setA

Set the day/night lighting threshold and/or fading mode. Gen2 cameras only.

At least one of threshold_percent (0-100) or soft_light_fading must be provided; the other field is preserved from the camera's current setting.

API: PUT /v11/video_inputs/{id}/lighting Body: {"darknessThreshold", "softLightFading"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
soft_light_fadingNo
threshold_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
soft_light_fadingYesWhether lights fade smoothly (True) or snap on/off (False)
threshold_percentYesAmbient-darkness trigger threshold, 0=always day .. 100=always night

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It states that the operation is a mutation, that unspecified fields are preserved, and that only Gen2 cameras are supported. It also gives the exact API endpoint and body fields, which helps the agent anticipate the underlying request.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: the main purpose leads, then the key constraint, then the API details. Each sentence serves a purpose and there is minimal redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter setter with an output schema and no annotations, the description is largely complete. It captures the core operation, the parameter constraint, the partial-update semantics, and the low-level API mapping. It omits permission requirements, but that is a relatively minor gap for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions are missing entirely (0% coverage), so the description must compensate. It does: it gives the 0-100 range for threshold_percent, explains soft_light_fading as a fading mode, and clarifies the 'at least one required' constraint. The camera parameter is not described, but the API path implies it is the camera ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set the day/night lighting threshold and/or fading mode.' It also scopes the tool to Gen2 cameras only, which clearly identifies its purpose and distinguishes it from the corresponding getter, bosch_camera_darkness_threshold_get, and from other lighting tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful usage constraints: Gen2 cameras only, and at least one of threshold_percent or soft_light_fading must be provided. It clearly implies when to use this tool versus the matching getter, and explains the partial-update behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_eventsB

Return the most recent motion / person / audio events for one camera.

Each item contains: event_id, type, timestamp_iso, has_clip.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must convey behavior. It states it returns 'most recent' events, which is vague regarding time window. It does not explicitly confirm read-only status, but returns data. Lacks details on ordering, pagination, or authentication. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is very short: two sentences. Front-loaded with purpose, then lists output fields. No unnecessary words. Could add more detail without sacrificing conciseness, but current structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 params, no annotations, and an output schema, the description covers the basic purpose and output fields. However, it lacks usage context among 30+ siblings, parameter details, and behavioral specifics. Minimal but functional; leaves gaps for an AI agent to resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. Description does not explain the camera parameter (expected value) or the limit parameter (default, meaning). It only lists output fields. The schema provides types but adds no semantic context beyond the description's purpose. Agent needs more param info to use correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it returns the most recent motion/person/audio events for a specific camera. The verb 'Return' and resource 'events' are specific. Among siblings like bosch_camera_motion_get and bosch_camera_audio_get, this tool aggregates event types, distinguishing it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like bosch_camera_motion_get or bosch_camera_unread_get. Description does not mention when-not-to-use or provide context for selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses the HTTP method (GET), the return type (raw dict of booleans), and that it's account-level. However, it lacks details on authentication, rate limits, or potential side effects, though for a read operation this is minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at four sentences, front-loads the action and endpoint, and includes a relevant example. Every sentence serves a purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and a simple return type, the description fully explains what it does, what it returns (with example), and the scope (account-level). It meets all needs for correct selection and invocation given the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty (0 parameters), and schema description coverage is 100%. The description adds value by explicitly stating there is no camera parameter and that flags are account-level, which clarifies the scope beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches account-level Bosch cloud feature flags, returns a raw dict of flag names to booleans, and provides an example. It distinguishes itself from sibling tools which are camera-specific by explicitly noting no camera parameter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says 'Useful for discovering which Bosch platform features are active for this account' and emphasizes 'No camera parameter — flags are account-level.' This implies when to use it, but does not explicitly mention when not to use it or name alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_firmware_installA

Install the pending firmware update for one camera right now.

Mirrors the HA integration's async_install_firmware guard: raises invalid_argument if an install is already in progress, or if there is no pending update to install (already up to date). The camera reboots for roughly 3-7 minutes after the install starts; this call returns as soon as Bosch accepts the request, it does not wait for the reboot to finish.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
cameraYesCamera name
currentNoCurrently installed version
installingNoWhether an install is currently in progress
up_to_dateNoWhether the camera is already on the latest firmware
update_availableNoPending update's target version, if any

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description effectively discloses key behaviors: it raises invalid_argument for concurrent installs or when up-to-date, and explains that the camera reboots for 3-7 minutes while the call returns immediately. Missing details like authentication or return value, but sufficient for a straightforward action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each providing essential information: the action, error guards, and post-install behavior. No redundant phrases; concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action and notable behaviors but omits parameter details and any mention of the output schema (despite its presence). Given the tool's simplicity, this is a noticeable gap, though the output schema likely documents return values separately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain the 'camera' parameter (e.g., what values it accepts). It only mentions 'one camera' vaguely. This gap forces the agent to infer the parameter's meaning from the schema alone, which is inadequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Install) and resource (pending firmware update for one camera). It distinguishes the tool from its sibling 'bosch_camera_firmware_status', which checks for updates, making it clear that this tool performs the installation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (when a pending update exists) and specifies error conditions (install in progress, no pending update). It could be more explicit about prerequisites (e.g., check status first) and alternatives, but context from siblings helps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_firmware_statusB

Get the current/latest firmware version and update-availability for one camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
cameraYesCamera name
currentNoCurrently installed version
installingNoWhether an install is currently in progress
up_to_dateNoWhether the camera is already on the latest firmware
update_availableNoPending update's target version, if any

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description bears full responsibility. It only states the operation is a get (read), but does not disclose behavioral traits like permissions, rate limits, or behavior when camera is offline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence of 12 words with no extra verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter and an output schema. The description covers the core purpose, but lacks parameter details. However, for a simple info retrieval tool, it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not clarify the 'camera' parameter format (e.g., ID, name, serial). It only says 'one camera', adding no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Get), resource (firmware version and update-availability), and scope (one camera). It distinguishes from sibling tool 'bosch_camera_firmware_install' which installs firmware.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or alternatives. Usage is implied as checking firmware status before an install, but no prerequisites or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_friends_inviteB

Invite a new friend (by email) to share cameras with. Account-level.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesFriend id (Bosch API field 'id')
emailNoFriend's email address
statusNoInvitation status, e.g. ACCEPTED/PENDING
nicknameNoDisplay nickname
shared_camerasNoCamera ids currently shared with this friend

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must cover behavioral aspects. It only states the action, omitting details like authorization requirements, whether the invite is sent immediately, idempotency, or error cases (e.g., duplicate email).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short phrases. It is front-loaded, but the brevity sacrifices necessary details for an agent to use the tool effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one parameter and an output schema, the description should clarify the result (e.g., success message, pending invite). It lacks prerequisites and side effects, making it incomplete for reliable agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds minimal value beyond the parameter name 'email' by noting '(by email)'. It does not explain format, validation, or implications.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Invite' and the resource 'a new friend (by email)' to share cameras, and specifies it is account-level. It distinguishes from sibling tools like friends_list, friends_remove, friends_share, and friends_unshare.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use: to invite someone via email. It mentions 'Account-level' which clarifies scope. However, it does not provide when-not-to-use or explicitly mention alternatives among sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_friends_listA

List all friends/invitations this account has shared cameras with.

No camera parameter — friends are account-level, not per-camera.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explains the scope and that it lists both friends and invitations, but it does not disclose whether it returns pending or accepted ones, or require any authentication details. For a read-only list tool, the description is adequate but minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the verb, and contains no redundant information. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and the simplicity of the tool (no parameters), the description is sufficiently complete. It could optionally mention the format of the response, but overall it provides necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema coverage is effectively 100%. The description adds no parameter information, but none is needed. Baseline for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'friends/invitations this account has shared cameras with'. It also clarifies the scope as account-level, distinguishing it from per-camera tools like bosch_camera_friends_share.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'No camera parameter — friends are account-level, not per-camera,' helping the agent understand when to use this tool. However, it lacks explicit comparisons to sibling tools like bosch_camera_friends_invite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_friends_removeA

Remove a friend entirely (revokes shares and deletes the invitation/friendship).

Returns {removed, friend_id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
friend_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses destructive behavior (removes entirely) and return format, going beyond basic purpose. It does not cover authentication or reversibility, but it is transparent about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-loaded with key information and no unnecessary words. Highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, side effects, and return format, but lacks parameter documentation and prerequisites (e.g., 'friend_id must exist'). Adequate for a simple tool but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the required 'friend_id' parameter (e.g., how to obtain it or its format). No added value beyond the schema structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Remove a friend entirely' with specific side effects (revokes shares, deletes invitation/friendship), which distinguishes it from sibling tools like friends_invite, friends_share, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for final removal but does not explicitly say when to use it vs alternatives like friends_unshare. No when-not or comparative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_friends_shareA

Share one camera with an existing friend.

days limits the share to a time window starting now; omit for an unlimited share. Returns {shared, friend_id, camera}.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
cameraYes
friend_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden, disclosing that 'days' limits share duration and that omitting it gives unlimited sharing. It also mentions the return format. However, it omits error conditions or idempotency details, which are partially mitigated by the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences clearly state purpose, parameter behavior, and return value. No redundant information, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no annotations and an output schema only hinted at in the description, the description covers purpose, parameter semantics, and return format. However, it lacks error handling details, prerequisites (e.g., friend must exist), and whether sharing is additive or replaces existing shares.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the 'days' parameter and its optionality, but provides no additional details for 'camera' or 'friend_id'. The other parameters are self-explanatory from context, but more explicit semantics would be beneficial given the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Share one camera with an existing friend,' specifying the verb, resource, and target audience. This effectively distinguishes it from sibling tools like bosch_camera_friends_invite (inviting new friends) and bosch_camera_friends_unshare (removing sharing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies using this tool for sharing with an existing friend, contrasting with invite for new friends, but does not explicitly state when to use it versus alternatives. No exclusions or when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_friends_unshareA

Revoke ALL camera shares from a friend (the friend entry itself remains).

Returns {unshared, friend_id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
friend_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses that the action revokes all shares, the friend entry persists (non-destructive to friend), and the return format. It lacks details on side effects or prerequisites but is adequate for a simple operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: first states action and side effect, second describes return. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (1 param, implied output schema), the description covers the essential behavior and return. It could mention that the friend must exist, but overall it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explain what 'friend_id' is or how to obtain it. The parameter name alone is insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Revoke ALL camera shares') and distinguishes from related siblings (e.g., bosch_camera_friends_remove removes the friend, bosch_camera_friends_share adds shares) by noting the friend entry remains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of siblings (friends_share, friends_remove, etc.) implies when to use this tool (to revoke shares without removing the friend), but it does not explicitly state alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_hard_resetA

Factory-reset one camera (hard reset). DESTRUCTIVE.

Unpairs the camera from the Bosch account — it must be re-commissioned from scratch via the Bosch app before it works again. Requires confirm=True or raises invalid_argument without calling the API.

API: PUT /v11/video_inputs/{id}/hard_reset (empty body).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries full behavioral burden. It discloses destructive impact, account-unpairing, the need to re-commission the camera, confirmation requirement, the error behavior, and the API endpoint called.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with the critical DESTRUCTIVE label, and every sentence earns its place: what it does, why it is dangerous, what prerequisite must be set, and the exact API call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this tool's destructive nature, the description covers every essential bit an agent needs: purpose, side effects, required confirm flag, error when not set, and the underlying endpoint. Output schema exists, so return-value details are not required here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the confirm parameter thoroughly—boolean required or invalid_argument is raised—and connects camera to the API path. It never explicitly defines what value `camera` should take, but the parameter name and endpoint context make this mostly inferable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names an exact operation—factory-reset one camera via an explicit API endpoint—and clearly differentiates itself from the many camera siblings by calling the operation DESTRUCTIVE and noting it unpairs the camera from the Bosch account. This makes it unambiguous compared to soft_reset and other non-destructive tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly conveys the consequence of use (unpairing and full re-commissioning), which tells an agent when this is appropriate. It does not name an explicit alternative like soft_reset, but the destructive-consequence context provides clear usage guidance without needing exclusions spell out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 error field rather than raising, so a single failing camera does not abort the entire check.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses key behavioral traits: errors per camera are captured in the 'error' field instead of raising exceptions, and the return fields are listed. This goes beyond minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences, front-loaded with the core purpose. Every sentence adds value: purpose, return values, error handling. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description sufficiently explains its behavior, return fields, and error handling. It covers what an agent needs to know for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%. The description adds value by explaining that the check covers all cameras without needing parameters. Baseline for 0 params is 4, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'health check' and resource 'ALL configured cameras in one call'. It distinguishes from sibling tools that operate on individual cameras or settings by emphasizing bulk operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it 'Replaces 4+ separate MCP calls for dashboard use', indicating when to use it for aggregated overview. However, it does not specify scenarios where this tool should not be used, but the context from sibling tools makes it clear that individual checks are alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 intercom command — it falls back to ffplay for listen-only playback). The returned URL is consumable by ffmpeg/ffplay/VLC; the MCP server does not itself play audio.

Flow: optionally sets the camera's speaker level (full-body PUT to /audio, preserving other fields), then opens a live connection via PUT /v11/video_inputs/{id}/connection (tries REMOTE then LOCAL) and builds an rtsps:// URL with enableaudio=1.

Args: camera: Camera name (case-insensitive). duration: Requested session duration in seconds (embedded in the URL as maxSessionDuration), default 60. speaker_level: Optional 0-100 speaker level to set before opening the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
durationNo
speaker_levelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
cameraYesCanonical camera name
durationYesRequested session duration in seconds
rtsps_urlYesCloud-proxy RTSPS URL with enableaudio=1, consumable by ffmpeg/ffplay/VLC
speaker_level_setNoSpeaker level actually applied (0-100), or None if not requested/failed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavioral aspects: listen-only limitation, optional speaker level setting, connection flow (REMOTE then LOCAL), and URL construction with enableaudio=1. It also notes the server does not play audio, providing complete transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed and well-structured with paragraphs and a bullet list of arguments. It is longer than minimal but each sentence adds value. Minor redundancy could be trimmed, but overall effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity and that output schema exists, the description appropriately explains the return value (RTSPS URL) and the complete workflow. No critical gaps remain for an agent to correctly invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet the description explains each parameter: camera (case-insensitive name), duration (default 60s, embedded as maxSessionDuration), and speaker_level (optional 0-100). It adds practical context beyond the schema, fully compensating for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as opening a listen-audio session tunnel and returning an RTSPS URL. It explicitly states 'listen-only' and distinguishes from other intercom functions. The verb+resource combination is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises that the tool is listen-only and that true two-way talk is not supported, referencing the Python CLI limitation. It details the intended usage flow but does not explicitly state when to avoid using this tool in favor of siblings, though the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_intrusion_getA

Get the intrusion detection configuration for one Gen2 camera.

Returns {mode, sensitivity, distance}. Only available on Gen2 cameras (has_sound=true in config is reused as the Gen2 gate; intrusion detection is a Gen2-only feature). Raises hardware_unsupported for Gen1 cameras.

mode: PERSON | STANDARD | HIGH_SENSITIVITY | ZONES | ALL_MOTIONS | ONLY_HUMANS (maps to Bosch API field detectionMode). sensitivity: 0 (low) to 7 (high) — confirmed range FW 9.40+. distance: detection range in meters, 1-8 (Bosch API limit).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNoDetection mode (Bosch API field 'detectionMode'). Valid: PERSON | STANDARD | HIGH_SENSITIVITY | ZONES | ALL_MOTIONS | ONLY_HUMANS. Corrected 2026-05-28 — previously documented as OFF|ACTIVE|SCHEDULED which Bosch silently ignored because both the field name and the value set were wrong.
distanceNoDetection distance in meters (1-8)
sensitivityNoDetection sensitivity (0-7; 0=low, 7=high)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. Discloses return tuple structure, field meanings, valid ranges, and error condition for Gen1. Good behavioral coverage for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise with front-loaded purpose. Field details are structured in a code block, efficient but slightly lengthy. Could be trimmed if output schema covers returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Completeness is high given output schema existence. Description adds value by explaining return fields, detection mode mapping, and the Gen2 identification method.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description should compensate. The only parameter 'camera' is self-explanatory, but no additional format or usage guidance is provided. Adequate for a simple string parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'Get' and resource 'intrusion detection configuration' for one Gen2 camera. Distinguishes from sibling bosch_camera_intrusion_set and specifies Gen2-only scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states Gen2-only availability and raises hardware_unsupported for Gen1 cameras. Provides clear context for when to use, though no explicit alternative for Gen1 is suggested.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_intrusion_setA

Update the intrusion detection configuration for one Gen2 camera.

Gen2-only feature — raises hardware_unsupported for Gen1 cameras. At least one parameter must be provided.

mode: PERSON | STANDARD | HIGH_SENSITIVITY | ZONES | ALL_MOTIONS | ONLY_HUMANS (maps to Bosch API field detectionMode). v1.6.0 incorrectly documented OFF|ACTIVE|SCHEDULED and silently sent mode instead of detectionMode — Bosch's API accepted the request but dropped the field. Fixed in v1.6.1. sensitivity: 0-7 (0 = low, 7 = high; FW 9.40+ confirmed range). distance: detection range in meters, 1-8 (Bosch API rejects 9+ with HTTP 400 "must be less than or equal to 8" — verified 2026-05-28 FW 9.40.102).

Unspecified fields are preserved from the current camera configuration. Returns the updated {mode, sensitivity, distance} after write.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
cameraYes
distanceNo
sensitivityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNoDetection mode (Bosch API field 'detectionMode'). Valid: PERSON | STANDARD | HIGH_SENSITIVITY | ZONES | ALL_MOTIONS | ONLY_HUMANS. Corrected 2026-05-28 — previously documented as OFF|ACTIVE|SCHEDULED which Bosch silently ignored because both the field name and the value set were wrong.
distanceNoDetection distance in meters (1-8)
sensitivityNoDetection sensitivity (0-7; 0=low, 7=high)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses mutation behavior ('Update[s]', 'unspecified fields are preserved'), return format, and a historical bug. It does not explicitly state authorization needs, rate limits, or idempotency, but covers key behavioral aspects like error conditions for distance >8.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but efficiently structured: purpose first, then key constraint, followed by parameter details. Every sentence adds value, though some historical notes could be condensed. Still, it remains focused and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters (1 required) and no output schema provided (but noted as existing), the description covers the return format and key behavioral details. The hardware constraint, version bug, and parameter ranges provide a complete picture for an agent to invoke correctly. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description fully compensates. Each parameter (mode, sensitivity, distance) is explained with accepted values, ranges, mapping to Bosch API fields, and version-specific behavior. This goes well beyond the bare schema, making parameter usage clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Update[s] the intrusion detection configuration for one Gen2 camera.' It specifies the resource (intrusion detection config), action (update), and scope (one Gen2 camera), distinguishing it from siblings like bosch_camera_intrusion_get (retrieval). The Gen2-only constraint further clarifies its domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly notes Gen2-only requirement ('raises hardware_unsupported for Gen1 cameras') and 'At least one parameter must be provided.' It also provides version-specific advice (v1.6.0 vs v1.6.1). However, it does not compare with sibling set tools (e.g., motion_set) to guide when to use this over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_lan_pingA

Probe whether a camera is reachable on the LAN (TCP port 443, 1.5 s timeout).

Pass either camera (resolved against bosch_config.json) or a raw lan_ip. Useful when diagnosing cloud-down situations: if this returns reachable=true while the cloud API is returning 5xx, privacy/light writes via prefer_local=True will work without waiting for Bosch infrastructure.

Returns {reachable, ip, latency_ms}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraNo
lan_ipNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
ipYesIP address that was probed
reachableYesTrue if the camera responded within the timeout
latency_msYesRound-trip latency in milliseconds, or -1.0 if unreachable

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses the protocol (TCP port 443), timeout (1.5 s), and return values (reachable, ip, latency_ms). This is sufficient transparency for a simple network probe. A minor gap: it doesn't explain behavior on timeout or invalid IP, but the return schema indicates those cases would likely return reachable=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: three sentences covering functionality, parameter usage, and return format. No redundant information. Front-loaded with the core probe action, then rationale, then output shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema (implied by context), the description fully covers the tool's purpose, parameters, and return value. Sibling tools are numerous but none overlap in functionality, so no further differentiation needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add meaning. It explains that 'camera' is resolved from bosch_config.json, while 'lan_ip' is a raw IP. It also implies mutual exclusivity by saying 'Pass either... or...'. This adds essential semantic value beyond the schema's basic type declarations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool probes camera LAN reachability on TCP port 443 with a 1.5s timeout. This is distinct from all sibling tools, which are about camera features like audio, motion, or streaming. The verb 'probe' and resource 'camera reachability' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises when to use this tool: diagnosing cloud-down situations. It explains the consequence: if reachable, local writes (privacy/light) will work without waiting for Bosch infrastructure. This provides clear context and guidance, differentiating it from other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_led_brightness_getA

Get top or bottom LED brightness (0-100%). Gen2 cameras only.

position must be "top" or "bottom". API: GET /v11/video_inputs/{id}/lighting/switch.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
positionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
positionYes'top' or 'bottom'
brightness_percentYes0-100 %

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Get' and 'API: GET /v11/...' make the read-only nature clear, and the 0-100% plus Gen2-only scope sets expectations. It does not discuss error behaviors, permissions, or what happens on unsupported camera generations, but for a simple read operation this is a reasonable disclosure level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the main action, allowed values, and Gen2-only constraint. The position constraint and HTTP endpoint are each stated once and in a structured way, with no filler or unnecessary repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple two-parameter getter, and the description sufficiently captures the key compatibility, position values, and API endpoint. Since an output schema exists, the return values do not need to be explained. The only real gap is the format/identifier expected for camera, which the API path partially addresses via {id}.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It does add essential meaning: position must be exactly "top" or "bottom", and the API path maps camera to the {id} placeholder. However, the camera parameter itself is not fully explained, so the agent still has to infer what value to pass.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get top or bottom LED brightness (0-100%)'. It also adds the Gen2-only compatibility constraint and the allowed positions, making it clear this is a read tool. It does not explicitly name the corresponding sibling, bosch_camera_led_brightness_set, to differentiate, so it stops just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Gen2 cameras only' is an explicit compatibility boundary, and 'position must be "top" or "bottom"' clearly states which reading must be made. The description does not explicitly name an alternative for Gen1 cameras or tell the agent when to prefer this tool over the setter sibling, but the overall usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_led_brightness_setB

Set top or bottom LED brightness (0-100%). Gen2 cameras only.

position must be "top" or "bottom". API: PUT /v11/video_inputs/{id}/lighting/switch (full-body write, GET-merged).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
positionYes
brightness_percentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
positionYes'top' or 'bottom'
brightness_percentYes0-100 %

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose more of the write/au behavior. It does mention 'API: PUT /v/video_inputs/{id}/lighting/switch' and 'full-body write, GET-merged', which hints at the underlying mechanism. However, it does not state side effects, reversibility, permissions requirements, or whether existing lighting settings get overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, starting with the action and core constraint. The API line adds technical context about the write mode. It is concise, although the 'full-body write, GET-merged' detail could be clearer or more prominently linked to the call flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives enough to understand the operation and valid values for two key parameters, but the 'camera' parameter is left to inference. Even with a camera list sibling, trusting the caller to know the schema's camera pattern makes the description less complete than ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% parameter description coverage, so the description must compensate. It clarifies that position must be 'top' or 'bottom' and that brightness is a 0-100% scale, and the API path suggests 'camera' is the id in the URL. The meaning of 'camera' is still implicit rather than explicitly define description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Set top or bottom LED brightness (0-100%).' It identifies the exact resource being modified and the valid value range. It also adds a compatibility constraint, but does not explicitly distinguish itself from sibling tools such as bosch_camera_light_set or bosch_camera_status_led_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage through the 'Set' verb and supports 'fromally' cameras, but it does not explicitly describe when to choose this tool over siblings like bosch_camera_led_brightness_get or bosch_camera_light_set. The 'Gen2 cameras only' note is a useful exclusion but does not fully route the model to or away from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_lens_elevation_getA

Get the configured lens mounting height (meters). Gen2 cameras only.

Used by the camera for perspective correction in person detection. API: GET /v11/video_inputs/{id}/lens_elevation.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metersYesMounting height in meters, used for person-detection perspective correction

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden, and it does so well: 'GET' implies read-only access, 'configured' indicates it returns an existing setting rather than changing it, and the Gen2-only restriction is disclosed. It also explains why the value matters, which goes beyond the machine-readable schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no fluff: the purpose and unit are front-loaded, the compatibility caveat is prominent, and the API path provides useful reference. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter getter with an output schema, the description covers the operation, scope, units, end-to-end reason, and API shape. A minor gap is that it does not explicitly state that `camera` must be a video input id or name, but the endpoint template largely fills that in.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no per-parameter description, so the description must help map the lone `camera` parameter. The endpoint path suggests that `{id}` corresponds to `camera`, and the unit/direction of the value is clear, but the mapping is implicit rather than explicit. That is a useful clue but not a full parameter explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the exact action ('Get'), the resource ('configured lens mounting height'), the unit (meters), and a key constraint (Gen2 only). The companion setter is clearly distinguished, and the endpoint path is included for disambiguation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions a concrete use case (perspective correction in person detection) and limits the tool to Gen2 cameras, giving an explicit applicability constraint. It does not name alternative tools or provide a when-not-to-use strategy, but the scope is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_lens_elevation_setA

Set the lens mounting height in meters (0.5-5.0). Gen2 cameras only.

API: PUT /v11/video_inputs/{id}/lens_elevation Body: {"elevation": float}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
metersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metersYesMounting height in meters, used for person-detection perspective correction

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It reveals that this is a write/set operation and gives the HTTP contract, but it does not mention side effects, required permissions, error behavior, reversibility, or whether the change takes effect immediately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: the primary action and constraints come first, followed by the exact API specification. Every sentence adds operational value with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter setter, the description provides enough invocation-critical detail: operation, range, unit, and raw API shape. Since an output schema exists and the schema exposes the two required parameters, the remaining gaps around authentication and side effects are noticeable but not blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It meaningfully defines the `meters` parameter with units and a valid range (0.5-5.0) and maps it to the API body field "elevation". However, the `camera` parameter is not explicitly described beyond the API path placeholder `{id}`, leaving some interpretation to the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action as 'Set the lens mounting height in meters (0.5-5.0)', specifying a concrete verb, resource, unit, and allowed range. This also distinguishes the tool from the sibling getter bosch_camera_lens_elevation_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a meaningful usage constraint ('Gen2 cameras only') and the exact API endpoint, which tells the agent when it is not applicable. However, it does not explicitly contrast this with related tools or explain when to prefer the getter or other camera configuration tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_lighting_schedule_getA

Get the LED lighting schedule for one outdoor (Eyes) camera.

API: GET /v11/video_inputs/{id}/lighting_options. Only available on outdoor cameras with LED light — raises hardware_unsupported (HTTP 442) on cameras without this feature, and api_unreachable (HTTP 444) if the camera is offline.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
on_timeNoLight-on time HH:MM:SS (Bosch API field 'generalLightOnTime')
off_timeNoLight-off time HH:MM:SS (Bosch API field 'generalLightOffTime')
wallwasher_onNoWallwasher light state during general-light-on (read-only)
light_on_motionNoWhether motion also triggers the light
schedule_statusNoBosch API field 'scheduleStatus', e.g. FOLLOW_SCHEDULE
darkness_thresholdNo0.0-1.0 ambient-darkness trigger threshold
front_illuminator_onNoFront illuminator state during general-light-on (read-only)
front_illuminator_intensityNoFront illuminator intensity (read-only)
light_on_motion_followup_secsNoSeconds the light stays on after motion (read-only)

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool raises specific HTTP errors (442 for hardware unsupported, 444 for camera offline), which adds valuable behavioral context beyond the schema. However, it does not explicitly state read-only behavior or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, starting with the core purpose. It is efficient, but the API endpoint detail could be integrated more concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists, return values are covered. However, the description lacks parameter help and does not mention any required permissions. For a simple read tool with many siblings, it is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'camera' has a type but no description in the input schema (0% coverage). The tool description does not add any meaning about what the 'camera' parameter expects (e.g., format, ID, or valid values), leaving the agent without guidance to fill it correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and identifies the exact resource 'LED lighting schedule for one outdoor (Eyes) camera'. It clearly distinguishes from sibling tools like 'bosch_camera_lighting_schedule_set' and 'bosch_camera_light_set'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions hardware and connectivity prerequisites and error conditions, but does not explicitly state when this tool should be used versus alternatives (e.g., 'use this to read the schedule, use set to change it'). The guidance is implied but not direct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_lighting_schedule_setA

Update the LED lighting schedule for one outdoor (Eyes) camera.

Read-modify-write on GET/PUT /v11/video_inputs/{id}/lighting_options. At least one of on_time/off_time/light_on_motion/ darkness_threshold must be provided. Writing any field forces scheduleStatus to FOLLOW_SCHEDULE (matches CLI behavior).

Only available on outdoor cameras with LED light — raises hardware_unsupported (HTTP 442) otherwise, api_unreachable (HTTP 444) if the camera is offline.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
on_timeNo
off_timeNo
light_on_motionNo
darkness_thresholdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
on_timeNoLight-on time HH:MM:SS (Bosch API field 'generalLightOnTime')
off_timeNoLight-off time HH:MM:SS (Bosch API field 'generalLightOffTime')
wallwasher_onNoWallwasher light state during general-light-on (read-only)
light_on_motionNoWhether motion also triggers the light
schedule_statusNoBosch API field 'scheduleStatus', e.g. FOLLOW_SCHEDULE
darkness_thresholdNo0.0-1.0 ambient-darkness trigger threshold
front_illuminator_onNoFront illuminator state during general-light-on (read-only)
front_illuminator_intensityNoFront illuminator intensity (read-only)
light_on_motion_followup_secsNoSeconds the light stays on after motion (read-only)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses read-modify-write pattern, side effect of forcing scheduleStatus, specific HTTP error codes (hardware_unsupported, api_unreachable), and that only outdoor cameras with LED light are supported. Thoroughly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is about 150 words, highly concise. Opens with purpose, then explains behavior pattern, constraints, and parameter list. No redundant sentences. Every sentence adds necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters (1 required), no annotations, and presence of output schema, the description covers purpose, usage, constraints, side effects, error conditions, and parameter formats. It is sufficient for an agent to understand when and how to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. Provides a list of all five parameters with brief but meaningful descriptions: camera (case-insensitive), on_time/off_time (format HH:MM[:SS]), light_on_motion (boolean), darkness_threshold (0.0-1.0). Adds value beyond schema titles, though could include more detail like time format validation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with 'Update the LED lighting schedule for one outdoor (Eyes) camera.' Clearly specifies verb (update), resource (LED lighting schedule), and scope (outdoor camera with LED light). Distinguishes from siblings like bosch_camera_lighting_schedule_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains when to use: to update the schedule. Notes that at least one optional field must be provided and that writing any field forces scheduleStatus to FOLLOW_SCHEDULE. Mentions availability constraints and error codes. Does not explicitly state when not to use it, but conditions are implied by error scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_light_setA

Turn the camera's spotlight on or off.

Only for cameras with featureSupport.light=true (currently: Eyes Outdoor II / HOME_Eyes_Outdoor). Raises hardware_unsupported immediately for cameras without a controllable light — no Bosch cloud call is made.

When prefer_local=True, attempt the RCP-LAN write path FIRST (skipping the Bosch cloud entirely). Maps enabled=True to brightness 100, False to 0. Falls back to the cloud API automatically if the LAN write fails or if no local_ip is configured. Wallwasher RGB is always cloud-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes
prefer_localNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite no annotations, the description fully discloses behavioral traits: immediate error for unsupported cameras, local vs cloud path preference, brightness mapping, fallback mechanism, and wallwasher RGB limitation. This goes well beyond the bare minimum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with two clear paragraphs. The first sentence states the core action, followed by bullet-like details. Every sentence provides value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description covers all necessary aspects: purpose, prerequisites, error behavior, parameter details, and edge cases. It is fully sufficient for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining the 'enabled' parameter's mapping to brightness 100/0, the 'prefer_local' parameter's effect on execution path and fallback, and implicitly the 'camera' parameter. It adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Turn the camera's spotlight on or off.' It specifies the verb and resource directly, and distinguishes from sibling tools by mentioning spotlight control and camera compatibility.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use the tool: only for cameras with 'featureSupport.light=true', and mentions immediate error for unsupported cameras. It implicitly tells when not to use (for non-spotlight tasks), but does not explicitly compare to alternatives like 'bosch_camera_light_set' vs other light-related tools (none exist among siblings).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_listA

List all configured Bosch cameras with their online status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the output includes online status, but lacks information on potential behavioral aspects like pagination, rate limits, or error handling. Without annotations, more detail would be beneficial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that conveys the purpose without waste. It is front-loaded with the key action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is complete. It provides enough context for an agent to understand what the tool does without needing additional detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema coverage is 100% trivially. The description adds nothing about parameters, but none are needed. Baseline score of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all configured Bosch cameras with their online status. The verb 'list' and resource 'configured Bosch cameras' are specific, and it distinguishes itself from sibling tools that operate on individual cameras or features.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives, but it is implied that listing cameras is a prerequisite for other operations. However, no when-not-to-use or alternative recommendations are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 recommended_action hint for the calling agent:

  • "check_lan" — state is "active" (outage/maintenance in progress): run bosch_camera_lan_ping to check per-camera LAN reachability, then use prefer_local=True on privacy/light writes while the cloud is down.

  • "wait" — state is "scheduled": outage is upcoming; no action needed yet.

  • null — state is past/recent/unknown/idle: normal operation expected.

Use this tool when users ask why cameras are unavailable or when the cloud returns 5xx errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool fetches from an RSS feed, returns specific fields, and provides recommended actions based on state. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and front-loads the purpose. It is slightly verbose but still clear and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no annotations, the description thoroughly explains the output, including detailed recommended_action logic. It is complete for a diagnostic tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0 params), so the baseline is 4. The description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it fetches cloud maintenance announcements from an RSS feed and specifies the output fields, including recommended actions. It is distinct from sibling tools that focus on camera-specific operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this tool when users ask why cameras are unavailable or when the cloud returns 5xx errors.' This provides clear context, though no explicit alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It discloses using ffmpeg, pulling a single frame from RTSPS stream (inst=3 sub-stream), saving to a specific cache directory, and noting lower resolution but faster speed. It does not cover error handling or missing dependencies, but provides substantial behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a one-sentence summary, followed by technical details and prerequisites. It is not overly verbose, though the phrase 'Direct LAN MJPEG snapshot via RTSP inst=3 (Gen2 only)' could be slightly condensed. Still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (local ffmpeg command, prerequisites) and presence of an output schema, the description covers behavior and constraints adequately. However, the missing parameter semantics and lack of guidance on how to specify the camera leave a gap. It is complete enough for agents with domain knowledge but incomplete for naive agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter 'camera' with type string, and schema description coverage is 0%. The description does not explain what value the 'camera' parameter expects (e.g., ID, name, IP). This is a gap, especially since the tool likely requires a specific camera identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs a 'Direct LAN MJPEG snapshot' via RTSP, specifies it's for Gen2 only, and contrasts with 'snap.jpg' to distinguish from sibling tools like bosch_camera_snapshot. The verb 'snapshot' and resource 'camera MJPEG stream' are precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use (for a faster local snapshot vs cloud) and prerequisites: ffmpeg installed, MCP host on same LAN, and Gen2 camera only. It implies when not to use (if these conditions aren't met) but doesn't explicitly mention alternatives beyond snap.jpg.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_motion_getA

Get motion detection settings for one camera.

Returns {enabled, sensitivity} where sensitivity is one of: OFF | LOW | MEDIUM_LOW | MEDIUM_HIGH | HIGH | SUPER_HIGH.

API: GET /v11/video_inputs/{id}/motion.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether motion detection is enabled
sensitivityNoMotion alarm sensitivity: OFF | LOW | MEDIUM_LOW | MEDIUM_HIGH | HIGH | SUPER_HIGH. Stored in 'motionAlarmConfiguration' field in the API.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes return value format (enabled, sensitivity) with enumerated values, and provides API endpoint. No annotations, so description carries burden well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no redundant text. First sentence states purpose, subsequent ones add useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists and single parameter, description adequately covers return value and API. Could mention read-only nature but not required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only parameter 'camera' is mentioned in description as 'for one camera', but not explicitly described. Schema coverage is 0%, so description partially compensates but could be clearer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'Get' and resource 'motion detection settings', clearly distinguishing from sibling 'bosch_camera_motion_set'. Scope 'for one camera' is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. Usage is implied by name and description, but no enrichment over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_motion_setA

Set motion detection enabled state and/or sensitivity for one camera.

At least one of enabled or sensitivity must be provided.

sensitivity: OFF | LOW | MEDIUM_LOW | MEDIUM_HIGH | HIGH | SUPER_HIGH. Note: providing only sensitivity also implicitly enables motion detection (mirrors the CLI behavior — setting sensitivity implies you want it active).

API: PUT /v11/video_inputs/{id}/motion.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledNo
sensitivityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether motion detection is enabled
sensitivityNoMotion alarm sensitivity: OFF | LOW | MEDIUM_LOW | MEDIUM_HIGH | HIGH | SUPER_HIGH. Stored in 'motionAlarmConfiguration' field in the API.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description compensates by disclosing the implicit enable when only sensitivity is set, and mentions the API endpoint. However, it lacks details on permissions, reversibility, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with a bullet for sensitivity values. The API line is somewhat extra but not harmful. Could be slightly tighter without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main parameter interactions and implicit behavior. However, it lacks prerequisites (e.g., camera must exist, permissions needed) and does not reference the get counterpart or explain the output schema. Given moderate complexity and existing output schema, it is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains the required combination of parameters, enumerates sensitivity values, and explains the implicit behavior. It does not describe the 'camera' parameter beyond its name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the function: 'Set motion detection enabled state and/or sensitivity for one camera.' The verb 'set' and resource 'motion detection' are specific. It distinguishes from sibling tools like bosch_camera_motion_get (which gets) and other set tools for different features.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies constraints: 'At least one of enabled or sensitivity must be provided' and explains the sensitivity values and implicit enabling behavior. However, it does not explicitly compare with sibling tools or provide when-not use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_motion_zones_clearB

Remove all motion-detection zones for one camera. Returns the (empty) list.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool removes all zones (destructive hint implied) and returns an empty list. However, with no annotations, the description is the sole source; it lacks details like irreversibility or state requirements. Acceptable but minimal for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise (one sentence), but sacrifices necessary details. Under-specification reduces effectiveness; conciseness alone does not suffice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (clear action, one parameter, output schema exists), the description is mostly adequate but lacks parameter clarification and usage context, leaving room for misinterpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'camera' is a string with no description in the schema. The description does not clarify what the camera parameter refers to (e.g., ID, name, or IP). With 0% schema coverage, the description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove all motion-detection zones'), the resource ('for one camera'), and the return value ('Returns the (empty) list'). This distinguishes it from sibling tools like motion_zones_get and motion_zones_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., removing zones individually via motion_zones_set). No prerequisites or context for appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 privacy_blocked if the camera is currently in privacy mode (Bosch returns HTTP 443 for this endpoint while privacy is on).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description adequately covers behavior: coordinates are normalized 0.0-1.0, returns empty list if no zones, and raises privacy_blocked error when camera is in privacy mode. It also implies read-only nature. Could add details about response structure, but given the existence of an output schema, the description remains transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: first states purpose, second explains coordinate normalization, third covers boundary cases (no zones, privacy mode). No redundant information, front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, list output), the description covers essential behavioral aspects. It mentions coordinates, empty list, and error handling. With an output schema in place, the description is sufficiently complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'camera' is self-explanatory by name and tool context, but the description does not elaborate on its format, allowed values, or how to obtain a camera identifier. Since schema coverage is 0%, the description could add more value but the parameter is simple enough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List the motion-detection zone rectangles configured for one camera,' specifying the action (list), resource (motion-detection zone rectangles), and scope (one camera). This effectively distinguishes it from sibling tools like bosch_camera_motion_zones_set and bosch_camera_motion_zones_clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for retrieving zones of a single camera, but does not explicitly state when to use or when not to use compared to alternatives. However, the purpose is straightforward, and the mention of the privacy_blocked error condition gives guidance on a specific scenario to watch for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 {"x": ..., "y": ..., "w": ..., "h": ...}, normalized 0.0-1.0. Pass an empty list to clear all zones (equivalent to calling bosch_camera_motion_zones_clear).

ParametersJSON Schema
NameRequiredDescriptionDefault
zonesYes
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the operation is a destructive full replace, that empty list clears zones, and specifies the zone format with normalized coordinates. This goes beyond the input schema by explaining behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and front-loaded with the main action. Every sentence provides necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 2 parameters, an output schema exists, and no nested objects, the description covers purpose, usage, parameter format, and behavioral notes. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by explaining the 'zones' parameter: each zone is an object with x, y, w, h normalized 0.0-1.0. It also clarifies that the 'camera' parameter identifies one camera. This adds meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool replaces ALL motion-detection zones for one camera with a given list. It uses a specific verb ('Replace') and resource ('motion-detection zones'), and distinguishes from sibling tools like bosch_camera_motion_zones_clear and bosch_camera_motion_zones_get by clarifying it's a full replace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'This is a full replace, not a merge — pass every zone you want to keep.' It also explains that passing an empty list is equivalent to clearing all zones, referencing the sibling tool bosch_camera_motion_zones_clear. This provides clear guidance on when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_notifications_setC

Toggle push notifications for one camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries full burden. It states the action (toggle) but discloses no side effects, permission requirements, rate limits, or behaviors like whether the change persists or requires camera connectivity. For a mutation tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence, which is efficient but at the cost of omitting critical context. It is front-loaded but insufficiently informative, making it mediocre in structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool changes state (notifications toggle) and has an output schema (not shown) but the description does not cover prerequisites, expected outcomes, or error conditions. For a simple mutation tool, it lacks completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description adds no clarification. The 'camera' parameter is not explained (e.g., type of identifier expected) and 'enabled' is described only as a boolean toggle, which is already clear from the schema. The description fails to add value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Toggle' and identifies the resource 'push notifications for one camera', making the purpose clear and distinct from sibling tools like audio or motion settings. However, it lacks specificity about what kind of notifications (e.g., motion alerts, all events) and could be more precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like bosch_camera_audio_detection_set or bosch_camera_motion_set. The description does not mention prerequisites, configuration state, or typical scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description carries full burden. It reveals the RCP command, that it's read-only, and the return structure. Lacks info on rate limits or latency, but acceptable for a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no waste, directly states purpose, constraints, and output. Front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read tool with output schema, description is complete: covers what it does, prerequisites, constraints, and what is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 0% description coverage. Description does not explain the 'camera' parameter beyond the schema, but adds context about required configuration and Gen2 restriction. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it reads ONVIF device scopes via LAN RCP command, lists returned fields, and distinguishes from sibling tools by specifying Gen2-only and the specific command code.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly states prerequisite (local credentials in bosch_config.json) and constraint (Gen2 only). Does not explicitly mention alternatives, but context is clear enough for an agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_panA

Pan the 360° indoor camera (Gen1 CAMERA_360 only, panLimit > 0).

Named presets (preferred, via preset parameter): home → 0° (center) left → -60° right → +60° back-left → -120° (full left limit) back-right → +120° (full right limit)

direction accepts the same preset names, legacy aliases (center), or an integer string in the range -panLimit to +panLimit.

When preset is set it takes priority over direction.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
presetNo
directionNohome

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses pan limits, preset angle mappings, and parameter prioritization. No annotations provided, so description carries burden. Lacks details on failure modes or rate limits but adequate for a panning action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with bullet points and clear sections. Information is dense but could be slightly more concise by reducing redundancy between preset and direction explanations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers constraints (camera model, panLimit), parameter usage, and priority rules. Output schema exists so return values not needed. Minor gap: doesn't specify behavior when panLimit is 0 or camera incompatible.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description thoroughly explains all three parameters: camera (implied), preset (names and angles), direction (names, aliases, integer range). Adds significant meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it pans a specific camera model (Gen1 CAMERA_360 only) and distinguishes from sibling camera tools. Provides specific verb 'Pan' and resource '360° indoor camera'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly notes the tool is only for Gen1 CAMERA_360 with panLimit > 0, and explains preset priority over direction. No explicit alternatives or when-not-to-use, but context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_privacy_masks_clearA

Remove all privacy-mask zones for one camera. Returns the (empty) list.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the tool removes zones and returns an empty list, but does not mention irreversibility, required permissions, or side effects. Basic disclosure but missing depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded, with no unnecessary words. Every part earns its place, though it could include slightly more detail without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema shown, and a mutation operation, the description is somewhat thin. It covers the basic action and return, but lacks details on reversibility, prerequisites, or error conditions. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description only says 'for one camera' but does not explain what the 'camera' parameter expects (e.g., ID, name). Minimal additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove all privacy-mask zones'), the specific resource ('for one camera'), and the output ('Returns the (empty) list'). This distinguishes it from siblings like get (returns current list) and set (sets specific zones).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use when you want to clear all privacy masks. The context of sibling tools (get, set) makes the alternative clear, but no explicit 'when-not-to-use' or prerequisites are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full transparency burden. It adds valuable context: coordinates are normalized 0.0-1.0 and masked areas are permanently blacked out in live view and recordings. This helps the agent understand the return format and the persistent effect of masks. However, it does not mention what happens for invalid cameras or empty mask lists, which might be covered by the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, each earning its place. The first states the purpose, the second adds crucial behavioral detail. No unnecessary words. Front-loaded with the primary action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no enums, output schema exists), the description covers the core functionality and output semantics. It does not address error scenarios or prerequisites, but for a read operation with a straightforward schema, this is reasonable. The presence of an output schema reduces the need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: the description adds no information about the 'camera' parameter beyond its name. The schema already specifies it as a required string, so the description does not compensate by explaining the format (e.g., camera ID, IP, or URL) or any constraints. With only one parameter, even minimal elaboration would help.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists privacy-mask zone rectangles for a single camera. The verb 'List' and resource 'privacy-mask zone rectangles' are specific. The tool name itself distinguishes from siblings like bosch_camera_privacy_masks_set and bosch_camera_privacy_masks_clear, and no other sibling lists similar data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (to retrieve existing masks), but does not provide explicit guidance on when not to use it, prerequisites (e.g., camera must exist), or alternatives. The purpose is clear, but no usage boundaries are set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 {"x": ..., "y": ..., "w": ..., "h": ...}, normalized 0.0-1.0. Pass an empty list to clear all masks.

ParametersJSON Schema
NameRequiredDescriptionDefault
masksYes
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that operation is a full replacement (not merge) and that empty list clears all masks. Does not mention side effects like reversibility or permissions, but for a set tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, no extraneous words. Front-loaded with the core action. Earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 parameters and no annotations, the description covers the main behavioral aspects and mask format. Output schema exists but is not shown, so return value details are not needed. Missing camera format information is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description explains the 'masks' parameter in detail: each mask has x, y, w, h normalized 0.0-1.0, and empty list clears. The 'camera' parameter is not explained but is straightforward.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Replace' and resource 'privacy-mask zones for one camera'. Explicitly states 'Full replace, not a merge', distinguishing it from any merge-like sibling. Format of masks is specified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage: use when you want to replace all masks with a new list. Does not explicitly mention when not to use or compare to siblings like 'privacy_masks_clear', but the specificity of 'replace all' provides adequate guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_privacy_setA

Turn privacy mode on or off. enabled=True hides the camera.

When prefer_local=True, attempt the RCP-LAN write path FIRST (skipping the Bosch cloud entirely). Useful when the agent already knows the cloud is down but the camera is LAN-reachable (confirmed via bosch_camera_lan_ping). Falls back to the cloud API automatically if the LAN write fails or if no local_ip is configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes
prefer_localNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the dual-path behavior (LAN vs cloud) and fallback mechanism. Does not mention rate limits or authentication, but the core behavioral trait of toggling privacy is well explained.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences for core purpose and a short paragraph for optional behavior. No filler, front-loaded with key action, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (context: 'Has output schema: true'), the description need not detail return values. It covers the action and conditional behavior well, though it omits mention of success/failure indications. Still sufficiently complete for a set tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must explain parameters. It explains 'enabled' (hides camera) and 'prefer_local' (LAN-first path). The 'camera' parameter is not explained but is a standard identifier. Two out of three params are clarified, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Turn privacy mode on or off' and explains the effect of 'enabled=True' (hides the camera). The verb 'Turn' and resource 'privacy mode' are specific, and the tool is distinct from siblings like privacy_sound_get/set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use the 'prefer_local=True' option: when the cloud is down but the camera is LAN-reachable, confirmed via sibling tool 'bosch_camera_lan_ping'. Mentions automatic fallback, giving clear context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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 {enabled}.

API: GET /v11/video_inputs/{id}/privacy_sound_override.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether the camera plays an audible indicator when privacy mode changes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that this is a GET operation, specifies the API endpoint, and indicates the return format ({enabled}). However, it omits details like required authentication or potential errors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with the main action front-loaded. Every sentence adds value: the verb-resource pair, behavioral context, return format, and API endpoint. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, read-only with output schema), the description adequately covers the purpose, usage, and return. The presence of an output schema reduces the need to explain return values further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not elaborate on the 'camera' parameter (e.g., its format or expected values). The schema lists it as a string, but the description adds no additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('privacy-sound indicator setting for one camera'). It distinguishes from sibling tools like bosch_camera_privacy_sound_set, which sets the same setting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context about when the setting is used (plays audible indicator when privacy mode changes) but does not explicitly state when to use this getter vs. alternatives like the setter or other get tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_privacy_sound_setA

Enable or disable the audible indicator that plays when privacy mode changes.

enabled=True → camera beeps/chimes when privacy is toggled. enabled=False → silent privacy mode switching.

API: PUT /v11/video_inputs/{id}/privacy_sound_override Body: {"result": bool}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether the camera plays an audible indicator when privacy mode changes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains the core behavior (enabling/disabling sound) and includes the API call format. However, it does not disclose requirements (e.g., camera permissions), side effects, or persistence. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with three clear sections: a sentence describing purpose, example usage with Python-like syntax, and the API endpoint. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values do not need description. The description covers the main functionality and parameter usage. It lacks context on prerequisites (e.g., camera must already exist) but is otherwise sufficient for a simple setter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the `enabled` parameter well with examples (`True`/`False`). However, the `camera` parameter lacks any explanation of its format or how to obtain it. Thus, adds partial value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool enables or disables the audible indicator for privacy mode changes. It uses specific verbs ('Enable or disable') and identifies the resource ('audible indicator'). The sibling `bosch_camera_privacy_sound_get` exists, so the description effectively distinguishes this as the setter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: to change the audible indicator behavior. It implies usage for toggling sound on/off. While no explicit alternatives are named, the sibling `bosch_camera_privacy_sound_get` is the complementary read tool, making the distinction clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully carries the burden. It correctly describes a read-only operation, explains the opcodes used, and states what is returned (primary and secondary versions in dotted decimal and raw hex). It could be more explicit about being non-destructive, but the intent is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with key information front-loaded: the main action in the first sentence, followed by return details and use case. It is structured logically without unnecessary words. A minor improvement would be clarifying the camera parameter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, returns version info), the description covers the purpose, return format, and use case. It assumes knowledge of the camera parameter, which is a gap, but overall it provides sufficient context. The existence of an output schema helps, though the description also explains the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has only one parameter 'camera' with no description (0% schema coverage). The description does not explain what this parameter represents or its expected format. It mentions requirements for local_ip and credentials, which are not part of the schema, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads the RCP firmware version, specifies the operation (via LAN with opcodes), and indicates the return format. It distinguishes itself from siblings which handle different camera functions (e.g., audio, motion).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the tool is useful for diagnosing protocol compatibility and requires local IP and credentials, providing context for when to use it. However, it does not explicitly state when not to use it or list alternatives, but given the uniqueness of the function among siblings, this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_recording_getB

Get cloud recording options for one camera.

Returns {sound_on} — whether audio is recorded in cloud clips.

API: GET /v11/video_inputs/{id}/recording_options.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sound_onYesWhether audio is included in cloud recordings

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden. It describes a read operation returning a boolean, and mentions the API endpoint. However, it does not explicitly state that the tool is read-only, nor does it disclose any error conditions or auth requirements. The return type is mentioned, which is good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and to the point, with two sentences and an API line. It is front-loaded with the purpose. The API endpoint adds useful context, though it could be omitted if not needed. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get tool with one parameter and an output schema (mentioned in context), the description is adequate. It explains the return value and the single capability. However, it could mention that it only gets audio recording options (since that's the only field returned), but the description already implies that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter 'camera' with no description (0% schema coverage). The description says 'for one camera' but does not clarify what format or identifier is expected (e.g., camera ID, name). This leaves ambiguity for the agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets cloud recording options for one camera and specifies the return value (sound_on). The verb 'get' and the resource 'cloud recording options' are specific. It distinguishes from sibling tools like recording_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, limitations, or when to avoid using it. Sibling tools exist (e.g., recording_set) but no comparison is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_recording_setB

Enable or disable audio in cloud recordings for one camera.

sound_on=True → record audio in cloud clips. sound_on=False → no audio in cloud clips.

API: PUT /v11/video_inputs/{id}/recording_options Body: {"recordSound": bool}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
sound_onYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
sound_onYesWhether audio is included in cloud recordings

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must fully disclose behavior. It states the effect (enable/disable audio) and the API endpoint, but omits details on permission requirements, error handling, idempotency, or consequences of setting audio when not supported by the camera.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is very concise: one sentence, a code block with parameter clarifications, and the API call. Every element adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 2 required parameters and an output schema, so description need not cover returns. However, it lacks context on prerequisites (e.g., camera status, permissions) and fails to mention error cases or idempotency, which are important for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add meaning. It explains the 'sound_on' parameter with examples and the API body format, but does not describe the 'camera' parameter beyond its name, leaving ambiguity about identifier format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Enable or disable audio in cloud recordings for one camera', specifying verb and resource. It distinguishes from siblings by focusing on recording audio settings, but does not explicitly contrast with other audio-related tools like bosch_camera_audio_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage by showing boolean parameter examples (sound_on=True/False). It does not provide when-not-to-use guidance or mention alternatives such as bosch_camera_audio_set for non-recording audio.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_renameA

Rename a camera via the Bosch cloud API. The new name appears in the Bosch app.

API: PUT /v11/video_inputs Body: {"videoInputId", "title", "timeZone"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
new_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description provides useful behavioral context: it exposes the underlying API method (PUT), the endpoint, the request body fields, and the observable consequence. With no annotations available, it could have covered more (authentication, failure cases, whether the operation is reversible), but the mutation behavior itself is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: a one-line purpose statement, a short user-visible effect, and the exact API contract. Every sentence contributes information and the most important detail (rename) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter rename operation, the description gives the API endpoint and visible outcome, and an output schema exists to describe results. However, because there are no annotations and no parameter descriptions, details like the expected format of `camera` or the source/handling of `timeZone` remain ambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the entire parameter burden. It adds the underlying API field names `videoInputId`, `title`, and `timeZone`, which hints at how `camera` and `new_name` map to the API, but the mapping is not explicit and `timeZone` is unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: rename a camera through the Bosch cloud API, with an observable outcome (the name changes in the Bosch app). This is specific enough to distinguish it from the many sibling camera tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Rename is self-descriptive and the description implies the use case, but there is no explicit when-to-use vs alternatives guidance, no mention of prerequisites like having selected a camera, and no exclusions. The usage intent is clear but still left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_rules_addA

Create a new automation rule for one camera.

start/end are HH:MM 24h time. days are 0=Monday..6=Sunday. The new rule is created active. Returns the created rule (with its id).

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
daysYes
nameYes
startYes
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoRule id (Bosch API field 'id')
endYesEnd time HH:MM:SS (Bosch API field 'endTime')
daysYesActive weekdays, 0=Monday .. 6=Sunday
nameYesRule display name
startYesStart time HH:MM:SS (Bosch API field 'startTime')
activeYesWhether the rule is currently active

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the rule is created active and returns the created rule with an ID. This provides useful behavioral context, though side effects or prerequisites are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. The purpose is front-loaded, and every sentence adds value without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 required parameters and an output schema, the description is moderately complete. It covers the time-related params and return value, but lacks explanations for camera and name parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates partially. It explains start/end time format and days indexing (0=Monday), adding meaning for 3 of 5 parameters. However, camera and name are left unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new automation rule for one camera.' This specifies a unique verb-resource combination, distinguishing it from sibling tools like edit, delete, and list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., edit or delete). It only describes the tool's function without contextual usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_rules_deleteA

Delete an automation rule from one camera. Returns {deleted, rule_id}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
rule_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It states the destructive nature (delete) and return format, but does not mention error handling, idempotency, or side effects beyond the deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: one sentence with the action and one with the return format. No redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks context for a two-parameter tool with no annotations. It does not explain source for camera or rule_id, nor error scenarios. The return format is noted, but likely already in output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%; the description adds no meaning to parameters 'camera' and 'rule_id'. It does not clarify what these identifiers refer to (e.g., camera ID, rule ID) or how to obtain them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Delete), the resource (automation rule), and scope (from one camera). It is distinct from sibling tools like bosch_camera_rules_add, bosch_camera_rules_edit, and bosch_camera_rules_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use or alternatives. The description implies deletion when a rule is no longer needed, but lacks context like prerequisites or conditions for safe use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_rules_editB

Update an existing automation rule for one camera. Only provided fields change.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
daysNo
nameNo
startNo
activeNo
cameraYes
rule_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoRule id (Bosch API field 'id')
endYesEnd time HH:MM:SS (Bosch API field 'endTime')
daysYesActive weekdays, 0=Monday .. 6=Sunday
nameYesRule display name
startYesStart time HH:MM:SS (Bosch API field 'startTime')
activeYesWhether the rule is currently active

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description must disclose behavior. It mentions 'Only provided fields change', indicating partial update, but omits error conditions, idempotency, permissions, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (one sentence) and front-loaded, but could be slightly more structured. It earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description does not clarify the return value or provide enough context for correct usage. It is too sparse for a tool with 7 parameters and partial update semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain any parameter meanings, formats, or relationships. With 7 parameters, this is a significant gap that the description fails to address.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing automation rule for one camera' with a specific verb and resource, and distinguishes from sibling tools like add, delete, and list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when updating a rule but provides no explicit guidance on when not to use or alternatives. It lacks context for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_rules_listB

List the automation (time-schedule) rules configured for one camera.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must carry the burden. It implies a read-only operation ('list') but does not reveal any side effects, authentication needs, error handling, or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence, front-loaded with the key action, and contains no extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately defines the tool's purpose for a simple list operation, but it fails to mention that an output schema exists (which could document return structure). It provides minimal context for an AI to understand the scope of results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description adds context by linking the 'camera' parameter to the act of listing rules. However, it does not explain the required format or any constraints beyond the parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb 'List' and the resource 'automation rules configured for one camera', distinguishing it from sibling tools like add/delete/edit. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not specify when to list rules versus other list operations, nor does it mention prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_siren_duration_setA

Set the siren alarm duration for one camera (Gen2 Indoor II only).

Read-modify-write on GET/PUT /v11/video_inputs/{id}/alarm_settings (field alarmDelayInSeconds) — existing fields in that config are preserved. Does not trigger the siren itself; call bosch_camera_siren_trigger afterwards to fire it with the new duration.

Raises hardware_unsupported for non-Gen2-Indoor-II cameras (matches bosch_camera_siren_trigger's own gating). Raises invalid_argument if seconds is outside 10-300. Raises privacy_blocked when the camera is in privacy mode.

Args: camera: Camera name (case-insensitive). seconds: New siren duration, 10-300 seconds inclusive.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
secondsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
alarm_delay_secondsYesConfigured siren duration in seconds (Bosch API field 'alarmDelayInSeconds')

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes read-modify-write behavior, preservation of existing fields, no trigger side effect, and detailed error cases. No annotations provided, so description carries full burden, and it does so thoroughly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise yet comprehensive: front-loaded purpose, technical details, errors, and parameter list in a clear structure with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all essential aspects: purpose, usage, parameters, side effects, error handling, and compatibility. Output schema exists, so return values are not needed. Complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description adds full semantics: camera (case-insensitive name), seconds (range 10-300), and context for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool sets siren alarm duration for Gen2 Indoor II cameras only, specifies verb 'Set' and resource, and distinguishes from sibling bosch_camera_siren_trigger by stating it does not trigger the siren.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (before triggering), directs to call bosch_camera_siren_trigger afterwards, and lists error conditions that guide when not to use (e.g., unsupported hardware).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_siren_triggerA

Trigger (or stop) the indoor siren on a camera.

Endpoint depends on the camera model:

  • Gen1 360° indoor (model == "INDOOR") → PUT /v11/video_inputs/{id}/acoustic_alarm Body: {"enabled": <bool>}. Outdoor cameras return HTTP 442 (not supported).

  • Gen2 Indoor II (model == "HOME_Eyes_Indoor") → PUT /v11/video_inputs/{id}/panic_alarm Body: {"status": "ON"|"OFF"}. 75 dB integrated siren.

The siren plays for the camera-side configured duration (typically 30–60 s on Gen2). To change the duration, use bosch_camera_siren_duration_set (range 10–300 s) before triggering.

Raises hardware_unsupported for outdoor cameras and Gen1 outdoor models. Raises privacy_blocked when the camera is in privacy mode (Gen2 panic alarm is gated by privacyMode at the Bosch cloud level).

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stopNo
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses endpoint variations, body syntax, error types, and the fact that Gen2 siren is 75 dB and plays for a configured duration. It lacks details on idempotency or whether multiple triggers stack, but overall provides good behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points and parameter args. It is front-loaded with the essential purpose. While every sentence adds value, it is longer than necessary; a slight trim could improve conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple camera models, error conditions, duration sibling), the description is thorough. It covers behavior, error cases, and parameter details. Since an output schema exists, the description does not need to explain return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description fully compensates by explaining each parameter beyond type and title: camera is case-insensitive, stop sends the stop variant with specific body examples and use case for cancelling Gen2 panic alarms.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line clearly states the tool triggers or stops the indoor siren on a camera. It distinguishes from siblings like bosch_camera_siren_duration_set by mentioning that tool for duration changes, and it specifies it is for indoor models only, differentiating from outdoor-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when/when-not guidance: it lists endpoints for different camera models, notes that outdoor cameras return HTTP 442, raises hardware_unsupported for outdoor, and mentions privacy_blocked for privacy mode. It also directs to use bosch_camera_siren_duration_set for duration changes, and explains the stop parameter's use for cancelling active alarms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYesFilesystem path to the saved JPEG
methodYesSource: local_lan (LAN-only; cloud fallback removed in v1.1.0)
timestampYesISO 8601 capture time

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses the fresh snapshot behavior, LAN-only constraint, and the file save location (~/.cache/...). However, with no annotations, it lacks explicit statements about destructiveness (presumably none) or rate limits, and does not detail the authentication mechanism beyond mentioning HTTP Digest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus a requirement line. Every sentence adds value with no redundancy, front-loading the core action and key constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple parameter set (only one) and the presence of an output schema (which handles return value details), the description covers purpose, network constraint, and local file output. It is nearly complete, though could optionally mention whether the call is synchronous or blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description should compensate. It mentions 'camera IP' in context but does not clearly define the 'camera' parameter (e.g., whether it expects a name, ID, or IP address). This lack of explicit mapping reduces its helpfulness for an AI agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool captures a fresh snapshot via LAN only, using HTTP Digest. The verb 'Capture' and resource 'snapshot' are specific. While it doesn't explicitly distinguish from sibling tools like bosch_camera_mjpeg_snapshot, the emphasis on LAN-only and no cloud roundtrip provides implicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear prerequisite: the MCP host must be on the same network as the camera. However, it does not offer when-not-to-use guidance or suggest alternative tools for cloud-based snapshots, leaving some ambiguity for the AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_soft_resetA

Reboot one camera (soft reset). The camera briefly drops offline.

API: PUT /v11/video_inputs/{id}/soft_reset (empty body). NOTE: on real hardware this has been observed to return HTTP 404 sh:entity.notfound even when the request matches the official Bosch app byte-for-byte (same finding that made HA disable its equivalent button by default) — a 404 here likely means "not supported for this camera/account", not a client bug.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does well: it discloses that the camera briefly drops offline and—critically—warns that a 404 may really mean 'not supported for this camera/account' rather than a client error. It does not mention permissions or response behavior, but for a simple reset operation this is strong transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is frontloaded with the action and its main effect, then gives the API specifics, then the exception caveat. The 404 note is detailed but earns its place by preventing the agent from misdiagnosing a valid failure mode. No repeating or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter action with no annotations and an output schema present, the description includes enough: the HTTP method, path, empty body, side effect, and an operational ambiguity in the failure response. The main gap is that the 'camera' parameter itself is not described, so an agent may still need to infer that it is the camera ID used in previous Bosch tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only declares a required 'camera' string with zero description. The API path '/v11/video_inputs/{id}/soft_reset' hints that the camera parameter is the Bosch video input ID, but the description never explicitly maps the parameter to that ID. This partially compensates for the missing schema documentation but does not fully clarify format or where the value comes from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Reboot one camera (soft reset).' It also distinguishes itself from the sibling bosch_camera_hard_reset by making the soft reset nature explicit. The API path and the behavior 'camera briefly drops offline' leave no doubt about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied: rebooting a single camera via soft reset. However, there is no explicit guidance about when to choose this over alternatives such as hard reset, and no exclusions or conditions are given. The offline-warning is useful, but not a selection guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_statusB

Get the current status of one camera by name (case-insensitive).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
statusYes
light_onNo
privacy_modeYes
last_event_atNoISO 8601 timestamp of the latest motion event

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description only indicates it's a read operation ('get'), but lacks details on safety, idempotency, authentication requirements, or what happens if the camera name is invalid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key information, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Sufficient for a simple get-status tool with an output schema (so return values are covered). However, without annotations, more context about error states or typical usage would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage with 1 required parameter 'camera' of type string. Description adds one useful detail: case-insensitivity, but does not explain what constitutes a valid camera name or how to obtain it, which is insufficient given low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Get', resource 'current status', and scope 'one camera by name (case-insensitive)'. Distinguishes from sibling tools like 'bosch_camera_list' which lists all cameras.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for retrieving status of a specific camera, but provides no guidance on when to use this versus alternatives like 'bosch_camera_health_check_all' for detailed health or 'bosch_camera_list' for listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_status_led_getA

Get the camera's status LED on/off state. Gen2 cameras only.

API: GET /v11/video_inputs/{id}/ledlights.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether the camera's status LED is lit

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a read-only GET operation and adds the Gen2-only caveat, but it does not address authentication, errors for unsupported cameras, or how the LED state is presented beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a short, front-loaded statement: what the tool does plus the API path. There is no padding; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple single-parameter GETter and an output schema exists, so return value documentation is unnecessary. However, the description leaves the key parameter semantics underdetermined and doesn't state how unsupported cameras behave, so the context is only moderate-complete for correctly invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage and only the required property 'camera'. The description's endpoint includes a URL parameter id, but it never connects this to the camera argument or explains whether an id, device name, device identifier is expected. The description does not compensate for the single wild card.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: getting the camera's status LED on/off state. It also narrows the domain to Gen2 cameras, so the agent can distinguish this from status LED setter and other camera state tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a clear compatibility constraint ('Gen2 cameras only') and the HTTP verb for retrieval. It implies when to use is (when finding current LED state), though it doesn't explicitly name a sibling alternative for setting it. The constraint is still useful for preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_status_led_setA

Turn the camera's status LED on or off. Gen2 cameras only.

API: PUT /v11/video_inputs/{id}/ledlights Body: {"state": "ON"/"OFF"}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether the camera's status LED is lit

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full behavioral burden. It compensates well by specifying a mutating HTTP method (PUT), the exact endpoint, the payload format, and the intended on/off effect. It could add details about permissions or persistence, but for a simple LED state toggle this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose first, compatibility second, and API details last. Every sentence adds relevant information with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter with an output schema and no annotations, the description is largely complete: it gives purpose, compatibility, and the exact API contract. The only real gap is the absence of explicit parameter-to-field mapping, but the operation and endpoint are clear enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only partially compensates. The endpoint path and the body state 'ON'/'OFF' imply that `camera` maps to the path id and `enabled` maps to the state field, but the description never explicitly states this mapping. The `enabled` boolean to 'ON'/'OFF' relationship is inferred rather than documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Turn the camera's status LED on or off.' It clearly identifies the operation, the target resource, and adds a compatibility constraint ('Gen2 cameras only'), making it easy to distinguish from sibling tools like status_led_get, light_set, or led_brightness_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear scope condition: 'Gen2 cameras only.' However, it does not explicitly state when to prefer this tool over alternatives such as bosch_camera_status_led_get for reading the LED state or bosch_camera_led_brightness_set for brightness control. Usage guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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_*).

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
cameraYesCanonical camera name from config
rtsps_urlYesLAN RTSPS URL via TLS proxy (rtsps://<user>:<pass>@<ip>:443/...)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses network and credential requirements, the absence of cloud relay, and implies read-only behavior via 'Get'. It does not explicitly state it is non-destructive, but the context is sufficient for a retrieval operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short paragraphs. The first states the core purpose, the second adds necessary prerequisites. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no annotations), the description covers purpose, prerequisites, and output usage (ffmpeg/VLC/go2rtc). The existence of an output schema compensates for missing return value details. Slightly more explanation of the parameter format would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'camera' parameter lacks a schema description (0% coverage). The description partially clarifies it by referencing local config, but does not explicitly state whether it expects a name or ID, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves a LAN RTSPS stream URL for one camera, distinguishing it from cloud relay and sibling tools that handle other camera operations. The verb 'Get' and resource 'LAN RTSPS stream URL' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear prerequisites (same network, local credentials) that define when the tool can be used. However, it does not explicitly mention alternatives or when not to use it, though the context and sibling list imply this is the only stream URL tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_timestamp_overlay_getA

Get whether a date/time overlay is burned into the video for one camera.

API: GET /v11/video_inputs/{id}/timestamp.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether a date/time overlay is burned into the video

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It communicates that this is a read-only operation via 'GET' and 'Get whether', but it does not disclose error behavior, authentication requirements, or response semantics. It's minimally transparent but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded: the purpose appears in the first line, and the API endpoint provides concrete routing information. No redundant words or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter read tool with an output schema present, the description provides enough context to identify the intent and endpoint. It lacks explicit parameter guidance and sibling differentiation, but the complexity is low enough that these are not critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single 'camera' parameter has no schema description, and the description only loosely says 'for one camera'. The API path includes {id}, which helps imply the camera parameter represents an ID, but the description does not explicitly clarify the parameter format or meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get whether...'), a specific resource ('date/time overlay... for one camera'), and the endpoint. It distinguishes itself from timestamp_overlay_set by indicating this is a read/state-check operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool's intended usage is implied by the verb 'Get' and HTTP GET method, but the description does not explicitly state when to use it instead of the paired timestamp_overlay_set sibling. It provides no explicit when/when-not guidance or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_timestamp_overlay_setA

Turn the date/time video overlay on or off for one camera.

API: PUT /v11/video_inputs/{id}/timestamp Body: {"result": bool}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes
enabledYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enabledYesWhether a date/time overlay is burned into the video

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits itself. It does state the outcome explicitly (turn overlay on/off) and includes the precise API call and body. However, it gives no information about whether the operation requires special permissions, whether it is idempotent, whether it takes effect immediately, or what errors may occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately short and front-loaded: the first sentence states the core purpose with no wasted words, and the second sentence supplies the actionable API contract. Every sentence provides distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter setter, the description is largely complete. It names the target resource, the on/off behavior, the API endpoint, and the request body shape. There is an output schema available, so return-value documentation is not required. The main missing context is explicit guidance around alternatives and side effects, but for this low-complexity tool the level of detail is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden. It does clarify that the boolean parameter controls the date/time overlay, and the included API body shows a boolean value is sent. Yet it does not explain exactly how the 'camera' string is used, and the API body's 'result' field is not explicitly mapped to the 'enabled' parameter, so some ambiguity remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Turn the date/time video overlay on or off for one camera.' This clearly distinguishes the set operation from the sibling getter tool and leaves no doubt about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives, and no mention of related tools such as bosch_camera_timestamp_overlay_get or other configuration setters. The API path is provided, but the tool does not state prerequisites, preconditions, or situations where a different tool should be used instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_token_statusA

Return the current bearer token validity, expiry, and account email.

Parses the JWT exp and email/preferred_username claims from the stored bearer token without making a network call.

Returns {valid, expires_in_min, email}. valid=False when the token is expired or missing. expires_in_min is negative when already expired.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
emailNoEmail/preferred_username from JWT claims
validYesTrue if the token is not expired
expires_in_minNoMinutes until expiry (negative = already expired); None if undecodable

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description fully discloses behavior: it parses JWT claims without network, returns fields valid, expires_in_min, email, and explains condition for expired/missing token. With no annotations, this provides high transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, front-loaded with the main purpose, no unnecessary words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately describes the return structure. It covers edge cases (expired/missing token) but does not mention malformed tokens. Still, for a simple status tool, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so description does not need to add param info. Baseline 4 for zero parameters applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns bearer token validity, expiry, and email. It specifies it parses the JWT locally without network call, distinguishing it from other camera tools that interact with camera hardware or settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives are provided. The description implies it is a lightweight check (no network call) but does not guide the agent on when to use this over other tools, such as checking token before performing authenticated operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_unread_getA

Get the unread event count for one camera.

Reads numberOfUnreadEvents from the /v11/video_inputs listing (the /unread_events_count endpoint returns HTTP 404 — verified in testing).

Returns {camera, count}.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesNumber of unread events (from video_inputs listing)
cameraYesCamera name

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It transparently discloses the reading from the /v11/video_inputs listing, the failure of the direct endpoint, and the return structure. It does not mention permissions or side effects, but for a read-only operation, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (3 sentences) and front-loads the purpose. It includes a parenthetical about testing, which is helpful but slightly informal. No waste, but could be more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (1 parameter, simple return), the description covers the essential behavior and return format. It lacks error handling details but is complete enough for a straightforward tool, especially with an output schema presumably available.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the 'camera' parameter, and the description adds no additional meaning beyond the parameter name. It does not specify the format (e.g., ID, name) or any constraints, leaving the parameter unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'unread event count for one camera'. It distinguishes itself by specifying the exact data source and noting a workaround for a failed endpoint, making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving unread event counts but does not explicitly state when to use it over alternatives. No exclusions or when-not-to guidance is provided, leaving some ambiguity for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_white_balance_getB

Get the front light's white balance (-1.0 cool .. 1.0 warm). Gen2 cameras only.

API: GET /v11/video_inputs/{id}/lighting/switch.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
valueYes-1.0 (cool/blue) .. 1.0 (warm/orange), 0.0 = neutral

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry more weight. It discloses the returned polar range and the Gen2-only restriction, and the GET endpoint implies read-only access. However, it does not cover error cases, auth requirements, behavior on unsupported cameras, or whether any side effects exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded, with the Gen2 limitation placed clearly in its own sentence. The additional API path line is not essential but does not make the definition verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter getter with an output schema, the definition is mostly sufficient. It lacks explicit guidance on how to select this tool among the white-balance-related siblings and what the 'camera' parameter should contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema's only param 'camera' has no description (0% schema coverage), and the tool description does not explain its meaning or expected values. The API endpoint's /{id} segment is the only indirect clue that the param is a camera identifier.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a clear resource ('front light's white balance') and action ('Get'), and adds the value range from -1.0 to 1.0. It is easily distinguishable from white_balance_set by verb, though it does not explicitly reference that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only says 'Gen2 cameras only,' which provides a compatibility restriction but not explicit guidance on when to prefer this over the set variant or how to handle non-Gen2 cameras. Usage niche is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_white_balance_setA

Set the front light's white balance (-1.0 cool/blue .. 1.0 warm/orange). Gen2 cameras only.

API: PUT /v11/video_inputs/{id}/lighting/switch (full-body write, GET-merged).

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
valueYes-1.0 (cool/blue) .. 1.0 (warm/orange), 0.0 = neutral

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the valid input range, generation compatibility, the exact API endpoint, and that it is a full-body write with GET-merged semantics. This gives meaningful behavioral insight beyond the tool name, though it stops short of explaining side effects or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the intended action, and every sentence contributes. The first sentence establishes the purpose and constraints; the second provides useful API-level detail without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a two-parameter mutation tool with no annotations, the description covers the range and API but leaves the 'camera' parameter unexplained and omits clear guidance on permissions or failure conditions. The output schema exists, so return value documentation is less critical, but the missing camera semantics and preconditions make it only moderately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no parameter descriptions, so the description must compensate. It fully explains the 'value' parameter via the white balance range (-1.0..1.0), but it does not explain the 'camera' parameter or its expected format beyond the schema's basic string type. Thus coverage is partial but helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Set the front light's white balance' with a specified numeric range and a Gen2-only compatibility constraint. It is a specific verb + resource that distinguishes it from siblings like bosch_camera_white_balance_get and bosch_camera_light_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states a key usage constraint ('Gen2 cameras only') and clarifies the operation is a write/update to lighting settings. It does not explicitly name alternative tools to use instead, but the scope is sufficiently clear to infer when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bosch_camera_wifiA

Get the WiFi signal quality for one camera.

Queries GET /v11/video_inputs/{id}/wifiinfo and returns {rssi, ssid, signal_strength}.

rssi: raw RSSI in dBm (negative integer, e.g. -67). ssid: the connected WiFi network name. signal_strength: 0-100 % quality derived from RSSI (-50 dBm = 100 %, -100 dBm = 0 %).

Useful for diagnosing intermittent connectivity, stream drops, or deciding whether to force prefer_local=True on privacy/light writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
rssiNoRaw RSSI in dBm (negative; e.g. -67)
ssidNoConnected WiFi SSID
signal_strengthNoSignal quality 0-100 % derived from RSSI (-50 dBm = 100 %, -100 dBm = 0 %)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains the API call is a GET request, details the returned fields with units and examples, and implies read-only behavior. Does not cover error handling or rate limits, but is otherwise transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured with a code block for API path and returned fields. Every sentence adds value, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature (one parameter, read-only, output schema present), the description covers the output format and usage context completely. No gaps for an agent to misinterpret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description must compensate. It mentions 'for one camera' but does not elaborate on how to specify the camera (e.g., ID, name, or format). Minimal guidance beyond purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets WiFi signal quality for one camera, specifying the API endpoint and exact data returned (RSSI, SSID, signal_strength). It is distinct from sibling tools which cover other camera operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases: diagnosing connectivity issues, stream drops, and deciding on prefer_local=True. Does not explicitly mention when not to use or alternatives, but context is clear and sufficient for a read-only diagnostic tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 15 tool updatesv1.7.3
    • Addedbosch_camera_darkness_threshold_get
    • Addedbosch_camera_darkness_threshold_set
    • Addedbosch_camera_hard_reset
    • Addedbosch_camera_led_brightness_get
    • Addedbosch_camera_led_brightness_set
    • Addedbosch_camera_lens_elevation_get
    • Addedbosch_camera_lens_elevation_set
    • Addedbosch_camera_rename
    • Addedbosch_camera_soft_reset
    • Addedbosch_camera_status_led_get
    • Addedbosch_camera_status_led_set
    • Addedbosch_camera_timestamp_overlay_get
    • Addedbosch_camera_timestamp_overlay_set
    • Addedbosch_camera_white_balance_get
    • Addedbosch_camera_white_balance_set
  2. 21 tool updatesv1.7.0
    • Addedbosch_camera_firmware_install
    • Addedbosch_camera_firmware_status
    • Addedbosch_camera_friends_invite
    • Addedbosch_camera_friends_list
    • Addedbosch_camera_friends_remove
    • Addedbosch_camera_friends_share
    • Addedbosch_camera_friends_unshare
    • Addedbosch_camera_intercom_open
    • Addedbosch_camera_lighting_schedule_get
    • Addedbosch_camera_lighting_schedule_set
    • Addedbosch_camera_motion_zones_clear
    • Addedbosch_camera_motion_zones_get
    • Addedbosch_camera_motion_zones_set
    • Addedbosch_camera_privacy_masks_clear
    • Addedbosch_camera_privacy_masks_get
    • Addedbosch_camera_privacy_masks_set
    • Addedbosch_camera_rules_add
    • Addedbosch_camera_rules_delete
    • Addedbosch_camera_rules_edit
    • Addedbosch_camera_rules_list
    • Addedbosch_camera_siren_duration_set
  3. 34 tool updatesv1.6.0
    • First observedbosch_camera_audio_detection_get
    • First observedbosch_camera_audio_detection_set
    • First observedbosch_camera_audio_get
    • First observedbosch_camera_audio_set
    • First observedbosch_camera_autofollow_get
    • First observedbosch_camera_autofollow_set
    • First observedbosch_camera_events
    • First observedbosch_camera_feature_flags
    • First observedbosch_camera_health_check_all
    • First observedbosch_camera_intrusion_get
    • First observedbosch_camera_intrusion_set
    • First observedbosch_camera_lan_ping
    • First observedbosch_camera_light_set
    • First observedbosch_camera_list
    • First observedbosch_camera_maintenance_status
    • First observedbosch_camera_mjpeg_snapshot
    • First observedbosch_camera_motion_get
    • First observedbosch_camera_motion_set
    • First observedbosch_camera_notifications_set
    • First observedbosch_camera_onvif_scopes
    • First observedbosch_camera_pan
    • First observedbosch_camera_privacy_set
    • First observedbosch_camera_privacy_sound_get
    • First observedbosch_camera_privacy_sound_set
    • First observedbosch_camera_rcp_version
    • First observedbosch_camera_recording_get
    • First observedbosch_camera_recording_set
    • First observedbosch_camera_siren_trigger
    • First observedbosch_camera_snapshot
    • First observedbosch_camera_status
    • First observedbosch_camera_stream_url
    • First observedbosch_camera_token_status
    • First observedbosch_camera_unread_get
    • First observedbosch_camera_wifi

TDQS

A3.6/5.0
Disambiguation5/5

Each tool targets a specific camera feature or action, with clear get/set pairs and distinct operations for friends, firmware, etc. No two tools have overlapping purposes.

Naming Consistency5/5

All tool names follow the consistent pattern 'bosch_camera_<feature>_<verb>', using snake_case throughout. Verbs are descriptive and uniform across features.

Tool Count2/5

55 tools is exceptionally high for a typical MCP server. While each tool corresponds to a distinct camera functionality, the sheer number may overwhelm agents and suggests possible over-fragmentation.

Completeness4/5

The tool surface covers virtually all camera configurations (audio, motion, privacy, lighting, siren, recording, rules, etc.) and includes useful utilities (LAN ping, token status, health check). Missing are clip download/playback and Wi-Fi configuration.

Maintenance

ActivityNo data
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables natural language control of Xiaomi smart home devices through MCP, focusing on homes, rooms, device names, and scenes without requiring protocol details.
    66
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language control of Loxone smart home systems, including lighting, audio, climate, and environmental monitoring, through MCP-compatible clients.
    29
    2
    AGPL 3.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables control of local Xiaomi smart home devices via MCP, allowing reading real-time status and setting properties through natural language, without relying on the Xiaomi cloud.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for controlling USB-connected DSLR cameras (e.g., Canon EOS 6D) via natural language, with features like capture, exposure settings, and autonomous timelapse with feedback-based auto exposure.
    9
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mosandlt/Bosch-Smart-Home-Camera-Tool-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server