Skip to main content
Glama

UniFi Protect: List Events

unifi_protect_list_events
Read-only

Search recorded UniFi Protect events over any time range to find motion, smart detections, doorbell rings, and camera connection changes, filtered by camera or event type.

Instructions

Search recorded events over any time range — motion, smart detections (person, vehicle, animal, package, licence plate), doorbell rings, and camera connection changes. This is the tool for questions like "what happened at the front door last night". Each result carries its camera's NAME as well as its id, so no second lookup is needed. Smart detections also say what was seen: people (how many people that one event tracked) and vehicles (each with its licence plate, colour and type where read). Times may be given in the console's own local clock ("1am"), which is what a question about last night means. READ ANY warnings IN THE RESULT BEFORE REPORTING A COUNT: a camera with the detector switched off returns zero matches, which is not the same as nothing having happened, and this tool says which case it is. Narrow with types, smartDetectTypes and cameraIds wherever you can: a busy system logs thousands of motion events a day.

Input Schema

NameRequiredDescriptionDefault
endNoEnd of the search window. Accepts ISO 8601 ("2026-08-29T22:00:00Z"), a relative expression ("2h ago", "30m", "7d"), or "now". Local times ("1am", "2026-08-30 01:00") are read in the console's own time zone. Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing.
limitNoMaximum number of items to return (1-500). Defaults to 50. A busy system logs thousands of motion events a day, so raise this deliberately.
orderNoWhich end of the window to return first.newest
startNoBeginning of the search window. Accepts ISO 8601 ("2026-08-29T22:00:00Z"), a relative expression ("2h ago", "30m", "7d"), or "now". Local times ("1am", "2026-08-30 01:00") are read in the console's own time zone. Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing.
typesNoEvent types to include. Defaults to motion, smart detections and rings. `smartDetectZone` is the object-detection type — pair it with smartDetectTypes to ask for people or vehicles specifically.
cameraIdNoRestrict to one camera — the `id` from unifi_protect_list_cameras. Omit for all cameras. Use cameraIds for several.
locationNoA configured place name, e.g. "front". Resolves to the cameras covering it — the console has no idea where anything is, so this comes from UNIFI_PROTECT_LOCATIONS. Read unifi-protect://locations to see what is defined.
cameraIdsNoRestrict to several cameras by id. Filtering happens on the console, so a narrow camera list over a long window returns that camera's events rather than whatever survived a fleet-wide limit.
smartDetectTypesNoWhat the camera classified, e.g. ["person"] or ["vehicle","licensePlate"]. Only meaningful for smartDetectZone / smartDetectLine events; the alrm* values are audio detections. Cameras without smart detection never produce these.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.1.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / end / description
      Previous value: -"End of the search window. Accepts ISO 8601 (\"2026-08-29T22:00:00Z\"), a relative expression (\"2h ago\", \"30m\", \"7d\"), or \"now\". Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing."New value: +"End of the search window. Accepts ISO 8601 (\"2026-08-29T22:00:00Z\"), a relative expression (\"2h ago\", \"30m\", \"7d\"), or \"now\". Local times (\"1am\", \"2026-08-30 01:00\") are read in the console's own time zone. Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing."
    • changedInput schema / properties / start / description
      Previous value: -"Beginning of the search window. Accepts ISO 8601 (\"2026-08-29T22:00:00Z\"), a relative expression (\"2h ago\", \"30m\", \"7d\"), or \"now\". Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing."New value: +"Beginning of the search window. Accepts ISO 8601 (\"2026-08-29T22:00:00Z\"), a relative expression (\"2h ago\", \"30m\", \"7d\"), or \"now\". Local times (\"1am\", \"2026-08-30 01:00\") are read in the console's own time zone. Converted to the millisecond epoch the console requires — do not pass Unix seconds, which would silently query 1970 and return nothing."
  2. First observedv0.3.0

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond readOnlyHint=true: discloses that results carry the camera NAME as well as id, that smart detections report `people` counts and `vehicles` with plate/colour/type, that local-clock times are read in the console's zone, and critically that a camera with its detector off returns zero matches plus a `warnings` entry. That last point prevents a serious misreading of results and is exactly what this dimension rewards.

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?

Front-loaded with purpose, then the concrete usage example, then the result-shape and warning caveats. Every sentence carries information, though it runs long and the warnings caveat in capitals sits awkwardly after the parameter guidance rather than with the return-value discussion.

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?

No output schema exists, so the description must cover return shape — and it does: camera name alongside id, per-event people/vehicle detail, and the warnings field with its interpretation. For a 9-parameter read tool with no output schema, an agent has everything needed to call it and read the response 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 coverage is already 100%, so the baseline is 3, but the description adds meaningful behavioural guidance: why to narrow with types/smartDetectTypes/cameraIds (thousands of motion events a day), and that smartDetectZone should be paired with smartDetectTypes. It does not re-explain start/end or limit mechanics, which the schema handles well.

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?

Specific verb ('Search recorded events'), resource, and scope ('over any time range'), plus an enumeration of the event families it covers (motion, smart detections, rings, connection changes). The example question 'what happened at the front door last night' makes it distinguishable from the single-event siblings like unifi_protect_get_event.

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?

Gives a concrete when-to-use framing ('This is the tool for questions like...'), explicit narrowing guidance ('Narrow with types, smartDetectTypes and cameraIds wherever you can'), and a caution about reading warnings before reporting counts. It never names an alternative tool to use instead (e.g. get_event for a single event), so the routing is strong but not complete.

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