unifi-protect — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited unifi-protect (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You have access to a UniFi Protect MCP server that lets you query and manage a UniFi Protect NVR. It provides 58 tools covering cameras, smart detections, Find Anything detection search, recordings, snapshots, lights, sensors, chimes, Known Faces, license plates, and the Alarm Manager (arm/disarm).
The server uses lazy loading by default — only meta-tools are registered initially:
| Meta-Tool | Purpose |
|---|---|
protect_tool_index | Discover tools by name/description; use category, search, or include_schemas to filter |
protect_execute | Call any tool by name (essential in lazy mode) |
protect_batch | Run multiple tools in parallel |
protect_batch_status | Check async batch job status |
Workflow: Call protect_tool_index to find the right tool, then protect_execute to call it. Use protect_batch for multiple independent queries.
All mutations are disabled by default because Protect controls physical security hardware.
Read operations — always available. Listing cameras, events, snapshots, sensor readings — all work without permissions.
Mutations require explicit opt-in via env vars:
UNIFI_POLICY_PROTECT_CAMERAS_UPDATE=true — camera settings, recording toggle, PTZ, rebootUNIFI_POLICY_PROTECT_LIGHTS_UPDATE=true — light brightness, PIR sensitivityUNIFI_POLICY_PROTECT_CHIMES_UPDATE=true — chime volume, triggerUNIFI_POLICY_PROTECT_ALARM_UPDATE=true — arm/disarm the Alarm Manager (Protect 6.1+)UNIFI_POLICY_PROTECT_RECOGNITION_UPDATE=true — Known Face rename/mergeUNIFI_POLICY_PROTECT_RECOGNITION_DELETE=true — Known Face deletionConfirmation flow — every mutation uses preview-then-confirm:
confirm=true → executes the mutationAlways preview first and show the user before confirming.
All tools return: {"success": true, "data": ...}, {"success": false, "error": "..."}, or {"success": true, "requires_confirmation": true, "preview": ...}. Always check success first.
Redacted secrets: RTSP/RTSPS stream aliases and URLs come back as ***REDACTED*** by default from protect_get_camera_streams. Raw values are controlled by process policy (UNIFI_PROTECT_REDACT_SENSITIVE_FIELDS=false or global UNIFI_REDACT_SENSITIVE_FIELDS=false), not by tool arguments.
protect_get_snapshot with include_image=true returns base64 JPEG inlineprotect_get_camera_streams gives stream URL metadata for video player integration; raw URLs require redaction policy to be disabled for a trusted local processprotect_list_smart_detections filters by type (person, vehicle, animal, package, face, licensePlate). These are the highest-signal events — prioritize over raw motion.protect_detection_search_labels to discover controller-supported label values, then pass those values to protect_search_detections for richer searches by vehicle type, color, device, or other Protect labels.camera_name alongside camera_id — no need to call protect_list_cameras separately to resolve names.protect_recent_events reads from websocket buffer instantly (no API call). Buffer holds ~100 events with 5-minute TTL. Use protect_list_events for historical queries.protect_export_clip returns metadata (not video data — too large for MCP). Max 2 hours, supports timelapse (fps: 4=60x, 8=120x, 20=300x)protect_ptz_preset with saved positionsprotect_list_known_faces to inspect face groups before rename, merge, or delete mutationsvalue strings.protect_list_events with time range filters.limit parameter to keep responses focused.security-digest skill which handles batch calls, severity classification, and cross-product correlation.Username and password are required (local admin credentials, not Ubiquiti SSO). API key support exists but is experimental — limited to read-only operations and a subset of tools.
To configure, run /unifi-protect:unifi-protect-setup or set env vars manually:
UNIFI_PROTECT_HOST=192.168.1.1
UNIFI_PROTECT_USERNAME=admin
UNIFI_PROTECT_PASSWORD=your-passwordIf the user also has networking or door access control, other UniFi MCP plugins are available:
unifi-network — network devices, clients, firewall, VPN, routingunifi-access — door locks, credentials, visitors, access policiesCameras are network clients — if a camera appears offline, the Network server can help check connectivity via unifi_lookup_by_ip.
For the complete list of all 58 tools organized by category with descriptions, tips, and common scenarios, read references/protect-tools.md.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.