Skip to main content
Glama
owine

UniFi Network MCP Server

by owine

List clients

unifi_list_clients
Read-only

List currently connected UniFi Network clients at a site to see who is online now, including name, type, IP, MAC, uplink device, and connection time.

Instructions

List currently connected clients at a site. Returns per client: id, name, type (WIRED/WIRELESS/VPN/TELEPORT), macAddress, ipAddress (may be absent), connectedAt, uplinkDeviceId (the switch/AP they're attached to), access.type. NOTE: verified against 11.0.83 (WIRED/WIRELESS; VPN/TELEPORT not live-verified) — the Integration API client schema is minimal and identical across those types; it does NOT expose signal strength, channel, or per-port binding. Use for: who's online right now. Disconnected/historical clients are NOT in the Integration API; use unifi_list_client_history and unifi_list_client_sessions for controller-retained records.

Input Schema

NameRequiredDescriptionDefault
limitNoNumber of records to return (API default: 25)
filterNoFilter expression. Filterable: id, type, macAddress, ipAddress, connectedAt (timestamp), access.type, access.authorized (boolean). NOT filterable: name, uplinkDeviceId. Example: type.eq('WIRELESS')
offsetNoNumber of records to skip
siteIdYesSite ID

Output Schema

NameRequiredDescriptionDefault
dataYes
countNo
limitNo
offsetNo
totalCountNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv2.15.0
    • changedInput schema / properties / filter / description
      Previous value: -"Filter expression"New value: +"Filter expression. Filterable: id, type, macAddress, ipAddress, connectedAt (timestamp), access.type, access.authorized (boolean). NOT filterable: name, uplinkDeviceId. Example: type.eq('WIRELESS')"
    • changedInput schema / properties / limit / description
      Previous value: -"Number of records to return (default: 25, max: 200)"New value: +"Number of records to return (API default: 25)"
    • changedInput schema / properties / offset / description
      Previous value: -"Number of records to skip (default: 0)"New value: +"Number of records to skip"
    • addedInput schema / properties / siteId / pattern
      Added value: +"^[A-Za-z0-9_-]{1,64}$"
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
  2. Changed1 schema field changedv2.13.0
    • changedInput schema / properties / limit / minimum
      Previous value: -1New value: +0
  3. First observedv2.8.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover safety (readOnly, non-destructive, closed-world), but the description adds substantial context: version-verification status, which client types are live-verified vs not, and what the API schema deliberately omits (signal strength, channel, per-port binding). This is rich disclosure beyond the annotations.

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-loads the core purpose and return fields, then packs caveats and routing into the tail. Dense but every clause carries information; only the field enumeration is arguably slightly over-detailed given an output schema exists.

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 read-only list tool with full schema coverage, an output schema, and safety annotations, the description covers scope, alternatives, verification caveats, and API limitations. Nothing an agent needs to invoke it correctly is missing.

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 100%, so limit/offset/filter/siteId are already fully documented in the schema, including filterable fields. The description adds no parameter syntax or format detail beyond that, so the baseline 3 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?

States a specific verb and resource with explicit scope ('List currently connected clients at a site'), and enumerates the returned fields. It clearly distinguishes itself from unifi_list_client_history and unifi_list_client_sessions by emphasizing 'currently connected' vs historical records.

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 says 'Use for: who's online right now' and states that disconnected/historical clients are NOT available here, naming the two sibling tools to use instead. The when-to-use and when-not-to-use conditions are fully specified.

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