← Back to search

@owine/unifi-network-mcp

GitHub Actions Scanned 1d ago

MCP server for the UniFi Network API

C
70.8 / 100

Versions

2.10.0latest
Jul 28, 2026
2.9.0
Jul 21, 2026
2.8.3
Jul 13, 2026
2.8.2
Jul 7, 2026
2.8.1
Jun 30, 2026
+ show 22 moreshow less
2.8.0
Jun 22, 2026
2.7.5
Jun 16, 2026
2.7.4
Jun 9, 2026
2.7.3
Jun 2, 2026
2.7.2
May 26, 2026
2.7.1
May 25, 2026
2.7.0
May 15, 2026
2.6.0
May 13, 2026
2.5.0
May 13, 2026
2.4.0
May 11, 2026
2.3.3
May 4, 2026
2.3.2
Apr 28, 2026
2.3.1
Apr 7, 2026
2.3.0
Apr 1, 2026
2.2.1
Mar 31, 2026
2.2.0
Mar 15, 2026
2.1.0
Mar 10, 2026
2.0.2
Mar 10, 2026
2.0.1
Feb 17, 2026
2.0.0
Feb 12, 2026
1.0.0
Feb 12, 2026
0.9.0
Feb 12, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 76

unifi_bulk_delete_vouchers
annotations: none low

DESTRUCTIVE: Bulk delete hotspot vouchers matching a filter. The dry run shows only the request, not which vouchers match: call unifi_list_vouchers with the same filter first. Returns: vouchersDeleted (count of vouchers removed).

unifi_list_wans
annotations: none low

List WAN interface definitions at a site. Returns: id, name only (verified against 11.0.83 — the Integration API exposes no live link status or throughput rates here). Use for: WAN inventory, multi-WAN topology.

unifi_delete_voucher
annotations: none low

DESTRUCTIVE: Delete a hotspot voucher. Returns: vouchersDeleted (count of vouchers removed).

unifi_list_clients
annotations: none low

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.

filter string
unifi_get_client
annotations: none low

Get a specific connected client by ID. Returns same shape as unifi_list_clients entries.

unifi_authorize_guest
annotations: none low

Authorize a guest client through a captive-portal hotspot. Optional limits override hotspot defaults. Returns (per 11.0.83 docs, not live-verified): action, grantedAuthorization and revokedAuthorization objects (authorizedAt, authorizationMethod, expiresAt, dataUsageLimitMBytes, rxRateLimitKbps, txRateLimitKbps, usage). Idempotency: not safe to retry — re-authorizing extends the session.

dryRun boolean
unifi_unauthorize_guest
annotations: none low

Revoke guest authorization; the client returns to the captive portal on next request. Returns (per docs; the UNAUTHORIZE response sample is not rendered in 11.0.83 and not live-verified): action plus a revokedAuthorization object. Idempotent.

dryRun boolean
unifi_list_dns_policies
annotations: none low

List DNS policies (local DNS records and forward rules served by the gateway) at a site. Returns: id, type (A_RECORD, AAAA_RECORD, CNAME_RECORD, MX_RECORD, TXT_RECORD, SRV_RECORD, FORWARD_DOMAIN), enabled, domain, metadata.origin, plus type-specific fields: A ipv4Address+ttlSeconds; AAAA ipv6Address+ttlSeconds; CNAME targetDomain+ttlSeconds; MX mailServerDomain+priority; TXT text; SRV serverDomain/service/protocol/port/priority/weight; FORWARD_DOMAIN ipAddress (per 11.0.83 response samples).

unifi_get_dns_policy
annotations: none low

Get a specific DNS policy by ID (same fields as the list entry).

unifi_create_dns_policy
annotations: none low

Create a new DNS policy. Every type takes type, enabled, domain; the rest depends on type (per 11.0.83 docs): ${DNS_TYPES_DOC} Fields belonging to other types are rejected. Idempotency: not safe to retry — re-running creates a duplicate record.

domain string enabled boolean
unifi_update_dns_policy
annotations: none low

Update a DNS policy. Pass only the fields to change. The API's PUT replaces the whole policy, so this tool reads the current policy, keeps the documented fields for the (possibly new) type, overlays your changes and sends the full body. Changing type drops the old type's fields, so supply the new type's required fields: ${DNS_TYPES_DOC} dryRun shows the merged body.

domain string enabled boolean
unifi_delete_dns_policy
annotations: none low

DESTRUCTIVE: Delete a DNS policy

