unifi-mcp-server
The UniFi MCP Server is a read-only, MSP-style MCP server for multi-site UniFi network management, providing fleet-wide analytics, health monitoring, and diagnostics through the official UniFi Site Manager API and Cloud Connector. It offers 54 tools and 8 workflow prompts.
Multi-site Analytics & Health
Get health overviews of all sites with severity verdicts (
healthy/info/warning/critical/unknown)Analyze individual site health (device status, WAN info, reboot detection)
Compare sites side-by-side to spot fleet outliers
Aggregated site summaries combining devices + WAN + clients + networks + WiFi in a single call
Per-site health timeline over a configurable lookback window (1–90 days)
Device & Firmware Management
List devices (switches, APs, gateways, cameras) with optional filtering
Detect recently rebooted devices fleet-wide or per site
Firmware inventory grouped by version/model to surface outdated devices
WAN & ISP Monitoring
WAN uptime trends across all sites with severity flagging (e.g., <90% uptime →
critical)ISP performance metrics (latency, downtime, uptime, speed)
SD-WAN configuration listing and status inspection
Client Analytics
Top N bandwidth consumers per site (combined, TX, or RX); requires owner API key
Cloud Connector (35 additional tools) unlocked with an owner-role API key:
Per-device/client details and statistics, network configs, WiFi broadcasts
Firewall zones/policies, ACL rules, DNS policies, traffic rules
WANs, VPN tunnels/servers, vouchers, RADIUS profiles, DPI categories, and more
Raw Site Manager API
List/get hosts, list sites, list devices, ISP metrics, SD-WAN configs
8 Pre-built MCP Prompts
Fleet triage, firmware rollout audit, WAN uptime/SLA report, cross-site anomaly detection
MSP onboarding checklist, monthly client report, fleet firmware plan, bandwidth complaint investigation
Other Highlights
search-tools: natural language tool discovery across categoriesToken-efficient design:
extractFieldsparameter and aggregation tools reduce round-trips and token usageSupports
stdioand Streamable HTTP output modesAll operations are read-only due to current UniFi API limitations
Provides tools for managing UniFi network devices, sites, and clients via the Site Manager API and Cloud Connector, offering analytics, severity verdicts, and MSP workflow prompts.
UniFi MCP Server
The MSP-style UniFi MCP — built around the official Site Manager API + Cloud Connector with cross-site analytics no other UniFi MCP exposes.
54 tools split across 7 semantic-analysis aggregations, 9 raw Site Manager, and 35 Cloud Connector — plus 2 optional local controller tools that surface per-port error counters and SFP DDM the Cloud API doesn't expose. Severity verdicts (
healthy/info/warning/critical) on top of curated thresholds. 8 MCP Prompts (4 fleet-wide ops + 4 MSP workflows). Read-only — Ubiquiti's API keys don't ship write yet.
Pre-flight diagnostic
npx -y @us-all/unifi-mcp --doctorValidates env vars, pings Site Manager API, probes Cloud Connector (if owner key set), and checks category toggles before starting. Exits non-zero on critical issues so it works in CI / pre-deploy scripts.
Related MCP server: UniFi MCP Server
What it does that others don't
Site Manager analytics —
site-health-timeline,summarize-site,firmware-inventory,compare-sites,wan-uptime-trend,top-clients-by-bandwidth,list-sites-overview. No other UniFi MCP exposes these.Severity verdicts, not just numbers — every analysis tool returns
healthy / info / warning / critical / unknownwith a curated reason. Curated thresholds (e.g. WAN uptime <90% =critical, startupTime <1h =criticalpost-reboot).Cloud Connector first-class — 35 tools through the official
/v1/connector/consoles/{id}/...proxy.connectorAvailable(capability) vsconnectorResolved(this-call) split.Aggregation tools — fold 3–7 sequential calls into 1 with
caveatsarray surfacing partial failures (e.g. Site Manager API can't window-bound WAN uptime — that's surfaced explicitly).MCP Prompts (8) — fleet ops:
triage-site-degradation,firmware-rollout-audit,wan-uptime-report,cross-site-anomaly-detection. MSP workflows:msp-onboard-site-checklist,msp-monthly-client-report,msp-fleet-firmware-plan,msp-bandwidth-complaint-investigation.Token-efficient by design — smallest schema footprint of all
@us-all/*MCPs (default ~5K tokens with owner key). Fleet of 200+ devices analyzable inside a single session.Apps SDK card —
summarize-siterenders as a fleet-status card on ChatGPT clients (online %, WAN uptime, gateway, devices) via_meta["openai/outputTemplate"]. Claude clients receive the same JSON content.stdio + Streamable HTTP — defaults to stdio. Set
MCP_TRANSPORT=httpfor ChatGPT Apps SDK or remote clients (Bearer auth viaMCP_HTTP_TOKEN).Local controller direct access (v1.13.0) — opt-in
UNIFI_LOCAL_*env enables 2 tools that bypass the Cloud Connector and hit the controller's legacy/api/s/{site}/stat/device/{mac}directly on the LAN:get-port-errors(port-level rx/tx errors, link-flap counters, SFP DDM — Rx/Tx Power dBm, temperature, voltage, TX/RX fault) andlist-port-flap-summary(fleet-wide port instability ranking). Surfaces data the Integration API doesn't expose. Requires LAN reachability.
Try this — 5 prompts
Connect the server to Claude Desktop or Claude Code, then paste any of these:
MSP morning check — "Fleet health check across all my UniFi sites. Flag anything not
healthywith severity, top 3 issues."Firmware rollout audit — "Find devices on outdated firmware across every site. Group by site, show current vs latest version, prioritize by criticality."
Site degradation triage — "USM site has WiFi complaints. Pull the last 24h: device statuses, WAN uptime, recent reboots, top-bandwidth clients. Anything anomalous?"
WAN SLA report — "Generate a monthly WAN uptime report for all sites. Surface outages > 5 minutes, dual-WAN failover events, sites below 99.5% target."
Cross-site anomaly — "Compare USS to my other sites — clients per AP, traffic patterns, device firmware mix. Flag outliers and suggest the most likely cause."
Port flap triage (requires
UNIFI_LOCAL_*) — "Rank every port across all switches by instability score. For the top 3 worst offenders, pull SFP DDM if present and tell me whether the signal itself is bad or it's something downstream."
When to use this vs other UniFi MCPs
sirkirby/unifi-mcp | enuno/unifi-mcp-server |
| |
GitHub stars | 291 | 117 | — |
Tool count | 224 | 74 | 54 |
Scope | Network + Protect + Access + Drive | Network + multi-site + QoS + backup | Site Manager + Cloud Connector + analytics |
Site Manager API | ❌ | partial | ✅ deep + analytics |
Cloud Connector | ❌ | partial (3 modes) | ✅ avail/resolved split |
UniFi Protect (cameras) | ✅ | ❌ | ❌ (out of scope) |
UniFi Access (doors) | ✅ | ❌ | ❌ (out of scope) |
Aggregation tools | ❌ | ❌ | ✅ 7 |
Severity verdicts | ❌ | ❌ | ✅ curated thresholds |
MCP Prompts | ❌ | ❌ | ✅ 8 (incl. 4 MSP workflows) |
Use sirkirby when you need cameras (Protect) or door access. Use enuno if you want raw Network API breadth. Use this server for MSP-style multi-site analytics, fleet triage, and any "is something off?" question across many consoles.
Install
Claude Desktop
{
"mcpServers": {
"unifi": {
"command": "npx",
"args": ["-y", "@us-all/unifi-mcp"],
"env": {
"UNIFI_API_KEY": "<your-key>",
"UNIFI_API_KEY_OWNER": "<owner-key-or-same-key-if-role=owner>"
}
}
}
}Claude Code
claude mcp add unifi -s user \
-e UNIFI_API_KEY=<your-key> \
-e UNIFI_API_KEY_OWNER=<owner-key> \
-- npx -y @us-all/unifi-mcpBuild from source
git clone https://github.com/us-all/unifi-mcp-server.git
cd unifi-mcp-server && pnpm install && pnpm build
node dist/index.jsAPI keys — which one and where
The most common onboarding friction. UniFi has two surfaces through the same https://api.ui.com/v1:
Surface | What it gives | Path | Env var |
Site Manager | hosts, sites, devices summary, ISP metrics, SD-WAN configs (aggregated, console-wide) |
|
|
Cloud Connector | per-device, per-client, networks, firewall, WiFi (proxies to local controller) |
|
|
API key permissions inherit from the role of the account that created them.
Account role | Site Manager | Cloud Connector |
Admin (non-owner) | ✅ | ❌ 403 |
Owner | ✅ | ✅ |
If you have the owner role, set both env vars to the same key. That's the most common case for @us-all operators.
Get the key: unifi.ui.com → Settings → API → Generate. View Only is the only option in GA today (Full Access greyed out — Early Access program needed for write).
Cloud Connector requirements
Console firmware ≥ 5.0.3
API path:
https://api.ui.com/v1/connector/consoles/{hostId}/{appPath}Local
siteIdis a UUID, not the literal stringdefaultAvailable endpoints: Network integration API (
/network/integration/v1/sites, devices, clients, networks). Legacy paths (/api/s/{site}/stat/event) return 404. Event logs / syslog not exposed.
Local controller (optional, v1.13.0+)
Adds 2 tools that fill the gap left by Cloud Connector — per-port error counters, flap counters, and SFP DDM. These live in /api/s/{site}/stat/device/{mac} (legacy) and the official Network Integration API does not expose them (verified against OpenAPI spec v10.4.57).
Requirements:
LAN/VPN reachability from the host running this MCP to the controller (typically
https://<controller-ip>)A controller local account (Viewer / Limited Admin role is sufficient — Owner credentials NOT required)
Self-signed cert handling: set
UNIFI_LOCAL_INSECURE=truefor stock UDM Pro
Auth flow: POST /api/auth/login (cookie) → all subsequent calls re-use the session, 401 triggers automatic re-login. Read-only.
Configuration
Variable | Required | Default | Description |
| ✅ | — | API key from unifi.ui.com (any admin role) |
| ❌ | — | Owner-role API key — enables 35 Cloud Connector tools. If your key has owner role, set this to the same value. |
| ❌ |
| API base URL |
| ❌ | — | Comma-sep allowlist of categories. |
| ❌ | — | Comma-sep denylist. Ignored when |
| ❌ |
|
|
| conditional | — | Bearer token. Required when |
| ❌ |
| HTTP listen port |
| ❌ |
| HTTP bind host (DNS rebinding protection auto-enabled for localhost) |
| ❌ |
| Skip Bearer auth — e.g. behind a reverse proxy that handles it |
| ❌ | — | Local controller URL (e.g. |
| conditional | — | Controller local account username (required when |
| conditional | — | Controller local account password (required when |
| ❌ |
| Site slug for legacy |
| ❌ |
| Accept self-signed cert (typical for UDM Pro). |
Categories (9): analysis, raw, devices, clients, networks, firewall, wan, reference, local.
When MCP_TRANSPORT=http: POST /mcp (Bearer-auth JSON-RPC) + GET /health (public liveness).
Token efficiency
Smallest schema footprint of all @us-all/* MCPs.
Scenario | Tools | Schema tokens |
default no-owner | 17 | 1,700 |
| 8 | 1,000 (−42%) |
default with owner key | 52 | ~5,000 |
| 8 | 1,000 (−80%) |
Severity & thresholds
Every analysis tool returns one of:
healthy— no issuesinfo— informational, no actionwarning— needs attentioncritical— immediate actionunknown— API failure or incomplete data
Curated thresholds:
Condition | Severity |
Device offline |
|
|
|
|
|
|
|
WAN uptime < 90% |
|
WAN uptime < 95% |
|
MCP Prompts (8)
Workflow templates available via MCP prompts/list. Four are fleet-ops; four are MSP-specific (managed-service-provider workflows).
Fleet ops:
triage-site-degradation— site complaints workflow: device + WAN + reboots + clients in sequence.firmware-rollout-audit— fleet-wide firmware diff and rollout safety check.wan-uptime-report— monthly WAN SLA-style report across sites.cross-site-anomaly-detection— compare a site to fleet baseline; flag outliers.
MSP workflows:
msp-onboard-site-checklist— pass/fail readiness checklist for a newly added customer site (firmware floor, console connectivity, uptime trend, connector availability, firewall sanity, recent reboots, pending devices).msp-monthly-client-report— customer-facing monthly health report (one site → headline, network availability, devices, top users, recommendations) with non-technical phrasing.msp-fleet-firmware-plan— staggered N-wave rollout plan to a target firmware version, ordered by risk-tolerance with maintenance windows + rollback triggers.msp-bandwidth-complaint-investigation— triage 'internet is slow at site X' via WAN trend + ISP metrics + top clients + DPI categories + recent reboots.
MCP Resources
unifi://site/{hostName}/devices— site's devices snapshotunifi://reboots/recent— recently rebooted devices fleet-wide
Tools (54 + 2 optional local)
9 categories. Use search-tools to discover at runtime; full list collapsed below. Cloud Connector tools (33) only register when UNIFI_API_KEY_OWNER is set; without it the surface is 19 tools. Local controller tools (2) only register when UNIFI_LOCAL_URL/USER/PASS are set.
Group | Tools |
Semantic analysis (incl. aggregations) | 9 |
Site Manager raw | 9 |
Cloud Connector (devices/clients/networks/wifi/firewall/wan/reference) | 33 |
Sites local ( | 2 |
Local controller ( | 2 |
Meta ( | 1 |
Semantic analysis (9)
list-sites-overview, analyze-site-health, detect-recent-reboots, compare-sites, firmware-inventory, wan-uptime-trend, top-clients-by-bandwidth, summarize-site (aggregation), site-health-timeline (aggregation)
Site Manager API (9)
list-hosts, get-host, list-sites, list-devices, get-isp-metrics (optional), query-isp-metrics (optional), list-sdwan-configs, get-sdwan-config, get-sdwan-config-status
Cloud Connector — devices (4)
get-device-details, get-device-by-id, get-device-statistics, list-pending-devices
Cloud Connector — clients (2)
list-site-clients, get-client-details
Cloud Connector — networks (3)
list-networks, get-network-details, get-network-references
Cloud Connector — WiFi (2)
list-wifi-broadcasts, get-wifi-broadcast-details
Cloud Connector — firewall / ACL / DNS (10)
list-firewall-zones, get-firewall-zone, list-firewall-policies, get-firewall-policy, get-firewall-policy-ordering, list-acl-rules, get-acl-rule, get-acl-rule-ordering, list-dns-policies, get-dns-policy
Cloud Connector — traffic / WAN / VPN (5)
list-traffic-matching-lists, get-traffic-matching-list, list-wans, list-vpn-tunnels, list-vpn-servers
Cloud Connector — hotspot / reference (7)
list-vouchers, get-voucher-details, list-radius-profiles, list-device-tags, list-dpi-categories, list-dpi-applications, list-countries
Sites local (2)
list-local-sites, get-app-info
Local controller (2, opt-in via UNIFI_LOCAL_*)
get-port-errors— per-portrx_errors/tx_errors/rx_dropped/tx_dropped+ link state, plus persistent flap counters (linkDownCount,stpChangeCount,anomalies) and SFP DDM when a transceiver is present (rxPowerDbm,txPowerDbm,temperatureC,voltageV,txBiasMa,rxFault,txFault, vendor/part/serial).onlyProblemsfilter for triage.list-port-flap-summary— iterates all switches in the controller, ranks ports fleet-wide by scorelinkDownCount*2 + stpChangeCount + rx_errors + tx_errors. Surfaces the unstable cables / transceivers / NIC-power-save endpoints anywhere in the site at once. Counters are persistent across queries (reset only on switch reboot).
Meta
search-tools — query other tools by keyword; always enabled.
Architecture
Claude → MCP stdio → src/index.ts
├── tools/analysis.ts → Site Manager API (UNIFI_API_KEY)
├── tools/*.ts (raw) → Site Manager API (UNIFI_API_KEY)
├── tools/connector.ts → Cloud Connector (UNIFI_API_KEY_OWNER)
└── tools/local-ports.ts → Local Controller (UNIFI_LOCAL_URL + LAN)
helpers/resolver.ts → hostName ↔ ID mappingBuilt on @us-all/mcp-toolkit:
extractFields— token-efficient response projectionsaggregate(fetchers, caveats)— fan-out helper forsummarize-site/site-health-timelinecreateWrapToolHandler—X-API-KEYredaction +ConnectorError/UniFiErrorextractionRetry: 3 attempts, exponential backoff (1s → 2s → 4s) + jitter, 30s Cloud Connector timeout
Limitations
Read-only — UniFi API keys don't support write yet (Full Access role greyed out in GA).
Rate limit — 10,000 req/min on stable v1; 100 req/min on Early Access.
Cloud Connector partial proxy — Network integration API works; legacy paths return 404; event logs/syslog not exposed.
ISP Metrics — may return 404 depending on account/plan.
Tech stack
Node.js 22+ • TypeScript strict ESM • pnpm • @modelcontextprotocol/sdk • zod v4 • dotenv.
License
Available Tools
19 toolsanalyze-site-healthARead-only
Analyze health of a specific site by name (e.g., 'USM'). Returns device status, WAN info, reboot detection
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Site host name (e.g., 'USM', 'USV', 'USA', 'USS', 'USC') | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, which cover safety and partial result disclosure. The description adds specific return fields but does not elaborate on behavioral traits like error handling, rate limits, or data freshness. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, directly states purpose and returns. No filler, perfectly front-loaded with action verb. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple health check tool with two parameters and existing annotations, the description provides sufficient context: what it returns and an example. It does not describe output format or pagination, but openWorldHint acknowledges potential partial results. Adequate for the simplicity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers 100% of parameters with descriptions. The tool description does not add any parameter semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Analyze', the resource 'health of a specific site', and lists specific return fields (device status, WAN info, reboot detection). It gives an example ('USM') and distinguishes from siblings like 'compare-sites' or 'summarize-site' by focusing on immediate health status rather than comparison or summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when or when not to use this tool. The description implies usage for checking health of a single site but does not contrast with alternatives like 'compare-sites' or 'site-health-timeline'. Lacks conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-sitesARead-only
Side-by-side comparison of all (or selected) sites: device count, online %, WAN avg/min uptime, gateway. Use to spot fleet outliers.
| Name | Required | Description | Default |
|---|---|---|---|
| names | No | Specific site host names to compare (omit for all) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior; the description adds no additional behavioral context such as result structure, error handling, or how openWorldHint affects responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose, scope, and use case with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two optional parameters, no output schema, and annotations covering safety, the description adequately explains inputs and outputs (listing fields) but could mention response format or pagination for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds value by listing compared fields but does not explain the extractFields parameter or how they influence results, keeping it at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool compares sites side-by-side on specific metrics (device count, online %, WAN uptime, gateway) and is used to spot outliers, distinguishing it from siblings like list-sites or analyze-site-health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a use case ('spot fleet outliers') but does not explicitly compare to alternatives or state when not to use this tool, leaving some ambiguity among the 18 sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect-recent-rebootsARead-only
Detect devices that rebooted within a time window. Checks all sites by default
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Site host name to check (omit for all sites) | |
| hours | No | Look back period in hours (default: 24) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds value by specifying default behavior (all sites) and the time window concept, which goes beyond annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core purpose and a secondary behavior. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple with no output schema, the description lacks information about what the response contains (e.g., device identifiers, count). This omission may leave an AI agent uncertain about the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions, so baseline is 3. The description does not add extra parameter detail beyond what the schema already provides, such as the hours default or site omission context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'detect' and resource 'devices that rebooted', and specifies a time window. It distinguishes from siblings like list-devices by focusing on reboot events, though not explicitly contrasting, the intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating 'Checks all sites by default', but does not provide explicit when-to-use or when-not-to-use guidance, nor alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
firmware-inventoryARead-only
Group all devices by firmware version + model and surface outdated devices. Helps detect fleet inconsistency and pending upgrades.
| Name | Required | Description | Default |
|---|---|---|---|
| groupBy | No | Grouping mode (default: version-and-model) | version-and-model |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds behavioral detail about grouping and outdated detection, which is useful but not essential given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, 18 words. Front-loaded with the core action and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and safe, open-world annotations, the description sufficiently covers the tool's purpose and outcome. No output schema needed given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the single parameter. The tool description does not add new information about the parameter beyond what the schema already provides, so baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('group'), the resource ('devices by firmware version + model'), and the outcome ('surface outdated devices'). It is distinct from sibling tools like list-devices or get-host.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context ('detect fleet inconsistency and pending upgrades'), implying when to use it. It does not explicitly state when not to use or mention alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-hostARead-only
Get detailed information about a specific host by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Host ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds 'detailed information' but doesn't specify what fields or behaviors are involved. No contradiction; disclosure is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence conveys essential purpose without waste. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description is adequate. However, it could elaborate on what 'detailed information' includes to be fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'id' parameter described as 'Host ID'. Description adds no additional meaning beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed information about a specific host by ID', specifying the verb, resource, and method of identification. It distinguishes from sibling tools like list-hosts, which list multiple hosts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need details for a single known host ID, but lacks explicit guidance on when to use alternatives (e.g., list-hosts to find IDs) or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-isp-metricsBRead-only
Get ISP performance metrics. May be unavailable depending on account
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds a behavioral trait ('May be unavailable depending on account') that supplements the openWorldHint, but overall adds minimal additional context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence. It is front-loaded and efficient, though it could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and a similar sibling tool, the description lacks critical details: what specific metrics are returned, how it differs from 'query-isp-metrics', and how to interpret results. This is insufficient for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the schema coverage is inherently 100%. Per guidelines, zero parameters baseline is 4. The description does not need to add parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get ISP performance metrics'), which is a specific verb-resource pair. However, it does not distinguish this tool from the similar sibling 'query-isp-metrics', reducing clarity for an AI agent choosing between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'query-isp-metrics'. The only contextual note is about account-based availability, which is not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-sdwan-configCRead-only
Get a specific SD-WAN configuration by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SD-WAN config ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint; description adds no extra behavioral context such as return format or access restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded with key information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-param tool with annotations, description is adequate but lacks differentiation from similar siblings and does not hint at output expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and description adds no meaning beyond what the schema's 'id' parameter description already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'SD-WAN configuration by ID', but does not differentiate from sibling tools like get-sdwan-config-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no exclusions or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-sdwan-config-statusBRead-only
Get the status of a specific SD-WAN configuration
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SD-WAN config ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, covering safety and data scope. The description adds no additional behavioral context (e.g., authentication, rate limits, or specific response traits), failing to extend beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It front-loades the core purpose effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description should explain what the status response contains. Currently it only says 'status of a specific SD-WAN configuration', which is vague and incomplete for an agent expecting a return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, which already includes a description ('SD-WAN config ID'). The tool description adds no new meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'status of a specific SD-WAN configuration'. It distinguishes itself from siblings like 'get-sdwan-config' (which retrieves the full config) and 'list-sdwan-configs' (which lists configs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving config status but provides no explicit guidance on when to use it versus alternatives like 'get-sdwan-config' or 'list-sdwan-configs'. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-devicesBRead-only
List all devices across hosts (switches, APs, gateways, cameras)
| Name | Required | Description | Default |
|---|---|---|---|
| hostId | No | Filter by host ID | |
| type | No | Filter by device type (e.g., 'uap', 'usw', 'ugw') | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. Description adds no behavioral context beyond what annotations provide, such as rate limits, latency, or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and resource, no redundant words. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool is simple with 3 optional parameters and no output schema. Description explains the core function adequately. Could mention filtering capabilities, but schema covers parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add any additional meaning beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List all devices across hosts' with examples of device types (switches, APs, gateways, cameras). Distinguishes from sibling tools like list-hosts and get-host by specifying devices as the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus alternatives, no conditions for filtering, and no mention of required context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-hostsARead-only
List all UniFi console hosts (UDM, UDM Pro, Cloud Key, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds that it lists all hosts, which is consistent. No hidden side effects disclosed, but also no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core action and resource, and every word is meaningful with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description provides sufficient information. The openWorldHint signals possible large result sets, but no pagination details are needed given the optional extractFields param can reduce tokens.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'extractFields' has 100% schema coverage with a detailed description. The tool description does not add additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'UniFi console hosts', with examples (UDM, UDM Pro, Cloud Key) that distinguish it from siblings like 'get-host' (singular) and other device/site tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies a broad listing, but does not contrast with 'get-host' for specific host details or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-sdwan-configsARead-only
List all SD-WAN configurations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the description adds no additional behavioral context. It does not disclose potential pagination, rate limits, or scope beyond 'all', which would enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with no wasted words. However, it is extremely brief and could include a bit more context without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and many sibling tools, the description is incomplete. It does not explain what constitutes a configuration, the format of the list, or how it relates to other config tools. More context is needed for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to add parameter semantics. Schema coverage is 100% trivially. According to guidelines, 0 parameters gives a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all SD-WAN configurations, using a specific verb and resource. It effectively distinguishes from siblings like get-sdwan-config (singular) and get-sdwan-config-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get-sdwan-config or other list tools). The description only states what it does without context on appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-sitesARead-only
List all sites with statistics (device counts, WAN status, ISP info)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read operation (readOnlyHint) and variable results (openWorldHint). The description adds that it returns statistics, but does not disclose any additional behavioral traits such as response pagination or error handling. It provides marginal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words. Front-loaded with the core action and resource, followed by relevant details. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool with good annotations, the description is sufficiently complete. It states what is listed and the kind of information included. However, given the number of sibling tools, slightly more context on the scope (e.g., 'all' vs 'filtered') would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description does not need to explain them. Baseline for zero parameters is 4, and the description adds context about the output by listing included statistics, which is beneficial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'List' and resource 'sites' with specific statistics included. However, it does not differentiate from sibling 'list-sites-overview', which likely serves a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list-sites-overview' or 'analyze-site-health'. The description implies it is for getting a broad overview, but fails to explicitly state use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-sites-overviewARead-only
Get a health overview of all UniFi sites with status, issues, and device counts
| Name | Required | Description | Default |
|---|---|---|---|
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering safety and variability. The description adds that the tool returns status, issues, and device counts, but does not explain other behaviors like pagination, rate limits, or result consistency. The description adds some value but not substantial beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the purpose and does not waste words. It is concise and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema. The description covers the basic purpose but could provide more detail on what exactly constitutes a 'health overview' (e.g., metrics included, any limits). Given the low complexity, it is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, extractFields, is fully described in the input schema (100% coverage). The description does not mention or elaborate on this parameter, so it adds no meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('health overview of all UniFi sites'), and the content ('status, issues, and device counts'). It distinguishes from siblings like 'list-sites' (which likely just lists sites without health data) and 'analyze-site-health' (which probably focuses on a single site).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives. While the name and description imply it's for a top-level health overview across all sites, no usage context or exclusion criteria are provided. The guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query-isp-metricsBRead-only
Query ISP metrics with filters. May be unavailable depending on account
| Name | Required | Description | Default |
|---|---|---|---|
| hostIds | No | Filter by host IDs | |
| siteIds | No | Filter by site IDs | |
| duration | No | Time duration (e.g., '1h', '24h', '7d') | |
| metricType | No | Type of ISP metric to query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds a useful behavioral caveat that the tool may be unavailable depending on account, complementing the open-world hint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is very short (two sentences) but front-loads the purpose. Could add more context without being verbose, but current structure is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While annotations cover safety and variability, the description lacks information on output format or result structure. Given no output schema and enum values without explanations, more detail would help.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented in the schema. Description only vaguely mentions 'filters', adding no new semantic information beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (query) and resource (ISP metrics) with filters. However, it does not differentiate from sibling tool 'get-isp-metrics', which may have similar function. Slight ambiguity but not a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The mention of potential unavailability is a behavioral note, not usage context. No exclusions or conditions for using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-toolsARead-only
Discover available tools by natural language query. Returns matching tool names + descriptions across all categories. Use this first to navigate the 54-tool surface efficiently.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language query. Discover tools across the UniFi MCP surface (analysis, raw API, connector tools). | |
| category | No | Restrict search to a specific category | |
| limit | No | Max results (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description carries minimal burden. It adds that the tool returns tool names and descriptions across all categories, but does not disclose additional behavioral traits such as pagination, rate limits, or potential side effects. Given annotation coverage, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences that efficiently convey purpose, output, and usage guidance. Every word adds value with no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role as a discovery tool with 3 parameters fully described, no output schema but a clear statement of return content, and annotations covering safety and scope, the description is largely complete. It could mention pagination or result ordering, but the limit parameter partially addresses that. Overall, it provides adequate context for the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are described in the input schema. The description adds the context of 'natural language query' and 'across all categories,' but does not provide meaning beyond what the schema already offers. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Discover available tools') and resource ('tools across all categories'), and differentiates from siblings by being the search entry point. It specifies the output ('matching tool names + descriptions') and the context ('54-tool surface').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this first to navigate the 54-tool surface efficiently,' providing clear guidance on when to use it. While it does not list alternatives or exclusion cases, the instruction implies it is the recommended starting point before using specific tools like the 18 listed siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site-health-timelineARead-only
Per-site health snapshot over a lookback window: devices with stability scores, reboots, WAN uptime, optional client count. Replaces 5+ sequential calls (devices + wan + reboots + clients). Caveats[] surfaces partial-data and API limitations.
| Name | Required | Description | Default |
|---|---|---|---|
| hostName | Yes | Site host name (e.g. 'USM') | |
| lookbackDays | No | Window for reboot detection in days (1-90, default 7) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds context: it is a snapshot over a lookback window, includes multiple data points, and surfaces caveats about partial data and API limitations, which is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences plus a parenthetical), front-loaded with the main purpose, and every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a high-level idea of returned fields (devices, stability scores, etc.) and notes caveats. It is fairly complete for agent understanding, though more detail on output structure would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 is appropriate. The description does not add significant meaning beyond the schema; it mentions 'lookback window' but the schema already describes 'lookbackDays'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a 'per-site health snapshot' with specific metrics (stability scores, reboots, WAN uptime, optional client count), distinguishing it from siblings that focus on individual metrics like 'detect-recent-reboots' or 'wan-uptime-trend'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it 'replaces 5+ sequential calls', guiding the agent to use it when a combined snapshot is needed. However, it does not explicitly state when to use alternatives (e.g., for a single metric) or exclude edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize-siteARead-only
Deep aggregated site view: devices + WAN status + (opt) clients + networks + WiFi broadcasts in one call. Replaces 4-5 round-trips. Connector-dependent fields auto-skip when owner key absent. Renders an Apps SDK card on ChatGPT clients (Claude clients receive the same JSON text).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Site host name (e.g. 'USM') | |
| includeClients | No | Include connected clients (requires owner key) | |
| clientLimit | No | Max clients to fetch | |
| includeNetworks | No | Include network configs (requires owner key) | |
| includeWifi | No | Include WiFi broadcasts (requires owner key) | |
| extractFields | No | Comma-separated dotted paths to project from response (e.g. 'id,name,owner.name,columns.*.name'). Use `*` as wildcard for arrays/objects. Wrap field names with dots in backticks. Reduces response tokens dramatically on large entities. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and openWorldHint; description adds auto-skip behavior for missing owner keys and rendering differences between clients, going beyond annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-loading the core function, followed by relevant behavioral notes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers aggregation scope, optional fields, auto-skip, and rendering. With no output schema, the description sufficiently prepares the agent for the tool's behavior, though could be more explicit about response structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well-documented. Description adds minimal extra meaning beyond the schema, such as auto-skip context, but no new semantic details for individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('summarize') and resource ('site') and clearly states it aggregates multiple aspects in one call, distinguishing from siblings that require multiple round-trips.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use for broad overview over multiple specific endpoints, but lacks explicit when-not-to-use or alternative recommendations. Mentions connector-dependent prerequisites, adding some guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top-clients-by-bandwidthARead-only
Top N clients by bandwidth on a site (combined / tx-only / rx-only). Requires Cloud Connector (UNIFI_API_KEY_OWNER).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Site host name (e.g., 'USM') | |
| topN | No | Number of top clients to return (default: 10) | |
| metric | No | Bandwidth metric: combined (tx+rx), tx-only, rx-only | combined |
| limit | No | Max clients to fetch from API (default: 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds the important behavioral constraint of requiring a Cloud Connector key, which is beyond what annotations provide. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, information-dense sentences. The first sentence conveys the core function, and the second provides an important prerequisite. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple data retrieval tool with no output schema, the description adequately covers the main purpose, metric options, and access requirement. It could explicitly mention sorting or the purpose of the 'limit' parameter, but the schema already describes that. Overall, it is sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by interpreting the 'metric' parameter options ('combined / tx-only / rx-only') and stating the Cloud Connector requirement, which is not in the schema. It reinforces the meaning of 'top N' and the site host name parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves top N clients by bandwidth for a site, with options for combined/tx-only/rx-only metrics. The verb is implied (list/get). It distinguishes itself from sibling tools which focus on other aspects like site health, firmware, or ISP metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies a prerequisite ('Requires Cloud Connector (UNIFI_API_KEY_OWNER)'), giving a clear condition for use. However, it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. No sibling tool comparisons are made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan-uptime-trendARead-only
Aggregate WAN uptime across all sites with severity flagging (default threshold 95%). Returns per-WAN sorted by lowest uptime first.
| Name | Required | Description | Default |
|---|---|---|---|
| threshold | No | Uptime % threshold below which WAN is flagged (default: 95) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description adds value by specifying sorting order (lowest uptime first), severity flagging, and default threshold. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main purpose, and every sentence adds unique information (aggregation, flagging, sorting). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description covers the key aspects: what it does, the flagging behavior, and sorting. It lacks detail on output structure, but given the simplicity, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for 'threshold' already explains its purpose and default (95%). The description merely restates this information without adding further semantics. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'aggregate' and resource 'WAN uptime across all sites', details severity flagging with a default threshold, and states the sorting order. This clearly distinguishes the tool from sibling tools like 'get-isp-metrics' or 'list-sites'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for getting a global WAN uptime overview with flagging, but it does not explicitly state when to use it versus alternatives (e.g., per-site tools) or when not to use it. Usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v1.13.0- Changed
search-tools1 field changed- changed
Input schema / properties / category / enumPrevious value: -[ - "analysis", - "raw", - "devices", - "clients", - "networks", - "firewall", - "wan", - "reference", - "meta" -]New value: +[ + "analysis", + "raw", + "devices", + "clients", + "networks", + "firewall", + "wan", + "reference", + "local", + "meta" +]
19 tool updates
v1.12.4- Added
analyze-site-health - Added
compare-sites - Added
detect-recent-reboots - Added
firmware-inventory - Added
get-host - Added
get-isp-metrics - Added
get-sdwan-config - Added
get-sdwan-config-status - Added
list-devices - Added
list-hosts - Added
list-sdwan-configs - Added
list-sites - Added
list-sites-overview - Added
query-isp-metrics - Added
search-tools - Added
site-health-timeline - Added
summarize-site - Added
top-clients-by-bandwidth - Added
wan-uptime-trend
19 tool updates
v1.12.3- Removed
analyze-site-health - Removed
compare-sites - Removed
detect-recent-reboots - Removed
firmware-inventory - Removed
get-host - Removed
get-isp-metrics - Removed
get-sdwan-config - Removed
get-sdwan-config-status - Removed
list-devices - Removed
list-hosts - Removed
list-sdwan-configs - Removed
list-sites - Removed
list-sites-overview - Removed
query-isp-metrics - Removed
search-tools - Removed
site-health-timeline - Removed
summarize-site - Removed
top-clients-by-bandwidth - Removed
wan-uptime-trend
19 tool updates
v1.11.1- First observed
analyze-site-health - First observed
compare-sites - First observed
detect-recent-reboots - First observed
firmware-inventory - First observed
get-host - First observed
get-isp-metrics - First observed
get-sdwan-config - First observed
get-sdwan-config-status - First observed
list-devices - First observed
list-hosts - First observed
list-sdwan-configs - First observed
list-sites - First observed
list-sites-overview - First observed
query-isp-metrics - First observed
search-tools - First observed
site-health-timeline - First observed
summarize-site - First observed
top-clients-by-bandwidth - First observed
wan-uptime-trend
TDQS
Most tools have distinct purposes (e.g., analyze-site-health vs summarize-site), but get-isp-metrics and query-isp-metrics overlap somewhat, as both retrieve ISP metrics with only slight differences in parameters.
Tool names follow a consistent verb_noun pattern (e.g., list-sites, get-host, detect-recent-reboots), with occasional noun_noun combinations like firmware-inventory that are still descriptive. No mixing of case styles.
19 tools is slightly above the typical 3-15 range, but the server covers a broad UniFi management domain (devices, sites, health, ISP, SD-WAN), making the count reasonable without feeling bloated.
The tool set covers monitoring and querying comprehensively (list, get, analyze, compare), but lacks CRUD operations for management. For a read-only monitoring scope, it is nearly complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Unified MCP Server is a remote MCP connector for AI agents and vertical AI products that provides access to 22,000+ authorized SaaS tools across 400+ integrations and 24 categories directly inside LLMs (Claude, GPT, Gemini, Cohere). Tools operate only on explicitly authorized customer connections, enabling agents to safely read and write against live third-party systems.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
184 MCP tools for field-service CRM, scheduling and double-entry accounting. Hosted; BYO agent.
Remote MCP for RunComfy: ComfyUI deployments, hosted models, LoRA training. 31 tools.
Related MCP Servers
- AlicenseDqualityDmaintenanceEnables comprehensive management of UniFi network infrastructure through the UniFi Cloud API, including device control, client management, camera settings, and access door control through natural language.3947Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI assistants to manage and monitor UniFi Network Controllers through natural language. Provides 25 read-only tools for discovering devices and clients, viewing security configurations, analyzing network statistics, and exporting configuration data.41MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive management of UniFi Network infrastructure through 24 tools for monitoring and controlling devices, clients, wireless networks, security, and guest access. Supports network administration tasks like device restarts, client blocking, WLAN configuration, and backup creation.10MIT
- AlicenseAqualityCmaintenanceMCP server that turns Claude into a UniFi network specialist. Manage devices, optimize WiFi, audit security, and troubleshoot your network through natural language.31102MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/us-all/unifi-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server