Skip to main content
Glama
UniFi Protect MCP

UniFi Protect MCP

by owine

Get alarm hub

protect_get_alarm_hub
Read-only

Retrieve full details for a specific UniFi Protect alarm hub by ID, including armed state, battery, power, terminal status, and Thread network info.

Instructions

Get full details for a specific alarm hub by ID. Returns: id, modelKey ("linkstation"), name, mac, state, type, guid, isAlarmHub, ledSettings (isEnabled), lastEvent, alarmHub (armed, battery, buckboost, connector, cover, deviceTamperStatus (e.g. "tampered"), currentMeterChannelStatus, currentMeterStatus, inputPower, poeout, powerMeter, output and input (maps keyed by channel), inputTerminalStatus, outputTerminalStatus, emergencyTerminalStatus, auxiliaryPowerTerminalStatus), threadState (network: status, role, networkName, channel, panId, extendedPanId, joinedDeviceCount, errorReason, lastUpdatedAt) (7.3.70 docs).

Input Schema

NameRequiredDescriptionDefault
idYesAlarm hub ID

Output Schema

NameRequiredDescriptionDefault
idNoDevice ID
macNoMAC address
guidNoHardware MODEL GUID, shared by every unit of the same model. NOT a per-device identifier — use `id` to identify a device.
nameNoDevice name
typeNoHardware model name, e.g. "UVC G6 Turret", "UP Chime PoE", "UNVR-PRO"
stateNoCONNECTED | DISCONNECTED | ...
alarmHubNoAlarm hub status (object: armed, battery, buckboost, connector, cover, deviceTamperStatus (e.g. "tampered", added in 7.3.x), currentMeterChannelStatus, currentMeterStatus, inputPower, poeout, powerMeter, output and input (maps keyed by channel), inputTerminalStatus, outputTerminalStatus, emergencyTerminalStatus, auxiliaryPowerTerminalStatus)
modelKeyNoResource kind
lastEventNoLast event timestamp in epoch ms (number)
isAlarmHubNoWhether this device is an alarm hub (boolean)
ledSettingsNoLED settings (object: isEnabled)
threadStateNoThread radio state, added in 7.3.x (object: network — status, role, networkName, channel, panId, extendedPanId, joinedDeviceCount, errorReason, lastUpdatedAt)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv2.15.0
    • addedInput schema / properties / id / pattern
      Added value: +"^[A-Za-z0-9_-]{1,64}$"
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / alarmHub / description
      Previous value: -"Alarm hub status (object: armed, battery, connector, cover, output, input, …)"New value: +"Alarm hub status (object: armed, battery, buckboost, connector, cover, deviceTamperStatus (e.g. \"tampered\", added in 7.3.x), currentMeterChannelStatus, currentMeterStatus, inputPower, poeout, powerMeter, output and input (maps keyed by channel), inputTerminalStatus, outputTerminalStatus, emergencyTerminalStatus, auxiliaryPowerTerminalStatus)"
    • removedOutput schema / properties / deviceTamperStatus
      Removed value: -{
      -  "description": "Tamper status, added in 7.3.x, e.g. \"tampered\"",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
  2. Changed4 schema fields changedv2.13.0
    • addedOutput schema / properties / deviceTamperStatus
      Added value: +{
      +  "description": "Tamper status, added in 7.3.x, e.g. \"tampered\"",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / guid
      Added value: +{
      +  "description": "Hardware MODEL GUID, shared by every unit of the same model. NOT a per-device identifier — use `id` to identify a device.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / threadState
      Added value: +{
      +  "description": "Thread radio state, added in 7.3.x (object: network — status, role, networkName, channel, panId, extendedPanId, joinedDeviceCount, errorReason, lastUpdatedAt)"
      +}
    • addedOutput schema / properties / type
      Added value: +{
      +  "description": "Hardware model name, e.g. \"UVC G6 Turret\", \"UP Chime PoE\", \"UNVR-PRO\"",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed8 schema fields changedv2.11.5
    • removedOutput schema / properties / mac / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mac / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / modelKey / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / modelKey / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / state / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / state / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. Changed4 schema fields changedv2.7.5
    • addedOutput schema / properties / alarmHub
      Added value: +{
      +  "description": "Alarm hub status (object: armed, battery, connector, cover, output, input, …)"
      +}
    • addedOutput schema / properties / isAlarmHub
      Added value: +{
      +  "description": "Whether this device is an alarm hub (boolean)"
      +}
    • addedOutput schema / properties / lastEvent
      Added value: +{
      +  "description": "Last event timestamp in epoch ms (number)"
      +}
    • addedOutput schema / properties / ledSettings
      Added value: +{
      +  "description": "LED settings (object: isEnabled)"
      +}
  5. First observedv2.7.4

TDQS

B3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered without the description. The description adds only a restatement of returned fields, with nothing about auth requirements, ID validity/not-found behavior, or any operational constraint.

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

Conciseness2/5

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

The purpose sentence is front-loaded but is followed by a very long dump of return keys, nested sub-keys and even a docs version tag ('7.3.70 docs'). Since an output schema exists, this enumeration is largely wasted text and bloats the definition well past what is needed to select and call the tool.

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 single-parameter read tool with an output schema supplied, the essentials (what it returns, which ID to pass) are covered. The bulk of the description is redundant with structured data rather than filling real gaps like error or not-found behavior, so it is adequate but not complete in the places that would actually help.

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 100% for the single 'id' parameter, which already states it is the 'Alarm hub ID'. The description's 'by ID' adds no format, source, or lookup guidance (such as where to obtain the ID) beyond the schema, so the baseline 3 applies.

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?

Starts with a specific verb and resource ('Get full details for a specific alarm hub by ID'), which is unambiguous and clearly distinct from the list-style siblings like protect_list_alarm_hubs. It stops short of naming that sibling explicitly, so an agent must infer the retrieval-vs-enumeration split from the name pattern.

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?

Usage is only implied: the caller is expected to already hold a hub ID. There is no explicit guidance on when to reach for this tool versus protect_list_alarm_hubs (e.g. 'use the list tool to discover IDs'), and no prerequisites or failure conditions are stated.

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