unifi_list_acl_rules
annotations: none low

List ACL rules (switch/AP-level access control lists, distinct from zone-based firewall policies) at a site. Returns: id, type (IPV4/MAC), name, enabled, action (ALLOW/BLOCK), description, protocolFilter, sourceFilter/destinationFilter matchers, enforcingDeviceFilter (which devices apply the rule), index (evaluation order — read-only; change it with unifi_reorder_acl_rules), metadata.origin. ACLs apply earlier in the path than firewall policies.

unifi_get_acl_rule
annotations: none low

Get a specific ACL rule by ID (full match criteria and action).

unifi_get_acl_rule_ordering
annotations: none low

Get the evaluation order of user-defined ACL rules. Returns: orderedAclRuleIds[] — rules are evaluated in list order.

unifi_create_acl_rule
annotations: none low

Create a new ACL rule

name string type enum action enum enabled boolean
unifi_update_acl_rule
annotations: none low

Update an ACL rule. Pass only the fields to change. The API's PUT replaces the whole rule, and an omitted filter means \"all\" (all protocols, sources, destinations or switches), so this tool reads the current rule, overlays your fields and sends the full body. Filters are replaced whole; null clears one. dryRun shows the merged body.

name string type enum action enum enabled boolean
unifi_delete_acl_rule
annotations: none low

DESTRUCTIVE: Delete an ACL rule

unifi_reorder_acl_rules
annotations: none low

Reorder user-defined ACL rules

unifi_list_traffic_matching_lists
annotations: none low

List traffic matching lists at a site — named collections of ports or IPs reused in firewall/ACL rules. Returns: id, type (PORTS/IPV4_ADDRESSES/IPV6_ADDRESSES), name, items[] (tagged objects such as {type:'PORT_NUMBER', value:22} or {type:'SUBNET', value:'<cidr>'}). Use for: finding the matching-list ID to reference from a firewall policy.

unifi_get_traffic_matching_list
annotations: none low

Get a specific traffic matching list by ID (full items array).

unifi_create_voucher
annotations: none low

Create one or more hotspot vouchers (use count for batch creation; more than ${VOUCHER_BATCH_WITHOUT_CONFIRM} at once needs confirm: true). Returns: vouchers[] — the created vouchers with their generated codes. Idempotency: not safe to retry — each call mints fresh codes.

unifi_create_traffic_matching_list
annotations: none low

Create a new traffic matching list. Items are tagged objects, not strings (live-verified 11.0.83): PORTS lists take {type:'PORT_NUMBER', value:443} (the older 10.4.57 spec also lists {type:'PORT_NUMBER_RANGE', start, stop}); IPV4_ADDRESSES lists take {type:'IP_ADDRESS', value:'192.0.2.1'} or {type:'SUBNET', value:'192.0.2.0/24'} (spec also: IP_ADDRESS_RANGE {start, stop}); IPV6_ADDRESSES lists take IP_ADDRESS or SUBNET. Idempotency: not safe to retry — re-running creates a duplicate list.

name string
unifi_update_traffic_matching_list
annotations: none low

Replace a traffic matching list (full PUT — type, name and the complete items array are all required; read the current list with unifi_get_traffic_matching_list first). Items are tagged objects, not strings (live-verified 11.0.83): PORTS lists take {type:'PORT_NUMBER', value:443} (the older 10.4.57 spec also lists {type:'PORT_NUMBER_RANGE', start, stop}); IPV4_ADDRESSES lists take {type:'IP_ADDRESS', value:'192.0.2.1'} or {type:'SUBNET', value:'192.0.2.0/24'} (spec also: IP_ADDRESS_RANGE {start, stop}); IPV6_ADDRESSES lists take IP_ADDRESS or SUBNET.

name string
unifi_delete_traffic_matching_list
annotations: none low

DESTRUCTIVE: Delete a traffic matching list

unifi_list_firewall_zones
annotations: none low

List firewall zones (groupings of networks for zone-based firewalling) at a site. Returns: id, name, networkIds[], metadata.origin (indicates system-defined vs user-defined). Use for: zone inventory; pair with unifi_list_firewall_policies to see rules between zones.

unifi_get_firewall_zone
annotations: none low

Get a firewall zone by ID (same fields as the list entry).

unifi_list_firewall_policies
annotations: none low

