@owine/unifi-protect-mcp
MCP server for UniFi Protect Integration API
Versions
2.10.0latest2.9.02.8.32.8.22.8.1+ show 23 moreshow less
2.8.02.7.52.7.42.7.32.7.22.7.12.7.02.6.02.5.02.4.02.3.32.3.22.3.12.3.02.2.12.2.02.1.02.0.22.0.12.0.01.1.01.0.00.9.0Tools 43
protect_enable_arm_alarm Enable the arm alarm using the currently selected arm profile. Only available when using local alarm manager.
protect_get_snapshot Get a JPEG snapshot from a camera. Returns a base64-encoded image/jpeg (rendered directly by MCP clients). Use highQuality=true for full-resolution capture; set channel=package to capture from the secondary package camera on doorbells with hasPackageCamera=true.
protect_list_files List files of a given type (only 'animations' is currently supported — clips uploadable to G4 Doorbell screens). Returns array; each record (7.1.83 docs): name (server-generated), type, originalName, path.
protect_trigger_alarm_webhook Trigger an alarm manager webhook by ID. This fires an external alarm action.
protect_upload_file Upload a base64-encoded file to UniFi Protect
protect_list_${cfg.plural} List all ${cfg.label.toLowerCase()}s managed by UniFi Protect. Returns array; each ${cfg.label.toLowerCase()} includes: ${cfg.returns}.
protect_get_${cfg.singular} Get full details for a specific ${cfg.label.toLowerCase()} by ID. Returns: ${cfg.returns}.
protect_update_${cfg.singular} Update ${cfg.label.toLowerCase()} settings (partial update via PATCH)
protect_list_cameras List all cameras managed by UniFi Protect. Returns array; each camera includes (Integration API 7.1.83-verified fields): id, mac, name, modelKey, state (CONNECTED/DISCONNECTED), activePatrolSlot, hasPackageCamera, hdrType, isMicEnabled, micVolume, videoMode, featureFlags (hasHdr, hasMic, hasSpeaker, hasLedStatus, smartDetectTypes[], smartDetectAudioTypes[], videoModes[], supportFullHdSnapshot), lcdMessage (type, resetAt, text), ledSettings (isEnabled, floodLed, welcomeLed), osdSettings (isNameEnabled, isDateEnabled, isLogoEnabled, isDebugEnabled, overlayLocation), smartDetectSettings (objectTypes[], audioTypes[]). The Integration API does NOT expose recording state, motion timestamps, connection/last-seen, firmware, host, or per-channel stream config.
protect_get_camera Get details for a specific camera by ID. The Protect Integration API returns the SAME field set as protect_list_cameras entries (id, mac, name, modelKey, state, activePatrolSlot, hasPackageCamera, hdrType, isMicEnabled, micVolume, videoMode, featureFlags, lcdMessage, ledSettings, osdSettings, smartDetectSettings) — there is no extended/by-id-only payload (confirmed live on 7.1.83). Recording state, motion events, zones, and channel/RTSP config are NOT exposed by this API surface.
protect_disable_arm_alarm Disable the arm alarm. Only available when using local alarm manager.
protect_set_current_arm_profile Set the current arm profile to be used when enabling the arm alarm. Only available when using local alarm manager.
protect_update_arm_profile Update an existing arm profile (partial update via PATCH). Only available when using local alarm manager.
protect_get_rtsp_streams Get active RTSPS stream sessions for a camera. Returns the per-quality stream URLs currently published (keys typically: high, medium, low, package). Empty/missing keys mean no session is currently active at that quality — use protect_create_rtsp_stream to start one.
protect_update_camera Update camera settings (partial update via PATCH)
protect_create_rtsp_stream Create an RTSPS stream session for a camera
protect_delete_rtsp_stream Stop and delete an active RTSPS stream session for a camera
protect_create_talkback Create a talkback (two-way audio) session for a camera. Returns: url, codec, samplingRate, bitsPerSample (the audio config for encoding outbound audio).
protect_disable_mic IRREVERSIBLE: Permanently disable the microphone on a camera. Can only be re-enabled by factory resetting the camera.
protect_start_ptz_patrol Start PTZ patrol on a camera at a given slot
protect_stop_ptz_patrol Stop PTZ patrol on a camera
protect_goto_ptz_preset Move camera PTZ to a preset position
protect_get_info Get UniFi Protect application information. Returns: applicationVersion (string).
protect_list_nvrs Get the NVR (Network Video Recorder) console info. NOTE: despite the name, the Protect Integration API's /nvrs endpoint returns a SINGLE NVR object, not an array. Returns: id, modelKey, name, doorbellSettings (defaultMessageText, defaultMessageResetTimeoutMs, customMessages[], customImages[]), armMode (status, armedAt, willBeArmedAt, breachDetectedAt, breachEventCount, breachTriggerEventId, breachEventId).
protect_subscribe_devices Connect to the device update WebSocket and collect messages for a specified duration (1-30s). Returns {messages, duration, error?}; each message has {type: 'add'|'update'|'remove', modelKey: 'camera'|'light'|'sensor'|..., id, payload: partial device fields that changed}. Use to detect state changes like isRecording flipping, battery drops, or new devices being adopted — fields delivered are only those that changed, not the full device object.
protect_subscribe_events Connect to the Protect event WebSocket and collect messages for a specified duration (1-30s). Returns {messages, duration, error?}; each event message includes: id, type ('motion' | 'ring' | 'smartDetectZone' | 'smartDetectLine' | 'sensorMotion' | 'sensorAlarm' | 'fingerprint' | 'nfcCard' | ...), start, end (null while ongoing), camera/sensor id, score, smartDetectTypes (['person','vehicle','animal','package','license_plate','face']), metadata (e.g. detected license plate text, NFC card id, fingerprint id, ULP user match).
protect_list_liveviews List all live views (camera grid layouts shown on viewers / in the Protect UI). Returns array; each liveview includes (Integration API 7.1.83-verified): id, modelKey, name, isDefault, isGlobal, layout (number, slot count), owner (user ID), slots (array of {cameras: string[], cycleMode, cycleInterval}). NOTE: slots use a `cameras` string-array, not a single `cameraId`.
protect_get_liveview Get details for a specific live view by ID. Returns: id, modelKey, name, isDefault, isGlobal, layout, owner, slots (each slot: cameras string[], cycleMode, cycleInterval). The full slot list is needed when updating because PATCH replaces the slots array.
protect_create_liveview Create a new live view
protect_update_liveview Update an existing live view (full replacement via PUT-style PATCH — include all fields)
protect_list_arm_profiles List all arm profiles (only available when using the local alarm manager — the standalone NVR alarm system, not Protect cloud alerts). Returns array; each profile (7.1.83 docs): id, name, automations[], creator, schedules[], recordEverything, activationDelay (0 | 60000 | 300000 | 600000), createdAt, updatedAt.
protect_create_arm_profile Create a new arm profile. Only available when using local alarm manager.
protect_delete_arm_profile Delete an arm profile by ID. Only available when using local alarm manager.
protect_list_users List all Protect users (filtered by the API key's access permissions). Returns array; each user includes (Integration API 7.1.83-verified): id, modelKey, name, firstName, lastName, email, ucoreUserId. The Integration API does NOT expose roles, permissions, login history, groups, or notification settings.
protect_get_user Get details for a specific Protect user by ID. Returns the same fields as protect_list_users entries: id, modelKey, name, firstName, lastName, email, ucoreUserId.
protect_list_ulp_users List all UniFi Identity (ULP) users. Returns array; each ULP user includes (Integration API 7.1.83-verified): id, modelKey, firstName, lastName, fullName, status (e.g. ACTIVE). Enrolled-credential detail (NFC cards, fingerprints) is NOT exposed by this API surface.
protect_get_ulp_user Get details for a specific UniFi Identity (ULP) user by ID. Returns: id, modelKey, firstName, lastName, fullName, status.
protect_play_siren Activate the siren alarm for a duration. Tracks status and can be stopped early.
protect_stop_siren Stop an active siren
protect_test_siren_sound Test the siren sound for 5 seconds at the specified volume
protect_test_speaker_sound Test the speaker sound at the specified volume
protect_activate_relay_output Control a relay output. Set state to \"on\"/\"off\" to set explicitly, or omit to toggle. When state is \"on\", pulseDuration auto-turns off after the given milliseconds.
protect_trigger_alarm_hub_output Trigger an alarm hub output channel. Used to turn on/off connected sirens, lights, or other actuators.
Permissions 2
network medium env_vars low