List firewall policies (zone-based rules) at a site. Returns: id, name, enabled, action (object with type field), source/destination (zone reference + trafficFilter), ipProtocolScope, connectionStateFilter, ipsecFilter, schedule, loggingEnabled, reportFlowEnabled (Insights Flows reporting; false on the predefined Allow Return Traffic and Block policies), index, description, metadata (origin SYSTEM_DEFINED/USER_DEFINED/DERIVED, configurable on system policies). action is {type: ALLOW|BLOCK, allowReturnTraffic on ALLOW}. The protocol lives in ipProtocolScope.protocolFilter (NAMED_PROTOCOL or PRESET); ports and addresses live in source/destination.trafficFilter, which is omitted when a side matches the whole zone. Unset optional fields (ipsecFilter, schedule, connectionStateFilter) are omitted, not null. Evaluation order within a zone pair comes from unifi_get_firewall_policy_ordering.

unifi_get_firewall_policy
annotations: none low

Get a firewall policy by ID with full match criteria and action. Returns the same fields as a unifi_list_firewall_policies entry, including loggingEnabled and reportFlowEnabled.

unifi_get_firewall_policy_ordering
annotations: none low

Get the evaluation order of user-defined firewall policies for a specific (source zone, destination zone) pair. Returns: orderedFirewallPolicyIds.beforeSystemDefined[] and orderedFirewallPolicyIds.afterSystemDefined[] arrays of policy IDs. System-defined rules sit between these two arrays.

unifi_create_firewall_zone
annotations: none low

Create a new custom firewall zone

name string
unifi_update_firewall_zone
annotations: none low

Replace a firewall zone's name and networkIds (full PUT: both are required, and networkIds replaces the zone's whole network list, so start from unifi_get_firewall_zone).

name string
unifi_delete_firewall_zone
annotations: none low

DESTRUCTIVE: Delete a custom firewall zone

unifi_create_firewall_policy
annotations: none low

Create a new firewall policy. Body fields (per 11.0.83 docs): ${FIREWALL_POLICY_BODY_DOC} Copy nested shapes (trafficFilter, protocolFilter) from an existing policy via unifi_get_firewall_policy. Idempotency: not safe to retry — re-running creates a duplicate policy.

unifi_update_firewall_policy
annotations: none low

Update a firewall policy. Pass only the fields to change in policy. The API's PUT replaces the whole policy — and an omitted reportFlowEnabled reverts to true — so this tool reads the current policy, keeps every documented body field, overlays your fields and sends the full body. Top-level fields are replaced whole (e.g. send the complete source object). Read-only response fields (id, index, metadata) are ignored. Body fields: ${FIREWALL_POLICY_BODY_DOC} For just logging/flow-reporting toggles, prefer unifi_patch_firewall_policy. dryRun shows the merged body.

unifi_patch_firewall_policy
annotations: none low

Partially update a firewall policy without resending all fields. loggingEnabled and reportFlowEnabled are the only fields documented as patchable in API 11.0.83 (reportFlowEnabled is ignored for the predefined Allow Return Traffic policies, which are never reported); other fields may be rejected — use unifi_update_firewall_policy for a full update. Idempotent for fields supplied.

unifi_delete_firewall_policy
annotations: none low

DESTRUCTIVE: Delete a firewall policy

unifi_reorder_firewall_policies
annotations: none low

Reorder user-defined firewall policies for a zone pair

unifi_list_vouchers
annotations: none low

List hotspot/guest-portal vouchers at a site. Returns: id, code, name, createdAt, activatedAt (when first guest used it), expiresAt, timeLimitMinutes, dataUsageLimitMBytes, rxRateLimitKbps, txRateLimitKbps, authorizedGuestLimit, authorizedGuestCount, expired. Use filter like 'expired.eq(true)' to bulk-find stale vouchers.

unifi_get_voucher
annotations: none low

Get a specific hotspot voucher by ID (same fields as the list entry).

unifi_list_vpn_tunnels
annotations: none low

List site-to-site VPN tunnels (IPsec, WireGuard, OpenVPN site-to-site) at a site. Returns: tunnel definitions per row (per-row schema not rendered in 11.0.83 docs and no tunnels to sample live; the older 10.4.57 spec lists id, type (IPSEC/OPENVPN/WIREGUARD), name, metadata.origin/source — call to inspect). For roaming client VPN servers, see unifi_list_vpn_servers.

unifi_list_vpn_servers
annotations: none low

List VPN servers (roaming/client-access VPNs) at a site. Returns: id, type (L2TP, OPENVPN, PPTP, UID, WIREGUARD), name, enabled, metadata.origin.

unifi_list_radius_profiles
annotations: none low

List RADIUS profiles (auth/accounting server configurations referenced by WiFi WPA-Enterprise, switch 802.1X port auth, VPN). Returns: id, name, metadata (origin, configurable).

unifi_list_device_tags
annotations: none low

List device tags at a site. Tags group APs/switches for selective WiFi broadcast (via broadcastingDeviceFilter on a WiFi network). Returns: id, name, deviceIds[], metadata.

unifi_list_dpi_categories
annotations: none low

List DPI categories (global, not site-scoped) — high-level traffic groupings like 'Streaming', 'Social Networks', 'Gaming'. Returns: id (numeric), name. Use the category id when building firewall policies that match by category.

unifi_list_dpi_applications
annotations: none low

List individual DPI applications (global) — specific apps/services like 'Netflix', 'Zoom', 'Steam'. Returns: id (numeric), name. More granular than unifi_list_dpi_categories.

unifi_list_countries
annotations: none low

List countries/regions (global) for geo-IP firewall rules. Returns: code (ISO alpha-2, e.g. 'US'), name. Use the code when building firewall policies that match by source/destination country.

unifi_get_info
annotations: none low

Get UniFi Network application info. Returns: applicationVersion only — the Integration API returns no isUniFiOSConsole or other field here. Use for: checking the Network version when a tool's description notes version-specific behaviour.

unifi_list_switch_stacks
annotations: none low

List Switch Stacks (multiple physical switches managed as one logical unit) at a site. Returns: id, deviceId (the stack's primary device), name, units[] (the stacked switches — named `members` on consoles older than 10.6.106), lags[] (LAGs spanning the stack), metadata.origin. Per-unit schema is not rendered in the 11.0.83 docs — call unifi_get_switch_stack to inspect. Use for: identifying stacked switches; individual member configs/stats still come from unifi_get_device.

unifi_get_switch_stack
annotations: none low

Get full details of a Switch Stack including all units and stacking topology. Returns the same fields as the list response but for a single stack: id, deviceId, name, units[] (named `members` before 10.6.106), lags[], metadata.origin.

unifi_list_mc_lag_domains
annotations: none low

List MC-LAG (Multi-Chassis Link Aggregation) Domains — pairs of switches presenting as one for LAG redundancy. Returns: id, name, peers[] (per the older 10.4.57 spec: {deviceId, linkPortIdxs[], role TOP|BOTTOM}; not live-verified), lags[] (LAGs spanning the domain), metadata.origin.

unifi_get_mc_lag_domain
annotations: none low

Get full details of an MC-LAG Domain (peer switches and member LAGs).

unifi_list_lags
annotations: none low

List LAGs (Link Aggregation Groups — bonded switch ports) at a site. Returns: id, type (LOCAL/SWITCH_STACK/MULTI_CHASSIS), members[] ({deviceId, portIdxs[]}), switchStackId (SWITCH_STACK) or mcLagDomainId (MULTI_CHASSIS), metadata.origin.

unifi_get_lag
annotations: none low

Get full details of a LAG including its type (LOCAL/SWITCH_STACK/MULTI_CHASSIS) and member ports.

unifi_list_networks
annotations: none low

List all networks (VLANs/LAN segments) at a site. Returns: id, name, management (UNMANAGED/GATEWAY/SWITCH), enabled, vlanId, default (true for the default network), zoneId (the firewall zone the network sits in), dhcpGuarding (only present when enabled), metadata.origin (+ metadata.configurable on the system-defined default network). NOTE: the list view is sparse — for subnet/DHCP/NTP detail (ipv4Configuration/ipv6Configuration), call unifi_get_network on a specific id. Use for: VLAN inventory; pair with unifi_get_network_references to find what consumes a network.

unifi_get_network
annotations: none low

Get a network/VLAN by ID. Returns the list fields PLUS (live-verified) isolationEnabled, internetAccessEnabled, mdnsForwardingEnabled, cellularBackupEnabled, a full ipv4Configuration object (autoScaleEnabled, hostIpAddress, prefixLength, dhcpConfiguration with mode/ipAddressRange/leaseTimeSeconds/domainName/pingConflictDetectionEnabled/ntpServerIpAddresses — which may contain empty-string entries), and an ipv6Configuration object when IPv6 is configured (interfaceType, clientAddressAssignment, routerAdvertisement, hostIpAddress, prefixLength). NOTE: subnet/DHCP detail appears here at get-by-id but NOT in unifi_list_networks (sparse list view).

unifi_get_network_references
annotations: none low

Get all objects that reference this network. Returns: { referenceResources: [{ resourceType (e.g. WIFI), referenceCount, references: [{ referenceId }] }] }. Use before deleting a network to find dependencies that need to be re-pointed or removed. NOTE: on 11.0.83 the controller returns HTTP 500 (api.unexpected-error) for many networks — observed on the default network and on networks used by PPSK keys. On a 500, fall back to unifi_list_wifi + unifi_get_wifi (network.networkId and securityConfiguration.presharedKeys[].network.networkId) and unifi_list_firewall_zones (networkIds).

unifi_create_network
annotations: none low

Create a new VLAN/network. The body depends on management (per 11.0.83 docs): ${NETWORK_VARIANTS_DOC} Idempotency: not safe to retry — re-running creates duplicates.

name string enabled boolean
unifi_update_network
annotations: none low

Update an existing network. Pass only the fields to change. The API's PUT replaces the whole network — omitting dhcpGuarding disables DHCP guarding, and GATEWAY networks must resend their full ipv4Configuration — so this tool reads the current network, keeps every documented body field for its management type, overlays your changes and sends the full body. Pass null to clear an optional field (e.g. ipv6Configuration: null removes IPv6). Nested objects such as ipv4Configuration are replaced whole, not deep-merged: read them with unifi_get_network and send the complete object. Variants: ${NETWORK_VARIANTS_DOC} dryRun shows the merged body.

unifi_delete_network
annotations: none low

DESTRUCTIVE: Delete a network — all clients on this network will be disconnected

unifi_list_wifi
annotations: none low

List all WiFi broadcasts (SSIDs) at a site. Returns (sparse list view, live-verified on 11.0.83): id, name (SSID), type (STANDARD/IOT_OPTIMIZED), enabled, metadata.origin, network reference (absent on PPSK SSIDs), securityConfiguration.type, broadcastingFrequenciesGHz, hotspotConfiguration (empty object when set). Booleans such as hideName/bandSteeringEnabled/clientIsolationEnabled, the full security configuration and optional configs are only returned by unifi_get_wifi. ${readRedaction} Use for: SSID inventory. For per-AP radio state (channel, txPower), use unifi_get_device on the AP.

unifi_get_wifi
annotations: none low

Get full configuration for a WiFi broadcast (SSID). Returns the list fields plus the booleans (hideName, clientIsolationEnabled, uapsdEnabled, multicastToUnicastConversionEnabled, bandSteeringEnabled, arpProxyEnabled, bssTransitionEnabled, advertiseDeviceName, channel2gLockedTo6, dtimPeriod2gLockedTo3), the full securityConfiguration (type, pmfMode, fastRoamingEnabled, saeConfiguration, presharedKeys[] on PPSK SSIDs, …), and optional configs when configured (omitted otherwise): clientFilteringPolicy, blackoutScheduleConfiguration, hotspotConfiguration, mdnsProxyConfiguration, handoffSuggestionsConfiguration, dtimPeriodByFrequencyGHzOverride, broadcastingDeviceFilter, mloEnabled. ${readRedaction}

unifi_create_wifi
annotations: none low

Create a new WiFi network (SSID). Required for both types: type, name, enabled, securityConfiguration, multicastToUnicastConversionEnabled, clientIsolationEnabled, hideName, uapsdEnabled, channel2gLockedTo6, dtimPeriod2gLockedTo3. STANDARD additionally requires broadcastingFrequenciesGHz, arpProxyEnabled, bssTransitionEnabled, advertiseDeviceName; fields marked "STANDARD only" are rejected for IOT_OPTIMIZED (per 11.0.83 docs). The response echo has passphrases redacted. Idempotency: not safe to retry — re-running creates a duplicate SSID.

name string type enum enabled boolean hideName boolean uapsdEnabled boolean channel2gLockedTo6 boolean dtimPeriod2gLockedTo3 boolean clientIsolationEnabled boolean multicastToUnicastConversionEnabled boolean
unifi_update_wifi
annotations: none low

Update an existing WiFi network. Pass only the fields to change. The API's PUT replaces the whole SSID and requires every documented required field, so this tool reads the current SSID, keeps every documented body field, overlays your changes and sends the full body — omitted fields keep their current values instead of being reset. Pass null to clear an optional config (e.g. broadcastingDeviceFilter: null broadcasts from all APs). Top-level objects are replaced whole: to change one security setting, start from the securityConfiguration unifi_get_wifi returns and edit it, since a partial object drops the passphrase or presharedKeys it omits. Passphrases are kept if you omit securityConfiguration or echo its "${REDACTED}" values; send a new one to change it. dryRun shows the merged body (secrets redacted).

unifi_delete_wifi
annotations: none low

DESTRUCTIVE: Delete a WiFi network — all clients on this SSID will be disconnected

unifi_list_sites
annotations: none low

List all sites the API key has access to. Returns: id (the siteId every other tool requires), internalReference, name. Use for: first call in any workflow — almost every other tool needs a siteId.

unifi_list_devices
annotations: none low

List all adopted devices (gateways, switches, APs) at a site. Returns: id, name, model, macAddress, ipAddress, state (ONLINE/OFFLINE/etc), supported, firmwareVersion, firmwareUpdatable, features[] (capability tags, e.g. ['switching'] or ['accessPoint']), interfaces[] (e.g. ['ports'] or ['radios']). NOTE: features/interfaces are string arrays here; unifi_get_device expands them into objects. Use for: device inventory; pair with unifi_get_device for full config (port table, radios) and unifi_get_device_statistics for live metrics.

filter string
unifi_get_device
annotations: none low

Get full configuration for a device. Returns (in addition to list fields): adoptedAt, provisionedAt, configurationId, uplink.deviceId (absent on the ISP modem), features (object keyed by capability: switching {lags[]} / accessPoint {}), interfaces.ports[] for switches, gateways and modems ({idx, state, connector, maxSpeedMbps, speedMbps (may be omitted on DOWN ports), poe:{standard, type, enabled, state} on PoE ports only}), interfaces.radios[] for APs ({wlanStandard, frequencyGHz, channelWidthMHz, channel}). Some devices (e.g. 5G modems) return empty features/interfaces objects. NOTE: in the LIST endpoint, features/interfaces are capability-tag string arrays instead. Use for: switch port layout/PoE state, AP radio config, uplink topology. For live throughput/CPU/memory, use unifi_get_device_statistics.

unifi_get_device_statistics
annotations: none low

Get latest live statistics for a device. Returns: uptimeSec, lastHeartbeatAt, nextHeartbeatAt, loadAverage1/5/15Min, cpuUtilizationPct, memoryUtilizationPct, uplink (txRateBps, rxRateBps; absent on e.g. the ISP modem), interfaces.radios[] for APs ({frequencyGHz, txRetriesPct}; interfaces is {} for non-AP devices). NOTE: verified against 11.0.83 — the Integration API does NOT expose per-switch-port byte/error/PoE-power counters here; port-level live stats are unavailable. Use for: device health and AP radio metrics. For config (channel, power, port assignment), use unifi_get_device.

unifi_list_pending_devices
annotations: none low

List devices pending adoption across all sites (global endpoint, not site-scoped). Returns: basic device info per pending device (macAddress, model, ipAddress, firmwareVersion, etc. — exact per-row schema is not rendered in the 11.0.83 docs). Use for: discovering new devices on the network before calling unifi_adopt_device.

filter string
unifi_adopt_device
annotations: none low

Adopt a pending device into a site by MAC address. The device must already appear in unifi_list_pending_devices. Idempotency: not safe to retry — re-adopting may error or duplicate.

dryRun boolean macAddress string ignoreDeviceLimit boolean
unifi_remove_device
annotations: none low

DESTRUCTIVE: Remove (unadopt) a device from a site. If the device is online, it will be reset to factory defaults

dryRun boolean
unifi_restart_device
annotations: none low

Restart (reboot) a device. The device will be unreachable for ~1–3 minutes. Not idempotent: each call triggers a fresh reboot.

dryRun boolean
unifi_power_cycle_port
annotations: none low

Power-cycle PoE on a specific switch port (briefly drops then restores power). portIdx is the port number (1-based) as shown in unifi_get_device interfaces.ports[].idx. Use for: rebooting a PoE-powered camera/AP without touching the device.

dryRun boolean portIdx number
unifi_list_client_history
annotations: none low

List historical/offline client inventory using the controller v2 API. Returns OFFLINE clients only — currently connected clients are excluded, so merge with unifi_list_clients for a full inventory. Includes names, MACs, first_seen and last_seen epoch seconds when available. This is inventory, not session history; use unifi_list_client_sessions for past connections. Requires controller history API-key support; errors never mean zero activity. Retention depends on the controller. Returns the most recently seen clients first, up to limit, with totalCount; truncated: true means less recently seen clients were left out, so raise limit (narrowing withinHours drops those same clients). Rows carry only ${Object.keys(HistoryClient.shape).join(", ")}.

limit number withinHours number
unifi_list_client_sessions
annotations: none low

Read retained past client connections, including disconnected clients, from the controller stat/session query endpoint. POST here only reads statistics. Rows carry only _id, mac, hostname, is_wired, assoc_time (epoch seconds), duration (seconds), rx_bytes/tx_bytes (controller perspective) and roaming_sessions when available. Use an explicit UTC epoch-second window (max 31 days). If mayBeTruncated is true, split the time window (overlap boundaries and deduplicate IDs) or filter by MAC. The controller ignores offset pagination. Records reflect controller retention and may omit ongoing sessions. Wi-Fi association/bytes do not establish end-to-end Internet success.

end number mac string limit number start number

Permissions 3

network medium
Server uses network capabilities via: fetch()
shell high
Server uses shell capabilities via: child_process
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 163

low
Tool 'unifi_list_clients' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_client' has no annotations annotation_checker · 100%
low
Tool 'unifi_authorize_guest' has no annotations annotation_checker · 100%
low
Tool 'unifi_unauthorize_guest' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_dns_policies' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_dns_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_dns_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_dns_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_dns_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_acl_rules' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_acl_rule' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_acl_rule_ordering' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_acl_rule' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_acl_rule' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_acl_rule' has no annotations annotation_checker · 100%
low
Tool 'unifi_reorder_acl_rules' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_traffic_matching_lists' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_traffic_matching_list' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_traffic_matching_list' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_traffic_matching_list' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_traffic_matching_list' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_firewall_zones' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_firewall_zone' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_firewall_policies' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_firewall_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_firewall_policy_ordering' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_firewall_zone' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_firewall_zone' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_firewall_zone' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_firewall_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_firewall_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_patch_firewall_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_firewall_policy' has no annotations annotation_checker · 100%
low
Tool 'unifi_reorder_firewall_policies' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_vouchers' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_voucher' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_voucher' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_voucher' has no annotations annotation_checker · 100%
low
Tool 'unifi_bulk_delete_vouchers' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_wans' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_vpn_tunnels' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_vpn_servers' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_radius_profiles' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_device_tags' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_dpi_categories' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_dpi_applications' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_countries' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_info' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_switch_stacks' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_switch_stack' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_mc_lag_domains' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_mc_lag_domain' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_lags' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_lag' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_networks' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_network' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_network_references' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_network' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_network' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_network' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_wifi' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_wifi' has no annotations annotation_checker · 100%
low
Tool 'unifi_create_wifi' has no annotations annotation_checker · 100%
low
Tool 'unifi_update_wifi' has no annotations annotation_checker · 100%
low
Tool 'unifi_delete_wifi' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_sites' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_devices' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_device' has no annotations annotation_checker · 100%
low
Tool 'unifi_get_device_statistics' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_pending_devices' has no annotations annotation_checker · 100%
low
Tool 'unifi_adopt_device' has no annotations annotation_checker · 100%
low
Tool 'unifi_remove_device' has no annotations annotation_checker · 100%
low
Tool 'unifi_restart_device' has no annotations annotation_checker · 100%
low
Tool 'unifi_power_cycle_port' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_client_history' has no annotations annotation_checker · 100%
low
Tool 'unifi_list_client_sessions' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
info
package.json metadata manifest_parser · 100%
info
Tool: unifi_list_clients manifest_parser · 85%
info
Tool: unifi_get_client manifest_parser · 85%
info
Tool: unifi_authorize_guest manifest_parser · 85%
info
Tool: unifi_unauthorize_guest manifest_parser · 85%
info
Tool: unifi_list_dns_policies manifest_parser · 85%
info
Tool: unifi_get_dns_policy manifest_parser · 85%
info
Tool: unifi_create_dns_policy manifest_parser · 85%
info
Tool: unifi_update_dns_policy manifest_parser · 85%
info
Tool: unifi_delete_dns_policy manifest_parser · 85%
info
Tool: unifi_list_acl_rules manifest_parser · 85%
info
Tool: unifi_get_acl_rule manifest_parser · 85%
info
Tool: unifi_get_acl_rule_ordering manifest_parser · 85%
info
Tool: unifi_create_acl_rule manifest_parser · 85%
info
Tool: unifi_update_acl_rule manifest_parser · 85%
info
Tool: unifi_delete_acl_rule manifest_parser · 85%
info
Tool: unifi_reorder_acl_rules manifest_parser · 85%
info
Tool: unifi_list_traffic_matching_lists manifest_parser · 85%
info
Tool: unifi_get_traffic_matching_list manifest_parser · 85%
info
Tool: unifi_create_traffic_matching_list manifest_parser · 85%
info
Tool: unifi_update_traffic_matching_list manifest_parser · 85%
info
Tool: unifi_delete_traffic_matching_list manifest_parser · 85%
info
Tool: unifi_list_firewall_zones manifest_parser · 85%
info
Tool: unifi_get_firewall_zone manifest_parser · 85%
info
Tool: unifi_list_firewall_policies manifest_parser · 85%
info
Tool: unifi_get_firewall_policy manifest_parser · 85%
info
Tool: unifi_get_firewall_policy_ordering manifest_parser · 85%
info
Tool: unifi_create_firewall_zone manifest_parser · 85%
info
Tool: unifi_update_firewall_zone manifest_parser · 85%
info
Tool: unifi_delete_firewall_zone manifest_parser · 85%
info
Tool: unifi_create_firewall_policy manifest_parser · 85%
info
Tool: unifi_update_firewall_policy manifest_parser · 85%
info
Tool: unifi_patch_firewall_policy manifest_parser · 85%
info
Tool: unifi_delete_firewall_policy manifest_parser · 85%
info
Tool: unifi_reorder_firewall_policies manifest_parser · 85%
info
Tool: unifi_list_vouchers manifest_parser · 85%
info
Tool: unifi_get_voucher manifest_parser · 85%
info
Tool: unifi_create_voucher manifest_parser · 85%
info
Tool: unifi_delete_voucher manifest_parser · 85%
info
Tool: unifi_bulk_delete_vouchers manifest_parser · 85%
info
Tool: unifi_list_wans manifest_parser · 85%
info
Tool: unifi_list_vpn_tunnels manifest_parser · 85%
info
Tool: unifi_list_vpn_servers manifest_parser · 85%
info
Tool: unifi_list_radius_profiles manifest_parser · 85%
info
Tool: unifi_list_device_tags manifest_parser · 85%
info
Tool: unifi_list_dpi_categories manifest_parser · 85%
info
Tool: unifi_list_dpi_applications manifest_parser · 85%
info
Tool: unifi_list_countries manifest_parser · 85%
info
Tool: unifi_get_info manifest_parser · 85%
info
Tool: unifi_list_switch_stacks manifest_parser · 85%
info
Tool: unifi_get_switch_stack manifest_parser · 85%
info
Tool: unifi_list_mc_lag_domains manifest_parser · 85%
info
Tool: unifi_get_mc_lag_domain manifest_parser · 85%
info
Tool: unifi_list_lags manifest_parser · 85%
info
Tool: unifi_get_lag manifest_parser · 85%
info
Tool: unifi_list_networks manifest_parser · 85%
info
Tool: unifi_get_network manifest_parser · 85%
info
Tool: unifi_get_network_references manifest_parser · 85%
info
Tool: unifi_create_network manifest_parser · 85%
info
Tool: unifi_update_network manifest_parser · 85%
info
Tool: unifi_delete_network manifest_parser · 85%
info
Tool: unifi_list_wifi manifest_parser · 85%
info
Tool: unifi_get_wifi manifest_parser · 85%
info
Tool: unifi_create_wifi manifest_parser · 85%
info
Tool: unifi_update_wifi manifest_parser · 85%
info
Tool: unifi_delete_wifi manifest_parser · 85%
info
Tool: unifi_list_sites manifest_parser · 85%
info
Tool: unifi_list_devices manifest_parser · 85%
info
Tool: unifi_get_device manifest_parser · 85%
info
Tool: unifi_get_device_statistics manifest_parser · 85%
info
Tool: unifi_list_pending_devices manifest_parser · 85%
info
Tool: unifi_adopt_device manifest_parser · 85%
info
Tool: unifi_remove_device manifest_parser · 85%
info
Tool: unifi_restart_device manifest_parser · 85%
info
Tool: unifi_power_cycle_port manifest_parser · 85%
info
Tool: unifi_list_client_history manifest_parser · 85%
info
Tool: unifi_list_client_sessions manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (7) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'unifi_list_sites': Cross-tool prerequisite: 'first call/use' poisoning · 85%
info
SBOM generated: 12 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%