UniFi Fabric MCP Server
Provides tools for managing UniFi network infrastructure through the official UniFi Site Manager / Fabric cloud API, including fleet health monitoring, network device management, firewall policy configuration, Protect camera operations, VPN setup, and more.

UniFi Fabric MCP Server
Cloud-first UniFi management for AI agents. This server connects to the official UniFi Site Manager / Fabric cloud API (
api.ui.com) — no direct controller access, SSH, or local network access required. Manage your entire UniFi fleet from anywhere through natural language.
An MCP (Model Context Protocol) server that exposes the UniFi Site Manager API as tools for AI assistants. Built with FastMCP, it lets Claude Code, Cline, and other MCP clients manage UniFi network infrastructure through natural language.
Disclaimer: This project is not affiliated with, endorsed by, or sponsored by Ubiquiti Inc. UniFi is a trademark of Ubiquiti Inc.
Highlights:
283 tools across Fleet, Network, Firewall, Protect, VPN, InnerSpace, History, and more
Faithful pass-through — tools return complete upstream payloads including credential fields (WLAN passphrases, RADIUS secrets, API tokens), GPS coordinates, and Protect recognition data. The
include_secretsandinclude_gpsparameters have been removed; all fields are always returned. Callers upgrading from 0.4.x or earlier should drop those parameters.Configurable authentication:
none(loopback/dev) /bearer(LAN/VPN) /oauth(resource-server, JWT-verified via JWKS)Configurable TLS: plain HTTP / in-server HTTPS (
https) / mutual TLS (mtls)Stdio transport for local use;
streamable-http/ssefor containerized deploymentsStateless, cloud-first design — connects to
api.ui.comvia the UniFi Site Manager API; no direct controller access required
Architecture
flowchart LR
A[AI Assistant<br/>MCP Client] -->|MCP protocol<br/>stdio / HTTP| B[UniFi Fabric<br/>MCP Server]
B -->|HTTPS<br/>API key auth| C[api.ui.com<br/>UniFi Site Manager]
C -->|Cloud Connector<br/>Proxy| D[UDM / UDR / UCG<br/>Consoles]
D --- E[Devices & Clients]
D --- F[Protect NVRs]Related MCP server: UniFi MCP Server
What is MCP?
Model Context Protocol (MCP) is an open standard that enables large language models (LLMs) and AI assistants to securely interact with external systems and tools. Instead of asking the AI to make manual API calls or describe steps, MCP allows the AI to:
Execute commands and operations directly in external systems
Query data and retrieve real-time information
Automate complex workflows through natural conversation
This UniFi Fabric MCP server bridges UniFi's network management API with AI assistants, enabling you to control your network infrastructure through conversation.
Use Cases
Network Operations: Monitor fleet health, manage sites, and troubleshoot devices using natural language
Security Management: Create and update firewall policies, manage ACLs, and configure DNS policies without manual API calls
MSP Operations: Manage multiple UniFi consoles and organizations with a single AI interface
Device Management: Monitor and control cameras, sensors, and other Protect devices across your infrastructure
Automation: Build AI-powered workflows for routine network tasks and compliance audits
Quick Start
Get Your API Key
Sign in to UniFi Site Manager with your Ubiquiti account
Select your organization from the dropdown (top-left)
In the left sidebar, click API Keys
Click Create New API Key and give it a descriptive name
Select the API Scope — enable Site Manager and Network at minimum (add Protect if managing cameras)
Under Sites, choose which sites the key can access (or select all)
Copy the key immediately — it won't be shown again
Note: These are UniFi Site Manager API keys that authenticate against the cloud API (
api.ui.com). Your consoles must be adopted to your UI.com account and connected to Ubiquiti's cloud for the key to discover them. See the API Docs for more details.
Track A — Local (stdio)
Install and run the server locally. The MCP client launches it as a subprocess over stdio.
Requires Python 3.12+
git clone https://github.com/swkstudios/unifi-fabric-mcp-server.git
cd unifi-fabric-mcp-server
python3 -m venv .venv && source .venv/bin/activate
pip install -e . # -e is editable/dev mode; omit for a standard install
export UNIFI_API_KEY="your-api-key-here"
unifi-fabric-mcpAdd to ~/.claude/settings.json or project .mcp.json:
{
"mcpServers": {
"unifi-fabric": {
"command": "unifi-fabric-mcp",
"env": { "UNIFI_API_KEY": "your-api-key-here" }
}
}
}PATH note: The
"command": "unifi-fabric-mcp"entry point only resolves if it is on the MCP client'sPATH. Many MCP clients do not inherit the shell's virtual environment. Use the absolute path to the venv binary instead (e.g./path/to/.venv/bin/unifi-fabric-mcp), or install globally withpipx install .oruv tool install ..
Verify it works: When launched by the client the server exits immediately if UNIFI_API_KEY is absent or empty; an incorrect key will not prevent startup but will cause tool calls to fail with an authentication error. A successful start produces no output on stdio (the client communicates over stdin/stdout).
Track B — Docker (HTTP, Recommended)
Run the server as a container. The MCP client connects over HTTP to the /mcp endpoint.
docker run -e UNIFI_API_KEY="your-api-key-here" -p 3000:3000 ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1Tip:
:0.6.1pins to the last stable release.:devis the moving alias for the current development build — it is updated by CI on every successful dev-branch push and is the fastest way to pull pre-release work.:latestand the short form:X.Ymove only when a clean release tag (vX.Y.Z, no pre-release suffix) is published; they are never moved by a dev-branch push or a pre-release tag. For production deployments, pin by digest instead — see Docker Deployment.
Add to ~/.claude/settings.json or project .mcp.json:
{
"mcpServers": {
"unifi-fabric": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}Verify it works:
curl -s -w "\nHTTP:%{http_code}\n" \
-X POST -H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}' \
http://localhost:3000/mcpHTTP:200 on the last line confirms the server is up. The data: line above it will contain a JSON object with "protocolVersion":"2024-11-05". (A bare GET to /mcp returns 400 Bad Request on FastMCP 3.x — the streamable-http protocol requires a POST to open a session. Always use this POST form for smoke tests.) Then ask your AI assistant to run list_hosts to get live data from your UniFi console.
See config/mcp-server.example.json for examples covering plain-HTTP, SSE, HTTPS, and bearer-auth client configurations, including environment-variable substitution forms (e.g. ${MCP_BEARER_TOKEN}) for use in templated deployments.
Network deployments: The MCP server listens on plain HTTP. For non-localhost deployments, run behind a TLS-terminating reverse proxy (e.g., Traefik, Caddy, nginx).
Example Prompts
Copy-paste these into Claude Code or any MCP client after connecting:
Show me a summary of all devices and clients across my sites.Are there any offline devices? List them with their site names.Create a firewall policy that blocks traffic from the guest VLAN to the server VLAN.List all firewall policies and show their current ordering.Get the RTSPS stream URLs for cameras in the main office.How many clients are connected to each site right now?Sample Tool Output
When you ask the MCP server a question, it executes tools and returns structured data. Here's an example of a fleet summary:
{
"total_consoles": 3,
"total_sites": 7,
"total_devices": 42,
"total_clients": 157,
"device_status": {
"online": 38,
"offline": 3,
"adopting": 1
},
"sites": [
{
"site_name": "Main Office",
"device_count": 12,
"client_count": 65,
"health": "good"
},
{
"site_name": "Branch 1",
"device_count": 15,
"client_count": 52,
"health": "good"
},
{
"site_name": "Branch 2",
"device_count": 10,
"client_count": 40,
"health": "degraded"
}
]
}Compatibility
This server integrates with the following UniFi components:
Component | Minimum Version | Tested Version | Tested OS |
Site Manager API | — | v1.0 | N/A |
Network | v10.0.0 | v10.6.94 | — |
Protect | v7.0.0 | v7.2.105 | — |
UDM Pro Hardware | — | — | OS 5.1.127 / Network 10.6.94 / Protect 7.2.105 |
For the latest component versions and hardware compatibility, see developer.ui.com.
Tested against
The tool set was verified against a live deployment during a read-only sweep (124 of 283 tools invoked). The environment is a single-console, single-site home or small-office setup — not a multi-site or multi-organization estate. Operators managing many sites across multiple organizations should treat untested paths as unverified rather than broken.
Component | Verified version (as of the most recent sweep) |
Console hardware | UniFi Dream Machine Pro |
UniFi OS | 5.1.127 |
Network application | 10.6.94 |
Protect application | 7.2.105 |
InnerSpace application | 1.3.23 |
Access application | not installed |
Network infrastructure present during the sweep: integrated gateway, 4 access points, 2 switches.
Protect devices present during the sweep: 6 cameras (UVC G4 Instant, UVC G5 Bullet, UVC G5 Dome, UVC G6 Instant); 4 door/window sensors (USL-Entry-US).
Face recognition: active and populated without dedicated AI hardware. The UDM Pro runs recognition inference in software; a separate AI Port or AI Processor is not required for recognition to populate.
Coverage and limitations
Tool coverage: 124 of 283 tools were invoked live. The remaining 159 — covering create, update, delete, device restart, firmware upgrade, alarm-webhook, and the InnerSpace Integration-API read operations — were not called. These operations are irreversible or trigger physical effects (device reboots, alarm hardware, permanent microphone disable). Their code paths are exercised by unit tests in CI. If you want to verify a specific write tool before deploying, read the tool's docstring and test against a non-production console first.
Read-only tools with no data: Several read-only tools were called and returned empty results because the corresponding hardware or feature was not present in the test environment. This reflects a gap in the test environment, not a code defect. Readers with the following equipment should expect these tools to work:
Switching: LAGs, switch stacks, and MC-LAG domains
Network services: DNS policies, traffic routes, traffic rules, and traffic matching lists
Identity and access: dynamic DNS, RADIUS profiles
Hotspot: vouchers and billing packages
VPN: site-to-site tunnels
Protect extras: UniFi lights, chimes, viewers, and configured liveviews
Protect alarm/arm & accessories (Integration API v7.1.87): arm profiles (with active-profile selection and arm/disarm enable/disable), sirens, fobs, relays, speakers, bridges, link stations, alarm hubs, and Protect users — all reached through UniFi Fabric only (
…/proxy/protect/integration/v1/*). Availability is firmware/application-version dependent (an unsupported family answers with an upstream 404/501, passed through). Write and physical-action tools honor theUNIFI_PROTECT_MUTATIONS_ENABLEDenv gate (default on); siren play/stop/test, speaker test, relay and alarm-hub output actions, arm enable/disable, anddelete_arm_profileadditionally requireconfirm=true, POS ingestion carries a separate confirmation boundary plus anexternalIdidempotency key and is never auto-retried, and settings writes read-before, skip on no-op, and read-after to verify. Also added: Protect application metadata (get_protect_application_info→/v1/meta/info) and the ULP (UniFi account) user directory (list_ulp_users/get_ulp_user→/v1/ulp-users), distinct from Protect users. The documented Protect WebSocket subscriptions (/v1/subscribe/devices,/v1/subscribe/events) are intentionally NOT wrapped — a unary MCP tool cannot model a streaming subscription; that needs an approved streaming design first.InnerSpace: the application is installed and running on this console with an active floor-plan project. All eight InnerSpace read tools were live-verified 2026-08-09 against the documented Integration API (
…/proxy/innerspace/integration/v1/*) and returned real project geometry — placed devices, shaped floor plans, and plan assets all round-trip correctly. (An earlier probe during the same session returned HTTP 403 for theinnerspaceconnector namespace; the root cause was that UniFi deprecated the legacy/proxy/innerspace/api/*relay when it formalized the documented/proxy/innerspace/integration/v1/*path — switching to the documented path resolved the 403.)Access: the application is not installed on this console; Access tools return an error for this reason
Deployment matrix: stdio, streamable-http, and SSE transports were verified end-to-end. Bearer-token auth on both plain HTTP and HTTPS was verified. mTLS was verified as the live production transport for the canonical deployment.
OAuth: End-to-end OAuth flow requires a running external identity provider and could not be exercised in this environment. The fail-closed startup behavior — the server refuses to start when required OAuth parameters are missing — is covered by unit tests in CI. See docs/AUTH-OAUTH.md for deployment guidance.
Multi-key MSP: The single-key path (UNIFI_API_KEY) was fully exercised live. Per-host tools (any tool that accepts a host parameter) resolve the API key that owns the target console and route the request on that key, so a console owned by any configured key — not only the first — is reachable; this ownership routing is covered by unit tests. Aggregate tools (list_hosts, list_sites, list_all_sites_aggregated) iterate all keys. See Multi-key MSP setup.
Available Tools
The server exposes 283 tools organized by domain for managing UniFi infrastructure:
Domain | Tool Count | Purpose |
Fleet & Aggregation | 10 | Cross-console device/client search, fleet summary, host listing, configured API keys, site comparison |
Site Management | 8 | Site operations, health, inventory, system info, local-site listing |
Network & VLAN | 30 | Application info, sites, switching, VLANs, WiFi, WAN, port profiles, port-profile VLAN tagging |
Device Management | 21 | Device control, adoption, stats, actions, location, tagging, STP/port-state reads |
Clients | 8 | Client listing, stats, blocking, reconnection |
Firewall | 24 | Policies, zones, ACL rules, rule ordering |
DNS & Traffic | 24 | DNS policies, traffic rules, matching lists, routes, dynamic DNS, DPI app/category catalogue |
Port Forwarding | 4 | List, create, update, delete port forwards |
WLAN | 6 | WLAN configs, groups, security settings |
Protect | 79 | Cameras, sensors, lights, chimes, liveviews, PTZ, snapshots, historical events, face/vehicle recognition, arm profiles, sirens, fobs, relays, speakers, bridges, link stations, alarm hubs, Protect users, ULP users, application metadata, POS overlay ingestion |
VPN | 12 | VPN servers, site-to-site tunnels, RADIUS profiles |
Hotspot | 11 | Voucher CRUD, operator management, billing packages |
Settings & Monitoring | 5 | Controller settings read/write, ISP metrics and WAN health queries |
Utilities | 6 | Country lookup, DHCP/client-alias reads and writes, RADIUS account reads |
InnerSpace | 8 | Project geometry/summary, placed devices, floor plans, placed APs/switches, unplaced inventory, plan asset download |
Mobility | 8 | Workspace/admin/device/client reads and guarded device name / LAN-DHCP / wireless writes for UMR mobile routers |
Carrier / ISP Fabric | 11 | Org-scoped subscriber management (4 reads, 7 guarded writes); not testable against the maintainer's live hardware; hermetic/spec-conformance tested only |
Connector Relay | 5 | Guarded escape hatch to relay GET/POST/PUT/PATCH/DELETE to console routes without a typed wrapper |
History | 3 | Session history, bucketed traffic reports, full client roster (offline incl.) |
The domain groupings above are illustrative and each tool is counted once. For the full tool reference — including all 283 tool names, parameter tables, and descriptions — see docs/TOOLS.md. MCP clients can also query the server directly via the tools/list method.
InnerSpace
InnerSpace is UniFi's spatial/floor-plan application. This server covers all six endpoints of the official, GET-only UniFi InnerSpace Integration API (v1.3.23), reached through the Site Manager cloud connector (…/proxy/innerspace/integration/v1/*):
Tool | Endpoint | Returns |
|
| full project geometry (shapes, plans, products) |
|
| structural inventory: shape/plan/product counts, per-plan scale |
|
| placed device shapes with position/rotation |
|
| floor plans with |
|
| placed APs (position, mounting height, azimuth) |
|
| placed switches (position, status) |
|
| devices known to the project but not yet placed |
|
| floor-plan image, base64 inline under a 10 MiB cap (metadata + path otherwise) |
Known limitation: get_innerspace_asset enforces its 10 MiB inline cap after the HTTP client has buffered the full response body into memory, so the cap bounds the base64 payload returned to the caller but not peak download RAM. A future streaming download with a running byte-count would abort an oversized asset mid-transfer; it is not implemented yet.
The official Integration API is read-only — it exposes no create/update/save endpoint. A probe of the legacy connector path returned HTTP 200 but did not persist changes (a non-persisting facade); no per-shape write route was found in either surface.
This server therefore exposes no InnerSpace write tool — the InnerSpace surface here is read-only, matching the public API. Write support is gated on UniFi releasing an InnerSpace write API upstream; it will be added complete when that ships.
Generic Fabric Connector Relay (guarded)
Ubiquiti's official Network Cloud Connector (and the Site Manager v1.0.0 OpenAPI) document a generic method relay family — GET | POST | PUT | PATCH | DELETE /v1/connector/consoles/{id}/*path — that forwards a request through Fabric to a console's /proxy/<path> surface. Every typed tool in this server already rides that connector; the fabric_connector_* family exposes the relay directly, as a guarded escape hatch for a controller-supported route that has no typed wrapper yet (a per-device Classic REST config route, a legacy InnerSpace save route, etc.). Verb references: Connector PUT, Connector PATCH (documented against Network app v10.3.58), and the Site Manager v1.0.0 OpenAPI.
Tool | Availability |
| Always available (read; no |
| Mutation — requires |
| Mutation — requires |
| Mutation — requires |
| Mutation — requires |
path is the relay-relative application path after /proxy/ — e.g. network/integration/v1/sites, network/api/s/{site}/rest/device/{id}, or innerspace/api/shapes/{id}. Use the {site} (slug) or {site_id} (UUID) placeholder for the site segment; the server resolves it through the Registry, so a raw host id, site value, or API key never appears on the tool surface.
Guards (all enforced, none optional):
Registry-only identity —
host(name/id) resolves to the owning API key + host id;{site}/{site_id}are substituted from the Registry.Positive namespace allowlist (broad, path hygiene not a capability cap): Network
integration/v1, Network Classicapi/s/{site}/rest|cmd|stat, Networkv2/api, Protectintegration/v1andapi, InnerSpaceintegration/v1andapi, Accessintegration/v1andapi. Anything else is rejected.Positive-charset path validation —
..,%-encoding, control characters,//empty segments, and a URL scheme (://) are rejected before any network call.Mutation gating (fail-closed) — GET is always available; the four mutating verbs need
confirm=trueandUNIFI_ENABLE_CONNECTOR_WRITE. Either missing → refused before the console is touched.Read-before / write / read-after — for PUT/PATCH/DELETE the resource is read before and after the write, with diff-based no-op detection (
noOp: truewhen a same-value write changes nothing).Scope guard — an optional
scope(device/site/global) is cross-checked against the path so a site-global setting route (e.g.global_switch.stp_version) cannot be driven by a device-scoped request.Credential redaction + audit — credential-bearing fields in the relayed body are redacted before return/log; every mutation attempt is written to a structured audit line (console, site, method, path, confirm, outcome) that never contains the API key.
A 4xx/5xx from the relay is returned as status (not raised), so an invalid-ID probe surfaces its own reachability status. Undocumented legacy routes remain experimental until persistence and rollback are proven against a live console.
Live decision-closing probe procedures (documented; each is deferred to a maintenance window and is covered only by hermetic tests in this repo, never run live here):
InnerSpace save route.
PATCH innerspace/api/shapes/00000000-0000-0000-0000-000000000000with an empty/invalid body. Expect a 4xx (400/404/405/422= route/method reachability evidence). A 200/204 is an immediate stop condition — do not use a real shape ID and do not issue a collection create/delete. Only after the route + schema are confirmed: one low-stakes reversible shape update, read back, restore the exact original shape, verify persistence on a fresh read. A 401/403 on the legacy namespace is auth/namespace gating, not a write path.Per-device STP/PoE config. Read the target switch via
network/api/s/{site}/rest/device/{id}(scopedevice), probe with the exact current value first (a same-value write →noOp: true), then change only that switch's STP priority (or a harmless empty-port field), read back via both the legacy/rest/deviceroute and/stat/device, then restore the original value and verify. Globalglobal_switch.stp_versionis site-wide — the scope guard refuses it for adevice-scoped request; keep it to a separately named site-wide path.
Mobility
The UniFi Mobility API (https://api.ui.com/v1/mobility/...) manages UMR mobile
routers through a workspace-based identity model that is deliberately kept separate
from the console host/site resolution used elsewhere — a Mobility workspace is not a
UniFi console, so these tools take a workspace_id (and device_id) directly and never
touch the host/site registry. They ride the same Fabric / Site Manager API key (with
optional key_label selection); a missing Mobility scope or an unavailable subscription
surfaces as the upstream error verbatim.
Tool | Endpoint | Returns / Effect |
|
| workspaces visible to the key |
|
| workspace admins + mobility permissions |
|
| UMR device summaries (paginated) |
|
| full device detail |
|
| clients on a device (paginated) |
|
| rename device (guarded) |
|
| LAN/DHCP settings (guarded, partial) |
|
| WiFi SSID + password (guarded) |
The three PUT writes are guarded: read-before, no-op detection against observable
device state, an explicit confirm=true, an environment write-gate
(UNIFI_ENABLE_MOBILITY_WRITE, which is gated off by default pending live
verification of the PUT replace-vs-merge semantics — issue #186; confirm=true remains
independently required), and a read-after verification. The network endpoint is a documented partial
update (only the fields you pass are applied). A PUT is never silently treated as a
merge of unspecified fields.
Port profiles and VLAN auto-exclusion (D12)
Switch port profiles reference networks by their internal networkconf id.
list_port_profiles, get_port_profile, and update_port_profile resolve those
ids to {id, name, vlan} objects (joined against /rest/networkconf) for the
excluded_networkconf_ids, native_networkconf_id, and voice_networkconf_id
fields, so a bare 24-hex id never hides which network it is.
The D12 auto-exclusion behavior: when you create a new network, UniFi silently
adds it to the excluded_networkconf_ids of every custom-tagged port profile
(tagged_vlan_mgmt: custom). The new VLAN is then untagged on those uplinks and
blackholed at the host — a guest ARP to the gateway fails — even though nothing
looks wrong in the raw tool output. The UI "Tagged VLANs" list is derived (all
VLAN networks minus native minus excluded); there is no separate tagged-list
object to inspect.
How this server surfaces and fixes it:
create_networkappends awarningsentry (codeD12_AUTO_EXCLUSION) listing every custom-tagged profile that auto-excluded the new network.allow_network_on_port_profile(host, site, profile_id, network_id)atomically fresh-reads the profile, removes the network fromexcluded_networkconf_ids, PUTs, and returns the resulting derived tagged set with names — run it on each profile named in the warning.exclude_network_on_port_profile(...)is the inverse (untag a network from a profile).
Remediation in short: create the network, read the D12_AUTO_EXCLUSION warning,
call allow_network_on_port_profile for each named profile, then verify
guest-to-gateway reachability.
Configuration
UniFi API Settings
All UniFi-specific settings are loaded from environment variables with the UNIFI_ prefix.
Variable | Required | Default | Description |
| Yes (if | — | Single API key shorthand |
| No | — | JSON list of key configs for multi-console MSP setups |
| No |
| UniFi Site Manager API base URL |
| No |
| TTL for host/site registry cache (seconds) |
| No |
| Max entries in the hosts TTLCache (bounds memory use) |
| No |
| Max entries in the per-console sites TTLCache |
| No |
| Max concurrent outbound requests to api.ui.com |
| No |
| HTTP request timeout in seconds |
| No |
| Hard cap on pages drained per call. By default list tools drain all pages automatically; set this to limit drain depth. When the cap is hit the response includes |
| No |
| Logging verbosity. Accepts standard Python levels: |
| No |
| Enable the mutating generic connector relay ( |
| No |
| Enable the guarded Carrier / ISP Fabric write tools ( |
| No |
| Enable the guarded Mobility write tools ( |
| No |
| Deployment-level kill switch for all Protect mutation and physical-action tools. Default ON — set to |
Transport Configuration
The MCP server communicates with clients using the FastMCP transport protocol. By default, the Docker image uses streamable-http, but you can override this for different deployment scenarios.
FASTMCP_TRANSPORT: Sets the communication protocol between the MCP server and clients.
Transport | Use Case | Port | Notes |
| Docker containers, HTTP load balancers, reverse proxies |
| Default; recommended for containerized deployments |
| Server-sent events; browser clients, long-polling scenarios |
| Stateful, requires connection persistence |
| Process-to-process communication, local development | — | No network port; requires parent process stdin/stdout |
Override Transport via Docker
To use a different transport, override the environment variable at runtime:
# SSE transport
docker run -e UNIFI_API_KEY="your-api-key-here" -e FASTMCP_TRANSPORT=sse -p 3000:3000 ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1MCP clients connect to the /sse endpoint — note the path differs from the streamable-http default (/mcp):
{
"mcpServers": {
"unifi-fabric": {
"type": "sse",
"url": "http://localhost:3000/sse"
}
}
}Verify SSE is up:
curl --max-time 3 -s -o /dev/null -w "%{http_code}\n" http://localhost:3000/sseA 200 printed on stdout confirms the server is listening. (The SSE stream stays open; --max-time 3 disconnects after a few seconds — that is expected and normal.)
# Stdio transport
docker run --no-healthcheck --rm -i -e UNIFI_API_KEY="your-api-key-here" -e FASTMCP_TRANSPORT=stdio ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1With stdio transport the MCP client must spawn the container as a subprocess (analogous to Track A), not connect over HTTP. Pass --rm -i so the container receives stdin and is removed on exit. The corresponding client config uses command/args, not type/url:
{
"mcpServers": {
"unifi-fabric": {
"command": "docker",
"args": ["run", "--rm", "-i",
"-e", "UNIFI_API_KEY=your-api-key-here",
"-e", "FASTMCP_TRANSPORT=stdio",
"ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1"]
}
}
}HEALTHCHECK note: When
FASTMCP_TRANSPORT=stdio, no port 3000 is bound. The Dockerfile's built-in TCP healthcheck will fail permanently. Pass--no-healthcheckto suppress the misleading(unhealthy)status:docker run --no-healthcheck --rm -i ....
Override Transport in Docker Compose
services:
unifi-fabric-mcp:
image: ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1
environment:
UNIFI_API_KEY: your-api-key-here
FASTMCP_TRANSPORT: sse # or stdio
ports:
- "3000:3000" # remove this entry when using stdioNote: The server exposes port 3000 for streamable-http and sse transports. If using stdio, no port is exposed; the server communicates exclusively via stdin/stdout. When switching to stdio, remove the ports: mapping and disable the built-in TCP healthcheck (which will fail permanently when nothing binds port 3000) by adding:
healthcheck:
disable: trueBearer Token Authentication (Optional)
Set MCP_BEARER_TOKEN to require all incoming MCP requests to include an Authorization: Bearer <token> header. Requests with a missing or incorrect token receive a 401 response.
When unset (the default), the server runs without transport-layer authentication — the same behavior as previous versions.
# Docker
docker run -e UNIFI_API_KEY="..." -e MCP_BEARER_TOKEN="my-secret-token" -p 3000:3000 ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1
# Docker Compose
services:
unifi-fabric-mcp:
image: ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1
environment:
UNIFI_API_KEY: your-api-key-here
MCP_BEARER_TOKEN: my-secret-token
ports:
- "3000:3000"Client configuration with bearer auth:
{
"mcpServers": {
"unifi-fabric": {
"type": "http",
"url": "http://localhost:3000/mcp",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}For FASTMCP_TRANSPORT=sse, use the sse client type pointing at the /sse endpoint with the same Authorization header:
{
"mcpServers": {
"unifi-fabric": {
"type": "sse",
"url": "http://localhost:3000/sse",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}This uses FastMCP's StaticTokenVerifier — a single shared-secret pattern designed for LAN/VPN deployments where network-level access control is already in place. It is not intended as a standalone security boundary for public-internet deployments; for public-internet use, see the OAuth mode below.
Bearer + HTTPS (Recommended for LAN/VPN)
Combine MCP_BEARER_TOKEN with MCP_TLS_MODE=https to add transport encryption on top of the shared-secret check — this is the recommended posture for private-network deployments:
# Docker — bearer auth with in-server HTTPS
docker run \
-e UNIFI_API_KEY="your-api-key-here" \
-e MCP_BEARER_TOKEN="my-secret-token" \
-e MCP_TLS_MODE=https \
-e MCP_TLS_CERTFILE=/certs/cert.pem \
-e MCP_TLS_KEYFILE=/certs/key.pem \
-v /path/to/certs:/certs:ro \
-p 3000:3000 \
ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1# Docker Compose — bearer auth with in-server HTTPS
services:
unifi-fabric-mcp:
image: ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1
environment:
UNIFI_API_KEY: your-api-key-here
MCP_BEARER_TOKEN: my-secret-token
MCP_TLS_MODE: https
MCP_TLS_CERTFILE: /certs/cert.pem
MCP_TLS_KEYFILE: /certs/key.pem
volumes:
- /path/to/certs:/certs:ro
ports:
- "3000:3000"Client configuration for bearer + HTTPS — the URL must use https://:
streamable-http transport:
{
"mcpServers": {
"unifi-fabric": {
"type": "http",
"url": "https://localhost:3000/mcp",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}sse transport (FASTMCP_TRANSPORT=sse):
{
"mcpServers": {
"unifi-fabric": {
"type": "sse",
"url": "https://localhost:3000/sse",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}See docs/TLS.md for certificate generation and the HEALTHCHECK requirement when enabling in-server TLS.
Bearer + mTLS (High-assurance internal)
Combine MCP_BEARER_TOKEN with MCP_TLS_MODE=mtls for mutual transport identity on top of the shared-secret check. The server requires every client to present a certificate issued by your CA:
# Docker — bearer auth with mutual TLS
docker run \
-e UNIFI_API_KEY="your-api-key-here" \
-e MCP_BEARER_TOKEN="my-secret-token" \
-e MCP_TLS_MODE=mtls \
-e MCP_TLS_CERTFILE=/certs/server-cert.pem \
-e MCP_TLS_KEYFILE=/certs/server-key.pem \
-e MCP_TLS_CA_CERTS=/certs/ca-cert.pem \
-v /path/to/certs:/certs:ro \
-p 3000:3000 \
ghcr.io/swkstudios/unifi-fabric-mcp-server:0.6.1Most MCP clients cannot present a client certificate directly. The recommended pattern is a TLS-terminating reverse proxy that presents the client certificate toward the server; downstream MCP clients connect to the proxy over standard HTTPS with the bearer token in the Authorization header:
{
"mcpServers": {
"unifi-fabric": {
"type": "http",
"url": "https://proxy.example.com/mcp",
"headers": { "Authorization": "Bearer my-secret-token" }
}
}
}Replace https://proxy.example.com/mcp with the proxy's public HTTPS address. See docs/TLS.md for the mTLS client configuration details and certificate generation.
Auth × TLS Deployment Matrix
MCP_BEARER_TOKEN (above) is one mode of a broader auth/transport/TLS selector
surface. The selectors live in the MCP_* namespace and apply to HTTP
transports only — auth and TLS are rejected (fail-closed) when
FASTMCP_TRANSPORT is stdio. Set FASTMCP_TRANSPORT=streamable-http (or sse)
when enabling any of these.
Auth × TLS deployment grid
The table below summarises all supported combinations and where each is appropriate:
Auth mode | TLS mode | Posture / Use when |
|
| Local loopback / single-user dev only — see SECURITY.md |
|
| Not recommended as-is — only acceptable when a TLS-terminating proxy in front enforces authentication |
|
| Not recommended as-is — transport-level peer identity but still no application-layer auth; set |
|
| Trusted LAN (token travels in cleartext — secure at the network level) |
|
| Recommended for LAN/VPN — shared-secret auth + transport encryption |
|
| High-assurance internal — mutual transport identity + shared secret |
|
| Avoid — tokens validated per-client but travel in cleartext; only tolerable behind a TLS-terminating proxy |
|
| Recommended for internet-exposed — per-client JWT + transport encryption |
|
| Zero-trust / multi-tenant — maximum assurance |
All nine cells are supported. Configuration details are in the tables below and in docs/AUTH-OAUTH.md / docs/TLS.md. See SECURITY.md for the full posture decision matrix including guidance on mTLS as a transport boundary.
Auth selectors
Env var | Default | Description |
| (unset) |
|
|
| Shared secret for |
|
| OAuth issuer URL. Required for |
|
| JWKS URI for signature verification. Required for |
|
| Expected token audience. Required for |
|
| Public base URL of this resource server. Required for |
|
| Comma-separated scopes a token must carry. |
|
| JWT signing algorithm to accept. |
| (issuer) | Comma-separated authorization-server URLs. Defaults to |
TLS selectors
Env var | Default | Description |
|
|
|
|
| Server certificate path. Required for |
|
| Server private key path. Required for |
|
| Client CA bundle for verifying client certs. Required for |
|
| Password for an encrypted private key. Optional. |
| (unset) | Client-cert verification level for |
Fail-closed validation: https/mtls require a cert + key (mtls also a CA
bundle); oauth requires issuer + JWKS URI + audience + base URL; bearer requires
a non-empty MCP_BEARER_TOKEN; unknown enum values and stdio + auth/TLS are
rejected at startup with a clear message.
All auth modes (none, bearer, oauth) and TLS modes (none, https, mtls)
are active and CI-tested. For OAuth setup see docs/AUTH-OAUTH.md;
for HTTPS / mTLS see docs/TLS.md.
Single key setup
export UNIFI_API_KEY="your-api-key-here"Multi-key MSP setup
export UNIFI_API_KEYS='[{"key": "key-a", "label": "org-east", "is_org_key": true}, {"key": "key-b", "label": "org-west"}]'Organization keys (is_org_key: true) cover all sites under the org. Personal keys only access consoles owned by the key holder.
Shell vs Docker env-file: the single quotes above are correct for an interactive shell or a script that uses
export. If you store this value in a file consumed by Docker (--env-file/env_file:in Compose), write the value without surrounding quotes — Docker reads the file literally and passes the raw string to the container. Writing the line with quotes in a Docker env file causes the literal quote characters to become part of the value, which fails JSON parsing with aSettingsError. The same file cannot serve both purposes without a wrapper: use the quoted form for shell, the unquoted form for Docker.
Per-host key routing: Per-host operations (any tool that accepts a
hostparameter) resolve the API key that owns the target console and send the request on that key, so a console owned by any configured key inUNIFI_API_KEYSis reachable — not only one owned by the first key.list_hosts,list_sites, andlist_all_sites_aggregatedaggregate across every key. Single-key deployments are unaffected: with one configured key there is nothing to disambiguate and every request rides that key exactly as before. (The fleet-wide Site Manager query endpoints that take a list of{hostId, siteId}rather than a singlehost— e.g.query_isp_metrics— are scoped by the request body, not by per-host key routing.)
Pagination Behavior
List tools return all available results by default. The server follows pagination automatically, draining every page before returning to the caller. For typical queries ("list all sites", "list all clients") you receive a complete result set without any manual page handling.
Getting a single page
To opt out of full-drain and receive exactly one page, supply explicit pagination parameters:
Cursor-based tools (those that return a
nextPageToken): pass the prior page token aspage_token=<value>.Offset-based tools (those that accept
offsetandlimit): pass bothoffset=<n>andlimit=<n>together.
Passing only one of offset or limit on an offset-based tool causes the server
to drain from that starting position.
Partial results when a page cap is set
When UNIFI_PAGINATE_MAX_PAGES is configured and the cap is reached before all
results are collected, the response includes:
{
"incomplete": true,
"incompleteReason": "page cap reached after N pages",
"data": [...]
}Check for "incomplete": true in results — when present, the data covers only a
subset of what the API holds. Raise or remove the cap (the default is no cap) to
retrieve the full dataset.
Stall detection is always active regardless of the cap: the client raises an error if a page response returns the same continuation token twice or if a zero-result page arrives with an active token.
Server-side filtering
Several Network Integration collection tools accept an optional filter argument:
list_networks, list_clients, list_site_devices, list_firewall_policies, and
list_wifi_broadcasts (alongside list_local_sites, list_lags, list_mc_lag_domains,
and list_switch_stacks). The expression is forwarded unchanged to the upstream
UniFi filter query parameter — the server implements no local filter language, so the
controller evaluates the documented grammar and returns its own error for a malformed
expression. Filtering is applied server-side in both full-drain and single-page modes,
so a narrowed query returns a smaller totalCount/result set without draining the
unfiltered collection first. When filter is omitted the parameter is not sent at all.
list_networks(host="HQ", site="Default", filter="vlanId.eq(100)")
list_clients(host="HQ", site="Default", filter="macAddress.eq('AA:BB:CC:DD:EE:FF')")
list_site_devices(host="HQ", site="Default", filter="state.eq('ONLINE')")See the Network v10.3.58 OpenAPI for the filterable properties and grammar for each collection resource.
Retry & Backoff Behavior
The MCP server automatically retries failed requests to handle transient failures and rate limits gracefully.
Rate Limit Handling (HTTP 429)
When the UniFi API responds with HTTP 429 (Too Many Requests), the server retries with exponential backoff + jitter:
Max retries: 5 (6 total attempts)
Backoff formula:
delay = min(2^attempt, 32) + random_jitter, whereattemptis 0-based (0 for the sleep before the 2nd request, 1 before the 3rd, etc.)Attempt 1: immediate
Attempt 2: 1-2 seconds (
2^0=1+ jitter 0-1)Attempt 3: 2-4 seconds (
2^1=2+ jitter 0-2)Attempt 4: 4-8 seconds (
2^2=4+ jitter 0-4)Attempt 5: 8-16 seconds (
2^3=8+ jitter 0-8)Attempt 6: 16-32 seconds (
2^4=16+ jitter 0-16)
Note: With the default
max_retries=5(6 total attempts), Attempt 6 is the final request. On a 429 at Attempt 6 the client raisesRateLimitErrorimmediately without sleeping. The highest sleep actually reached before exhaustion is therefore 16-32 seconds (the wait before Attempt 6, which isbase_delay=16plus up to 16 seconds of jitter). The 32-second base delay cap requiresattempt>=5and is only reachable ifmax_retriesis increased beyond 5; however, the total sleep (base + jitter) already reaches 32 seconds with the defaultmax_retries=5due to jitter.Jitter: Uniform random(0, base_delay) added to avoid "thundering herd" — coordinated retries from multiple clients hitting the API at the same moment.
After all retries are exhausted, a RateLimitError is raised. This is expected behavior when hitting API quotas; users should back off before retrying.
Network Errors (No Retry)
The following errors are not retried and raise immediately:
Timeout: Request exceeds
UNIFI_REQUEST_TIMEOUT_SECONDS(default 30)Connection failed: Network unreachable, DNS failure, refused connection
HTTP errors: non-429 4xx (auth, not found) and 5xx (server error) are raised immediately without retry
These are considered non-transient and retrying would not help. See Troubleshooting for how to handle them.
Configuration
Timeout:
UNIFI_REQUEST_TIMEOUT_SECONDS(default:30)Max retries: Hard-coded to 5 in the client; override by subclassing if needed
Max concurrency:
UNIFI_MAX_CONCURRENCY(default:10) — limits parallel requests to prevent overwhelming the API
Troubleshooting
Common Setup Issues
"ModuleNotFoundError: No module named 'unifi_fabric'"
Ensure you've installed the package with
pip install -e .in the repo directoryVerify your Python version is 3.12+:
python3 --versionTry
pip install --upgrade pipand reinstall if using an older pip version
"command not found: unifi-fabric-mcp"
The entry point is only available after installation:
pip install -e .For local development without installation, run directly:
python3 -m unifi_fabric.serverCheck that your virtual environment is activated:
source .venv/bin/activate
Docker fails to start with "exit code 1"
Verify the
UNIFI_API_KEYenvironment variable is set and non-emptyCheck Docker logs:
docker logs <container-id>Ensure you have internet connectivity to reach
api.ui.com
Environment Variable Misconfiguration
"401 Unauthorized" or "Invalid API key"
Verify your
UNIFI_API_KEYis correct — copy it directly from UniFi Site Manager Settings > API KeysAPI keys expire or may be regenerated; if recently created, use the new key
Ensure no trailing whitespace in the env var:
export UNIFI_API_KEY="key-here"(not"key-here ")
"UNIFI_API_KEYS" JSON parse error
Use proper JSON formatting:
[{"key": "...", "label": "..."}, ...]Escape quotes correctly in shell:
export UNIFI_API_KEYS='[{"key":"your-key"}]'(single quotes)If using Docker
--env-fileor Composeenv_file:, write the value without surrounding quotes — Docker reads the file literally, so quotes become part of the value and break JSON parsingValidate JSON at jsonlint.com before setting
"Base URL is incorrect" or "api.ui.com not found"
The default base URL is
https://api.ui.com— do not change this unless you have a private Ubiquiti API endpointIf you must override, set
UNIFI_API_BASE_URL="https://your-custom-endpoint.com"Ensure no trailing slash:
https://api.ui.com(nothttps://api.ui.com/)
Connection Errors
"Connection refused" or "Cannot connect to api.ui.com"
Check your internet connection:
ping api.ui.comVerify your firewall/proxy allows outbound HTTPS (port 443)
If behind a corporate proxy, you may need to configure
httpxwith custom certificates — open an issue if you need guidanceThe server makes requests to
https://api.ui.com/v1/— ensure this endpoint is reachable
"Certificate verification failed" or "SSL: CERTIFICATE_VERIFY_FAILED"
This typically occurs behind corporate proxies with MITM certificate injection
Verify your system CA bundle is up-to-date:
pip install --upgrade certifiIf using a corporate proxy certificate, import it into your system trust store
As a last resort (not recommended), you can disable verification:
export UNIFI_API_VERIFY_SSL=false(add support if needed — open an issue)
"Request timeout" or "socket timeout"
The default timeout is 30 seconds. If your network is slow, increase it:
export UNIFI_REQUEST_TIMEOUT_SECONDS=60Check if
api.ui.comis experiencing an outage: status.ui.comIf using Docker, ensure the container has network connectivity:
docker run --network host ...
"No hosts found" or "Site not found"
Your API key must have access to the sites you're querying. Verify in UniFi Site Manager Settings > API Keys > > Sites
Organization keys (
is_org_key: true) should see all sites; personal keys only see sites you ownIf you just created the key or changed site permissions, wait 1-2 minutes for propagation and retry
Getting Help
Check developer.ui.com for API documentation and latest firmware compatibility
Search existing GitHub issues for your problem
Include the following in bug reports:
Tool name and parameters you were using
Full error message (redact your API key and sensitive IPs)
Python version (
python3 --version) and OSDocker image tag (if applicable)
Relevant env vars (without secrets)
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests (Tier-1 hermetic — no credentials required)
pytest
# Tier-2 live integration tests require live credentials and a host/site:
# UNIFI_API_KEY=<key> UNIFI_TEST_HOST=<host> UNIFI_TEST_SITE=<site> pytest
# Tier-3 (full release sweep) is deferred until release
# Lint
ruff check src/ tests/
ruff format --check src/ tests/Docker Deployment
The server ships as a Docker image. When pinning deployments for production use, reference the image by digest rather than a mutable tag to ensure reproducibility and guard against tag mutation:
# Pull by digest instead of :latest or a version tag
docker pull ghcr.io/swkstudios/unifi-fabric-mcp-server@sha256:<digest>You can find the digest for a given release on the package page or via (the image must be present locally — run docker pull first):
docker pull ghcr.io/swkstudios/unifi-fabric-mcp-server:latest
docker inspect --format='{{index .RepoDigests 0}}' ghcr.io/swkstudios/unifi-fabric-mcp-server:latestStateless Design (No Persistent Volumes)
By design, this container is stateless and does not require persistent volumes. The MCP server:
Makes API calls to the remote UniFi Site Manager cloud API (
api.ui.com)Does not maintain local state between requests
Does not store credentials, configurations, or cached data on disk
Uses in-memory caching only (with configurable TTL, default 900 seconds)
Has no dependencies on local storage, databases, or filesystem persistence
Why stateless? The server acts as an ephemeral proxy/bridge between AI assistants and the UniFi cloud API. Each session is independent; all configuration and data live in the cloud. Deployment is simplified by container orchestrators (Docker Compose, Kubernetes) with no persistent volume claims needed.
Implications:
Cache is reset on container restart (this is safe and expected)
Multiple server instances can run in parallel without coordination
No data loss risk from container updates or replacements
Scaling is stateless and simple
Contributing
We welcome contributions. See CONTRIBUTING.md for setup instructions, branch naming, commit conventions, CI gates, testing requirements, and the changelog rule. For security vulnerabilities, see SECURITY.md — do not open a public issue.
License
MIT. See LICENSE for details.
Available Tools
283 toolsadopt_deviceB
Adopt a device onto a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device: device adoption payload (mac, name, etc.).
Example: adopt_device(host="main-office", site="HQ", device={"mac": "aa:bb:cc:dd:ee:ff"})
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Adopt a device onto a site' and defines the host format. It does not disclose that this is a state-changing operation, what the side effects are (e.g., device becomes managed by the site), whether any device state must already exist, or failure behavior.
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 compact and well ordered: purpose first, then parameter definitions, then a concrete example that clarifies real usage. Every sentence earns its place and nothing is redundant or padded.
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?
An output schema exists, so return values need no explanation, and parameter formats are reasonably covered. However, for a mutating tool with a nested free-form device payload and no annotations, it lacks information about prerequisites, what constitutes a valid payload, and what adoption actually changes — adequate but with clear gaps.
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 0%, so the description must compensate, and it genuinely does: host is explained as 'console name, ID, or composite ID (MAC:numericId format)', site as 'site name or ID', and device as an 'adoption payload (mac, name, etc.)' backed by a realistic example. The device object could be specified further, but the added meaning far exceeds what the empty schema strings provide.
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 opening sentence 'Adopt a device onto a site' uses a specific verb and resource, making the core operation clear. It is distinguishable from related siblings like unadopt_device, approve_pending_device, and reject_pending_device through the unique 'adopt' verb and the online/site framing, though it does not explicitly name or contrast with those alternatives.
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 a concrete example call but gives no guidance on when adoption is appropriate versus related device lifecycle flows such as approve_pending_device or unadopt_device. There are no stated conditions, prerequisites, exclusions, or alternative routing, so an agent gets no help deciding between this tool and its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
alarm_hub_trigger_outputA
Trigger an alarm-hub output (POST /v1/alarm-hubs/{id}/outputs/{outputId}/trigger).
WARNING: physically triggers alarm-hub output hardware.
host: console name, ID, or composite ID (MAC:numericId format).
alarm_hub_id: REQUIRED. Obtain it from list_alarm_hubs (its id field).
output_id: REQUIRED output identifier on that hub.
confirm: must be true to execute. enable: true on / false off (omit to toggle).
delay: ms before activating. duration: ms to stay active (0 = indefinite).
Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| delay | No | ||
| enable | No | ||
| confirm | No | ||
| duration | No | ||
| output_id | Yes | ||
| alarm_hub_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers: it warns that the tool physically triggers hardware, requires an explicit confirm=true, explains enable toggling behavior, and documents delay/duration effects. This is strong behavioral disclosure for a mutating operation.
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 warning is front-loaded and every subsequent line adds semantic value. Parameter hints are compactly grouped and there is no filler or repeated schema 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?
Given a physical hardware-triggering mutation with seven parameters and no annotations, the description covers safety, required identifiers, parameter semantics, and execution gating. The output schema exists, so no return-format explanation is needed, and nothing essential is missing.
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 0%, but the description documents every parameter: host formats, how to source alarm_hub_id, meaning of output_id, confirm as an execution guard, enable as on/off/toggle, delay in ms, and duration with 0 meaning indefinite. It fully compensates for the schema's lack of descriptions.
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 opens with a specific verb and resource — 'Trigger an alarm-hub output' — and reinforces it with the exact HTTP endpoint. It is clearly distinct from sibling operations like relay_activate_output or list_alarm_hubs because it names the alarm-hub output trigger action.
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?
It gives actionable context: confirm must be true to execute, alarm_hub_id should be obtained from list_alarm_hubs, and the operation is gated by UNIFI_PROTECT_MUTATIONS_ENABLED. It does not explicitly name alternative tools or when-not-to-use cases, but the route to prerequisites is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
allow_network_on_port_profileA
Atomically allow (un-exclude) a VLAN network on a switch port profile.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
profile_id: REQUIRED. The port profile id; from list_port_profiles (its _id).
network_id: REQUIRED. The networkconf id to allow; from list_networks (its id) or
the resolved id fields in list_port_profiles output.
confirm: must be True to execute. This is a live PUT to a SHARED port profile
(its exclusion list affects every switch port using it); it refuses with an
error dict when confirm is False, before any controller call.
This is the D12 auto-exclusion remediation: it fresh-reads the profile, removes
network_id from excluded_networkconf_ids, PUTs, and returns
{profile, tagged_networks} with the resulting tagged VLAN set rendered with names.
Use it on every profile named in a create_network D12_AUTO_EXCLUSION warning.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| confirm | No | ||
| network_id | Yes | ||
| profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses that this is a live PUT to a shared port profile, explains the side effect on every switch port using the profile, states that it refuses with an error dict when confirm is False, and describes the internal read-modify-write behavior before the controller call.
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?
Every sentence adds necessary information, and the most important action is front-loaded. Parameter explanations are grouped clearly, and the remediation context is stated compactly without repetition or filler.
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 mutating tool with no annotations, the description covers prerequisites, ID sourcing, confirmation semantics, side effects, and the high-level return shape. The existence of an output schema reduces the need to detail the return structure further, so nothing essential is missing.
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 0%, but the description fully compensates by explaining every parameter: host formats, site name/ID, profile_id source, network_id source, and the confirm requirement. This is exactly the guidance an agent needs to resolve otherwise opaque parameter names.
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 opens with a specific verb-resource pair ('Atomically allow (un-exclude) a VLAN network on a switch port profile') and clearly distinguishes this from the inverse operation by using 'un-exclude'. It leaves no ambiguity about what the tool does or which entity it affects.
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 concrete trigger condition: use it on every profile named in a `create_network` `D12_AUTO_EXCLUSION` warning. It does not explicitly contrast this with the sibling `exclude_network_on_port_profile`, but the inverse semantics are implied by 'un-exclude' and the focused remediation use case provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_pending_deviceA
Approve a pending device for adoption onto a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device ID from list_pending_devices to approve.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses the core state change—approving a pending device for adoption onto a site—and implies a transition from pending to approved. However, it does not clarify whether approval automatically triggers adoption, whether the action is reversible, or what side effects occur. For a state-changing tool, this is useful but not deeply transparent.
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?
Three short sentences deliver the purpose and all parameter semantics without redundancy. The main action is front-loaded, and the parameter notes are compact and directly useful.
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, all required parameters are semantically explained, and an output schema exists, so return-value documentation is unnecessary. The only gap is the lack of behavioral/side-effect detail for a mutation tool with no annotations, but nothing essential for selecting and invoking the tool correctly is missing.
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 0%, but the description fully compensates by documenting all three parameters: host accepts console name, ID, or MAC:numericId; site accepts name or ID; and device_id is sourced from list_pending_devices. This is actionable and goes well beyond the empty schema.
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 action verb ('Approve') and a specific resource ('pending device for adoption onto a site'), clearly distinguishing this from sibling operations like reject_pending_device or adopt_device. It is not a tautology and immediately tells an agent what the tool accomplishes.
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 clear context by instructing that device_id should come from list_pending_devices, which implies the prerequisite workflow: list pending devices, then approve one. It does not explicitly name alternatives like reject_pending_device or state when not to use this tool, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_carrier_subscriber_planA
Assign a service plan to a subscriber (PUT .../subscribers/{id}/plan). Guarded write.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. An archived or unknown plan is rejected upstream. Guarded: read-before, no-op when already on this plan, confirm=true, write kill-switch, read-after.
subscriber_id: the subscriber UUID from list_carrier_subscribers. plan_id: the service-plan UUID to assign (from list_carrier_service_plans). confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| plan_id | Yes | ||
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits, and it does so extensively. It reveals that this is a 'Guarded write' with a sequence of safety behaviors: read-before, no-op when already on the plan, confirm=true requirement, write kill-switch, and read-after. It also discloses testability limitations and the upstream rejection of archived or unknown plans. This far exceeds typical descriptions and gives the agent a clear mental model of side effects and backend expectations.
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 dense but every sentence earns its place. The opening sentence gives the purpose immediately, followed by needed caveats (testability, rejection, guarded behavior) and then parameter explanations. There is no fluff or repetition; even the testability warning is operationally relevant because it sets expectations for how the tool is validated. The structure front-loads the essential 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?
For a mutating operation with a guard flag and upstream validation, the description covers all invocation-critical aspects: purpose, prerequisites (source tools for IDs), required confirm flag, optional key_label routing, success no-op condition, failure modes (archived/unknown plan), and backend safety checks. An output schema exists and is noted in context, so the absence of return-value documentation is acceptable. This is a complete picture for an agent to call the tool 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 description coverage is 0%, so the description must compensate, and it fully does. Each parameter is given an explicit semantic: subscriber_id is 'the subscriber UUID from list_carrier_subscribers', plan_id is 'the service-plan UUID to assign (from list_carrier_service_plans)', confirm 'must be true to apply the change', and key_label is 'optional configured API-key label'. This is exactly the kind of grounding the schema lacks, providing provenance and constraints that the bare property names do not convey.
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 opens with a direct, specific statement: 'Assign a service plan to a subscriber (PUT .../subscribers/{id}/plan).' The verb, resource, and HTTP endpoint are explicit, making the tool's purpose unmistakable and clearly distinct from sibling carrier tools like suspend/resume/create/update. The inclusion of the endpoint syntax further concretizes the operation.
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 strong usage context by specifying that subscriber_id comes from list_carrier_subscribers and plan_id from list_carrier_service_plans, implicitly instructing the agent to gather IDs from those tools first. It also states the confirm parameter must be true to apply the change, clarifying a critical precondition. However, it does not explicitly name alternative tools or state when not to use this one, so it stops short of full usage exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_carrier_subscriber_hostA
Attach or re-link a subscriber's gateway host (PUT .../subscribers/{id}/host). Guarded.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. host_id must be a host in the same ISP organization. Guarded: read-before, no-op when already linked, confirm=true, write kill-switch, read-after (reports prev_host_id).
subscriber_id: the subscriber UUID from list_carrier_subscribers. host_id: the gateway host id to link. confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| host_id | Yes | ||
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden. It discloses the guarded behavior: read-before, no-op when already linked, confirm=true required, write kill-switch, and read-after reporting prev_host_id. Also states the testing limitation (hermetic/spec-conformance only), which is critical for expectation-setting.
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?
Every sentence delivers unique value: endpoint, guarded behavior, constraints, parameter meanings, and testing caveat. No fluff or redundancy; information is front-loaded with the action and endpoint first.
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?
Despite having an output schema, the description provides all necessary contextual details: the guarded workflow, prerequisites (same ISP organization), source of subscriber_id, and the no-op behavior. An agent has everything needed to invoke this tool correctly and understand side effects.
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 0%, so the description must explain all parameters. It does: subscriber_id (source), host_id (gateway host id), confirm (must be true), key_label (optional API-key label). Every parameter is covered with meaningful explanation beyond the schema's raw type definitions.
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 states a specific verb ('Attach or re-link') and a resource ('subscriber's gateway host') with the exact PUT endpoint. It clearly distinguishes from siblings like detach_carrier_subscriber_host, leaving no ambiguity about what this tool does.
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 explicit operational context: host must be in the same ISP organization, and links to the source of subscriber_id from list_carrier_subscribers. It doesn't explicitly name alternative tools for when not to use, but the guarded nature and constraints effectively guide appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
block_clientB
Block a client on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
client_id: REQUIRED. Obtain it from list_clients (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because no annotations are present, the description carries full responsibility for disclosing behavioral traits. 'Block' implies a mutation, but the description does not state consequences (e.g., loss of network access, whether existing sessions are terminated) or any permission requirements. The parameter format details are helpful but do not cover behavioral 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 brief and front-loaded with the core action. Parameter explanations are presented in a compact, scannable format with no unnecessary repetition or filler. Every sentence contributes useful 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?
The description covers all parameters and the critical source for client_id, but with no annotations it omits behavioral and safety context such as reversibility, impact on client access, or required permissions. For a mutation tool of this simplicity, this is a moderate gap, making the definition minimally viable but not comprehensive.
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 0%, so the description must compensate. It fully explains all three parameters: host (console name, ID, or composite MAC:numericId), site (name or ID), and client_id (required, obtainable from list_clients). This adds substantial meaning beyond the bare string types in the schema.
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 states a clear verb and resource: 'Block a client on a site.' This is unambiguous about the action and target. It does not explicitly contrast with sibling unblock_client or execute_client_action, so differentiation relies on the name, slightly lowering the score.
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 a prerequisite (obtain client_id from list_clients) but does not explain when to use block_client versus unblock_client or other client-action tools. There is no explicit 'use this when...' or mention of alternatives, leaving the selection logic to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_delete_hotspot_vouchersB
Bulk delete hotspot vouchers matching filter criteria.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. filter_params: filter parameters to select vouchers for deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| filter_params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are available, so the description carries the full burden of behavioral disclosure. Despite being a destructive bulk operation, it does not warn that matching vouchers will be permanently deleted, mention irreversibility, or note any authorization requirements.
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 compact and front-loaded: the main purpose appears first, followed by brief parameter definitions. No filler is present, though the `filter_params` line is somewhat tautological.
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 description is inadequate for a destructive bulk operation with no annotations and an opaque `filter_params` object. It omits irreversibility, criteria details, and any usage boundaries, even though an output schema exists and return-value explanation is not required.
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?
With 0% schema description coverage, the description must compensate. It usefully explains `host` as "console name, ID, or composite ID (MAC:numericId format)" and `site`, but `filter_params` is only described as "filter parameters," leaving the actual keys and value shapes undocumented.
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 states a specific verb and resource: "Bulk delete hotspot vouchers matching filter criteria." It distinguishes itself from the sibling `delete_hotspot_voucher` by emphasizing bulk operation and selection via filters, so an agent can tell it apart.
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 no explicit when-to-use guidance or mention of alternatives like `delete_hotspot_voucher` for single deletions. The phrase "matching filter criteria" implies bulk selection, but no clear context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_site_performanceB
Compare health and performance metrics across multiple sites side-by-side.
sites: list of site names or IDs to compare.
| Name | Required | Description | Default |
|---|---|---|---|
| sites | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'compare', which implies a read-only operation, but it does not explicitly state side effects, required permissions, how invalid site names are handled, or whether results are live or cached. The description lacks transparency about potential edge cases or operational nuances.
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 with no fluff. The purpose is front-loaded, and the parameter explanation earns its place. Every word contributes to understanding the tool.
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 tool with a single parameter and an output schema, the description covers the core behavior and parameter meaning. However, it lacks usage context, any note about minimum number of sites, or behavior on missing/invalid sites. It is minimally complete but could be more helpful.
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 only defines 'sites' as an array of strings with no description. The description adds meaning by explaining the parameter as 'list of site names or IDs to compare', clarifying the acceptable values and their purpose. This compensates well for the 0% schema coverage.
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 states a specific verb 'compare' with a resource 'health and performance metrics across multiple sites' and the manner 'side-by-side'. This makes the purpose clear and distinct from single-site tools, though it does not explicitly name or differentiate sibling 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?
The description provides no explicit guidance on when to use this tool versus alternatives such as get_site_health_summary or list_all_sites_aggregated. There are no conditions, prerequisites, or exclusions mentioned; the usage scenario is only implied by the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_acl_ruleA
Create a new ACL rule on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Validated locally before the request (a missing field raises ValueError naming it):
type — the discriminator the controller validates first (verified live: an empty
body is rejected with Missing $.type value; observed value: 'MAC'). The remaining
fields are type-specific and enforced by the controller.
rule: for a MAC-type rule the live object also carries: name (str), action, enabled
(bool), sourceFilter, networkIdFilter. Read an existing rule with get_acl_rule to see
the exact shape for the type you want.
Note: ACL rules are for intra-VLAN/inter-network L3 filtering. For zone-based
perimeter firewall rules, use create_firewall_policy instead.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| rule | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals local validation details, the exact controller error for an empty body, and that field validation is type-specific. It is strong but does not mention permissions, idempotency, or duplicate-rule behavior.
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 dense yet well-organized, front-loading the purpose, then parameter semantics, then routing guidance. Every sentence adds value—no filler or repetition.
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 tool with a nested object and zero schema descriptions, this covers all critical aspects: required parameters, validation behavior, type-specific shape, and alternatives. The output schema likely covers return values, so nothing essential is missing.
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 0%, yet the description compensates thoroughly. It defines host and site formats, notes the 'type' discriminator, and enumerates MAC-type rule fields (name, action, enabled, sourceFilter, networkIdFilter). This gives an agent enough to construct a valid call.
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 opens with 'Create a new ACL rule on a site,' using a specific verb, object, and target. It further distinguishes ACL rules from zone-based perimeter firewall rules, clearly separating this tool from create_firewall_policy.
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?
Explicitly states when to use this tool (intra-VLAN/inter-network L3 filtering) and when not to, directing to create_firewall_policy for zone-based rules. Also advises reading an existing rule with get_acl_rule to learn the exact shape, giving the agent a concrete next step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_arm_profileA
Create an arm profile (POST /v1/arm-profiles via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format). name: REQUIRED display name for the profile. settings: the rest of the required body — automations, schedules, recordEverything, activationDelay (server-side validated). Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| settings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds useful context by identifying the Fabric proxy endpoint, noting that settings are server-side validated, and flagging the UNIFI_PROTECT_MUTATIONS_ENABLED feature gate. However, it does not describe failure behavior, permission requirements, or side effects beyond the obvious create operation.
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 tight and front-loaded: the operation and endpoint appear first, followed by brief parameter explanations. Each line provides actionable information without repetition or filler.
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 description covers the endpoint, host targeting, all required parameters, the key nested settings fields, server-side validation, and the feature flag. An output schema exists to cover return values. It is not exhaustive about exact settings structure or failure modes, but it is complete enough for an agent to make a well-informed call.
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 0%, so the description must compensate, and it does. It explains that host accepts console name, ID, or MAC:numericId composite format; clarifies that name is the required display name; and breaks down settings into automations, schedules, recordEverything, and activationDelay. It leaves some ambiguity around the exact settings object shape, but the guidance is substantially more informative than the bare schema.
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 opens with the specific verb and resource pair 'Create an arm profile' and provides the exact endpoint 'POST /v1/arm-profiles via Fabric proxy.' This clearly distinguishes it from the many get/list/update/delete sibling tools that operate on arm profiles.
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 this tool is for creating a new arm profile, and it mentions the UNIFI_PROTECT_MUTATIONS_ENABLED gate, which is useful operational context. However, it does not explicitly state when to use this tool instead of update_arm_profile or update_arm_profile_settings, nor does it provide any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_carrier_subscriberA
Create a Carrier / ISP Fabric subscriber (POST /v1/carrier/subscribers). Guarded write.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only; a live create is impossible here. subscriber_number is required (1-32 chars). Optional name (<=128), email (<=255), notes (<=4096), service_address (<=1024), plan_id (UUID), metadata (object). Requires confirm=true and the UNIFI_ENABLE_CARRIER_FABRIC_WRITE gate.
subscriber_number: unique subscriber number (1-32 characters). name/email/notes/service_address/plan_id/metadata: optional profile fields. confirm: must be true to apply the create. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| No | |||
| notes | No | ||
| confirm | No | ||
| plan_id | No | ||
| metadata | No | ||
| key_label | No | ||
| service_address | No | ||
| subscriber_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that this is a guarded write, requires a feature gate, and states that the tool is not testable against live hardware—only hermetic/spec-conformance tested, so a live create is impossible. This is valuable context beyond basic parameter docs, though it stops short of describing error responses or idempotency.
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 front-loaded with purpose and organized, but it redundantly lists parameters twice: once in prose ('subscriber_number is required...') and again at the end as a bullet-like series. Trimming that duplication would make it tighter without losing meaning.
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 has 9 parameters, zero annotations, and an output schema, the description covers all necessary invocation details: the confirm gate, feature gate, testing limitations, every parameter constraint, and the key_label special case. An agent has everything required to call this tool 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 description coverage is 0%, and the description compensates fully. It explicitly documents every parameter: required subscriber_number (1-32 chars), length limits for name/email/notes/service_address, plan_id as UUID, metadata as object, confirm must be true, and key_label for API-key routing. This is exactly what an agent needs and goes far beyond the bare schema.
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 states a specific verb and resource: 'Create a Carrier / ISP Fabric subscriber (POST /v1/carrier/subscribers)'. It also adds 'Guarded write', which distinguishes this creation tool from other subscriber operations like update, suspend, attach, or detach that exist in the sibling list.
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 clear context for when to use the tool: creating a new subscriber, requiring confirm=true and the UNIFI_ENABLE_CARRIER_FABRIC_WRITE gate. It also notes that live creation is impossible in this environment. However, it does not explicitly name alternative tools for different operations, though the sibling names make the distinction obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_device_tagA
Create a device tag on a site. This is a write operation that modifies live config.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tag: required fields:
name (str): tag label shown in the UI Optional: color (str, hex color e.g. '#FF5733'). Tags can then be assigned to devices to group and filter them in the UniFi UI.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose the critical fact that this is a write operation that modifies live config. It does not cover idempotency, duplicate-name behavior, permission requirements, or failure modes, which would add valuable 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 compact and well-structured: the operation and write warning come first, then parameter explanations, then workflow context. Every sentence adds value and the bullet-like formatting is easy to scan.
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 tool with three parameters, a nested object, and no annotations, the description provides the essential invocation details. Because an output schema exists, return-value documentation is not required. It stops short of error and duplicate-handling context, but that is not necessary for a correct first call.
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 0%, so the description must compensate, and it does. It explains host formats (name, ID, composite MAC:numericId), site as name or ID, and documents the tag object's required name field and optional color field with a hex example.
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?
States a specific verb and resource: 'Create a device tag on a site.' It also explicitly calls out that this is a write operation modifying live config, which clearly differentiates it from read tools and tag-modification siblings.
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 useful context: tags are created on a site and later assigned to devices for grouping/filtering, which implies the intended workflow. However, it does not offer explicit when-to-use or when-not-to-use guidance, nor does it route the agent to update_device_tag, delete_device_tag, or list_device_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dns_policyA
Create a new DNS policy on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Validated locally before the request (a missing field raises ValueError naming it):
type — the discriminator the controller validates first (verified live: an empty
body is rejected with Missing $.type value). The remaining fields are type-specific
and enforced by the controller.
policy: for a typical policy also include a name and the network scope; read an
existing policy with get_dns_policy to confirm the exact shape for the type you want.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to carry the safety profile, the description discloses local validation, ValueError behavior naming missing fields, the controller's first validation of the type discriminator, and a verified live failure mode for an empty body. This is considerably more behavioral detail than a bare 'create' label would provide.
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 front-loaded with the purpose, then organized into parameter semantics, validation behavior, and policy guidance. Every detail, including the verified empty-body rejection message, earns its place and no filler is present.
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 an opaque policy object with no annotations and no request-schema descriptions, the description supplies host/site formats, the required type discriminator, validation ordering, and a concrete strategy for discovering the full request shape. Because an output schema exists, not detailing the return value is acceptable.
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 0%, so the description fully compensates: host accepts a console name, ID, or composite ID in MAC:numericId format, site accepts a name or ID, and policy requires a type discriminator plus type-specific fields. It even suggests consulting get_dns_policy for the exact policy shape, which is essential because the schema leaves the policy object unrestricted.
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 opening sentence, 'Create a new DNS policy on a site,' states a specific verb, resource, and scope. It is immediately distinct from sibling operations such as list_dns_policies, get_dns_policy, update_dns_policy, and delete_dns_policy.
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 clear context for how to use the tool, such as including name and network scope for a typical policy and reading an existing policy via get_dns_policy to confirm the exact shape. It does not explicitly state when not to use it, though no close alternative create operation exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_firewall_policyA
Create a new firewall policy on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. policy: required fields (all validated locally — a missing field raises ValueError naming it — and all verified against the live controller):
name (str)
enabled (bool)
action: {'type': 'ALLOW'|'DENY'|'REJECT', 'allowReturnTraffic': bool}
source: {'zoneId': str}
destination: {'zoneId': str}
ipProtocolScope: {'ipVersion': 'IPV4'|'IPV6'|'BOTH'}
loggingEnabled (bool) Note: there is NO 'index' field; use set_firewall_policy_ordering to manage rule order. Get zone IDs from list_firewall_zones_proxy. trafficFilter (optional; may appear on source and/or destination) narrows the match beyond the zone pair. Set trafficFilter.type plus the ONE matching nested object:
IP_ADDRESS -> ipAddressFilter.items[] (IP addresses / CIDRs)
NETWORK -> networkFilter.networkIds[] (network UUIDs)
PORT -> portFilter.items[] (ports / port ranges)
MAC_ADDRESS -> macAddressFilter.macAddresses[] (client MAC addresses) The controller may also support further types (e.g. region/identity-based); list_firewall_policies only reveals the types already in use on a site, so an unlisted type is not evidence it is unsupported. PORT-FILTER PLACEMENT FOOTGUN: a portFilter under source.trafficFilter filters SOURCE ports, which for outbound flows are ephemeral (random high ports) -> the rule silently matches nothing. A destination-port rule MUST use destination.trafficFilter with type PORT, never a source portFilter. (create/update_firewall_policy log a runtime warning when a source PORT filter is combined with an any-destination ALLOW.)
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers exceptional behavioral detail: local validation with ValueError naming, live controller verification, absence of the index field, the source-port filter footgun, and a runtime warning condition. These are exactly the non-obvious behaviors an agent needs before invoking an API.
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?
Although lengthy, the description is tightly organized: a one-line purpose, parameter definitions, and a clearly labeled PORT-FILTER PLACEMENT FOOTGUN warning. Every sentence contributes necessary information for correctly constructing a firewall policy with a nested schema.
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 complex create operation with an opaque schema and no annotations, the description covers host/site resolution, required fields, optional trafficFilter types, ordering via a sibling tool, zone ID sourcing, and a dangerous port-filter placement caveat. The presence of an output schema covers return-value expectations, so nothing critical is missing.
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 input schema is generic — policy is simply an 'additionalProperties: true' object — so the description supplies the entire semantic layer. It documents host formats, site addressing, required policy fields with types, the action/source/destination structure, and the trafficFilter one-of variants, fully compensating for 0% schema coverage.
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 opens with a specific verb and resource: 'Create a new firewall policy on a site.' It also differentiates from related siblings by explicitly stating there is NO 'index' field and directing rule-order management to set_firewall_policy_ordering, removing any ambiguity about scope.
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 clear pointers to sibling tools for related tasks: use set_firewall_policy_ordering for rule order, list_firewall_zones_proxy for zone IDs, and list_firewall_policies for discovering in-use filter types. It does not explicitly state exclusions against update_firewall_policy or patch_firewall_policy, though 'Create a new' implies the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_firewall_zone_proxyA
Create a new firewall zone on a site via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. zone: must include {'name': str, 'networkIds': [str]} — both required, validated locally (a missing field raises ValueError naming it) and verified against the live controller. Get network IDs from list_networks.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| zone | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the zone payload is validated locally and that a missing field raises a ValueError naming the field, and that the zone is then verified against the live controller. This goes beyond a generic 'creates' statement, though it does not discuss permissions or failure details.
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 compact and front-loaded. The first sentence states the action, and subsequent lines map cleanly to each parameter without extraneous prose.
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 three-parameter create operation with an output schema available, the description covers the parameter formats, the required nested zone payload, local validation behavior, and how to source networkIds. It is complete enough to call correctly, though it does not explain the connector-proxy context or what response to expect beyond the existing output schema.
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 0%, so the description must compensate. It explains all three parameters: host accepts a console name, ID, or MAC:numericId composite; site accepts name or ID; zone must contain name and networkIds with their types. It also tells the agent where to get network IDs. Slight gap: it doesn't state whether additional zone properties are allowed or prohibited.
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 opens with a specific verb and resource: 'Create a new firewall zone on a site via connector proxy.' This matches the tool name and cleanly separates it from sibling firewall-zone operations (list/get/update/delete_firewall_zone_proxy).
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 clear context for when to invoke it: creating a new zone rather than listing, fetching, updating, or deleting one. It also directs the agent to list_networks to obtain required networkIds. It does not explicitly state exclusions (e.g., use update_firewall_zone_proxy to modify an existing zone), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_hotspot_operatorA
Create a hotspot operator account.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. name: operator username. password: operator password.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| note | No | ||
| site | Yes | ||
| password | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full responsibility for behavioral disclosure. It states the operation is 'create,' but does not mention permissions, idempotency, side effects, or any caveats. The output schema exists, but the description does not hint at what the response contains. This is a significant gap for a mutating tool.
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, with the second packing parameter clarifications into a dense but readable format. No filler or redundancy. Every sentence adds value.
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 five parameters and the presence of an output schema, the description covers the core required fields and gives format hints for host and site. The only missing piece is the optional 'note' parameter and clearer guidance on response handling, but the output schema fills that gap. Overall, it is sufficiently complete for a competent agent.
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 input schema has no descriptions, so the description must compensate. It explains host (including the MAC:numericId composite format), site (name or ID), name (username), and password (password). However, it omits the optional 'note' parameter entirely. Despite the omission, the provided explanations are concrete and actionable, earning a strong score.
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 starts with a specific verb and resource: 'Create a hotspot operator account.' This clearly distinguishes it from sibling tools like list_hotspot_operators, update_hotspot_operator, and delete_hotspot_operator. The description also explains key parameters that reinforce the creation 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?
The description does not explicitly state when to use this tool versus alternatives. It implies usage through the verb 'create,' but there is no guidance on when the update or delete siblings should be used instead. The parameter explanations provide some context, but no direct usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_hotspot_vouchersA
Generate hotspot vouchers for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
voucher_config: required fields (validated locally — a missing field raises ValueError
naming it — and verified against the live controller): name and
timeLimitMinutes (voucher validity window, minutes). Optional: count, quota,
bandwidth limits, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| voucher_config | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It goes beyond a simple "create" by explaining local validation behavior (missing field raises ValueError naming it), live controller verification, and the exact required fields. It does not discuss permissions or failure modes, but it provides substantial behavioral detail for a create operation.
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 front-loaded with the core action and then uses a compact, labeled structure for parameters. Every clause provides useful information: host formats, site formats, required config, validation behavior, and optional fields. There is no filler.
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 description is complete enough to call the tool correctly: all three required parameters are explained, the nested voucher_config is described with mandatory and optional keys, and the return value is handled by the existing output schema. It is slightly open-ended about the full set of optional voucher_config fields, but the "etc." covers that without bloating the description.
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 0%, so the description must fully compensate. It does: host is explained as console name/ID/composite ID with format, site as name/ID, and voucher_config is broken down into required name/timeLimitMinutes with units and optional fields. This adds rich meaning beyond the bare schema.
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 opens with a specific verb and resource: "Generate hotspot vouchers for a site." This clearly distinguishes the tool from sibling list/get/delete hotspot-voucher tools and from the broader create_hotspot_operator tool.
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 clear context on how to use the tool: it explains what host, site, and voucher_config mean and what is required. It does not explicitly name alternatives or exclusions, but the creation purpose and parameter guidance are unambiguous enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_liveviewB
Create a liveview on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format). name: liveview display name. settings: optional additional liveview fields (layout, slots, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| settings | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does not mention permissions required, side effects, or what happens upon creation. It also does not indicate whether existing liveviews are affected or what the response contains.
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 and well-structured, with a one-line summary followed by parameter explanations in a clear list format. No extraneous content.
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 description covers the essential parameters but lacks usage context, behavioral expectations, and any edge-case handling. Since an output schema exists, return values are covered, but the agent still lacks guidance on when and how to use this tool in a broader workflow.
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 description adds significant meaning beyond the raw schema by explaining each parameter: host format ('MAC:numericId'), name purpose, and settings as optional extra fields. This is especially valuable given 0% schema description coverage.
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 'Create a liveview on a Protect console' with a specific verb and resource. It does not explicitly differentiate from sibling tools like update_liveview, but the action is unambiguous.
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, nor are there any prerequisites or context. The description only states what it does, leaving the agent to infer when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_networkA
Create a new network/VLAN on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Validated locally before the request (a missing field raises ValueError naming it):
management — the discriminator the controller validates first. The rest of the
required schema is management-mode-specific and enforced by the controller.
network_config: for management='GATEWAY' the controller also requires (verified live):
name (str, max 32 chars)
vlanId (int, 1-4094)
enabled (bool)
internetAccessEnabled (bool)
isolationEnabled (bool)
cellularBackupEnabled (bool)
ipV4Configuration: {'dhcpMode': 'SERVER'|'RELAY'|'NONE', 'subnet': str CIDR, 'hostAddress': str, 'netmask': str, 'broadcastAddress': str, 'dhcpRangeStart': str, 'dhcpRangeStop': str} Optional: zoneId (str, zone UUID from list_firewall_zones_proxy), mdnsForwardingEnabled (bool). Field names are camelCase; there is no 'purpose' field in the Network Integration API.
D12 auto-exclusion: UniFi silently adds every new network to the
excluded_networkconf_ids of ALL custom-tagged port profiles
(tagged_vlan_mgmt == 'custom'), blackholing the VLAN at the host uplink.
When that happens this response carries a warnings entry (code
D12_AUTO_EXCLUSION) naming each affected profile; run
allow_network_on_port_profile on each to restore tagging.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| network_config | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description fully carries the burden of explaining behavior. It thoroughly discloses the side effect of D12 auto-exclusion (networks silently added to custom-tagged port profiles, blackholing VLANs), explicitly states local validation with error naming, and notes the controller's enforcement of management-mode-specific schema. It also clearly indicates that field names are camelCase and there is no 'purpose' field, preventing common mistakes.
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 detailed but organized with clear sections: a one-line summary, field definitions, parameter requirements, and a distinct warning block. It front-loads the core purpose, then provides essential nested schema, then the critical behavioral warning. Every sentence earns its place, and the formatting makes it easy to scan.
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 that there is no annotation schema and the input schema is minimal, the description provides comprehensive information: the full required schema for the main management mode, optional fields, validation semantics, error behavior, and the D12 auto-exclusion side effect with remediation instructions. It fully equips an agent to construct a correct request and handle a known failure mode. The return output schema exists and includes a warnings entry, which is acknowledged.
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 input schema only lists host, site, and network_config as generic strings/objects with 0% description coverage. The description compensates by defining what each top-level field means (host: console name, ID, or composite ID; site: site name or ID), and provides the full nested schema for network_config when management='GATEWAY', including types for each field. It doesn't document every possible management mode, but it does explain the structure and optional fields for the main case.
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 'Create a new network/VLAN on a site' with the primary resource (network/VLAN) and context (site). It distinguishes this from sibling tools by specifying it creates a network as opposed to updating, deleting, or listing networks. The additional detail about management-mode-specific schema further clarifies the scope.
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 explicit when-to-use context: it details the required parameters (host, site, network_config), gives a concrete example of the GATEWAY management-mode schema, and warns about the D12 auto-exclusion behavior with specific remediation steps (run allow_network_on_port_profile). It also implicitly distinguishes this from update_network, delete_network, and list_networks by focusing on creation and the unique caveats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_port_forwardA
Create a port forwarding rule via the Classic REST API.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
payload: port forward config. Required fields (validated locally — a missing field
raises ValueError naming it): name, dst_port, fwd, fwd_port. proto is optional
(the controller defaults it, typically 'tcp_udp'). This Classic REST endpoint enforces
no required fields server-side (verified live: it accepts an empty body and silently
creates a broken rule), so the local check is the only guard.
Example: {"enabled": true, "name": "SSH", "pfwd_interface": "wan", "src": "any",
"dst_port": "2222", "fwd": "192.168.1.10", "fwd_port": "22", "proto": "tcp", "log": false}
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description makes critical behavioral details transparent: the local validation of required fields, the fact that the server-side endpoint enforces no required fields, and that an empty body would silently create a broken rule. It also notes the proto default. This is excellent risk disclosure, especially with no annotations provided.
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 well-structured and front-loaded: purpose, parameter definitions, behavioral warning, and a concrete example. Every sentence provides necessary information without filler. Despite being detailed, it remains efficient and scannable.
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 description covers all essential invocation details: how to specify host/site, the required payload structure, the important server-side validation gap, and a realistic example. Since an output schema exists, not detailing return values is acceptable. This is highly complete for a create operation with a nested object payload.
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 0%, so the description carries the full burden. It defines host, site, and payload semantics, lists the required payload fields (name, dst_port, fwd, fwd_port), explains that proto is optional with a default, and gives a complete example. This fully compensates for the schema's lack of description.
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's action: 'Create a port forwarding rule via the Classic REST API.' It specifies the verb (create), the resource (port forwarding rule), and the API context. This distinguishes it from sibling CRUD tools like update_port_forward and delete_port_forward based on the verb alone.
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?
There is no explicit guidance on when to use this tool versus alternatives. The description does not mention update_port_forward, delete_port_forward, or list_port_forwards, nor does it provide conditions for choosing this tool. The 'create' verb implicitly suggests usage for new rules, but the description leaves that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_radius_profileA
Create a RADIUS authentication profile.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. name: REQUIRED. Display name for the new RADIUS profile. auth_server_ip: REQUIRED. RADIUS authentication server IP address (string). auth_server_port: REQUIRED. RADIUS authentication server UDP port (integer, e.g. 1812). auth_server_secret: REQUIRED. Shared secret (string) for the RADIUS authentication server. acct_server_ip/port/secret: optional accounting server details. Note: if the console returns HTTP 405, RADIUS profile creation is not supported on this firmware version and profiles are effectively read-only. Use list_radius_profiles instead.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| site | Yes | ||
| acct_server_ip | No | ||
| auth_server_ip | Yes | ||
| acct_server_port | No | ||
| auth_server_port | Yes | ||
| acct_server_secret | No | ||
| auth_server_secret | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It warns that a 405 response means RADIUS profile creation is unsupported and profiles are read-only, which is a meaningful behavioral caveat beyond the basic 'create' action. It does not mention permissions or idempotency, but the provided failure-mode note is valuable.
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 efficiently structured: a clear opening line, a line-separated parameter list, and a brief fallback note. Every sentence adds usable information without redundancy or padding.
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 that an output schema exists and the parameter semantics are thoroughly covered, the description is complete for invocation. It clarifies required vs optional fields, host addressing, and includes a fallback instruction for an important edge case, making it self-sufficient for correct tool usage.
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 0%, so the description fully compensates by explaining all nine parameters: host format (console name, ID, or MAC:numericId), site as name/ID, required auth server fields, and optional accounting fields. It adds semantics not present in the schema, such as host allowed formats, port example (1812), and the shared secret purpose.
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 opens with 'Create a RADIUS authentication profile', clearly stating the verb and resource. It differentiates from sibling tools like list_radius_profiles and get_radius_profile by emphasizing creation, and the parameter list reinforces the action.
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 usage context is implied by the creation verb and parameter requirements, but the description goes further by stating that on HTTP 405 the tool should not be used and list_radius_profiles should be used instead. This explicitly gives an alternative and a specific when-not-to-use condition, though it does not broadly cover all sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rtsps_streamA
Create an RTSPS stream for a Protect camera.
host: console name, ID, or composite ID (MAC:numericId format).
qualities: list of channel names to enable. The exhaustive set is 'high', 'medium',
'low', and 'package' (verified live against get_rtsps_stream, which reports exactly
these four channel keys). 'package' exists only on package-camera doorbells; on other
cameras it is null. There is NO 'highest' channel. Case-insensitive — values are
normalized to lowercase before sending. The list is forwarded to the API as-is with
no local allow-list, so an unrecognised name is not validated here; the upstream
Protect API governs the outcome (a name with no matching channel yields no stream for
that entry rather than a local error).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes | ||
| qualities | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it discloses case-insensitive normalization, absence of local allow-list validation, upstream API authority over invalid channel names, and the special behavior of the 'package' channel. It stops short of discussing side effects or lifecycle of the created stream, but provides substantial behavioral context.
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 one-line purpose is front-loaded, and each parameter has a focused block of detail. Every sentence adds operational value; there is no filler or repetition of schema content.
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 output schema exists and no annotations are present, the description covers parameters and edge behavior thoroughly. Minor gaps remain around prerequisites, whether existing streams are replaced, and authentication expectations, but nothing critical is missing for invoking this tool.
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 0%, but the description fully compensates. It explains host formats, enumerates the valid qualities, clarifies case-insensitivity, documents the no-local-validation behavior, and tells the agent exactly where to obtain camera_id. This goes far beyond the bare input schema.
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 states a specific verb and resource: 'Create an RTSPS stream for a Protect camera.' This is clear and the create/get/delete distinction among siblings is obvious from the name, though the description itself does not explicitly contrast it with get_rtsps_stream or delete_rtsps_stream.
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?
Usage is implied by the verb 'Create' and the guidance to obtain camera_id from list_cameras. It references get_rtsps_stream as a verification source, but does not explicitly state when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_site_to_site_tunnelA
Create a site-to-site VPN tunnel. This is a write operation that modifies live config.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tunnel: tunnel configuration payload (remoteIp, psk, networks, enabled, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| tunnel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does state that this 'is a write operation that modifies live config,' which is a meaningful warning about real-world side effects. However, it does not disclose authentication requirements, idempotency, conflict behavior, or reversibility, leaving the profile incomplete.
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 compact and front-loaded: purpose first, behavioral warning second, parameter clarifications last. Every sentence contributes value with no filler. The inline parameter documentation at the end is slightly awkward as a run-on but remains appropriately sized for a three-parameter tool.
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 write operation with an output schema and no annotations, the description covers the core action, the side-effect warning, and parameter formats. It lacks prerequisites such as the site/host needing to exist, failure or validation behavior, and whether the tunnel payload is a full replacement or partial update. These gaps are notable but not fatal for a create operation.
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 0%, so the description must compensate, and it does meaningfully. It explains host as 'console name, ID, or composite ID (MAC:numericId format),' site as 'site name or ID,' and enumerates tunnel payload fields like remoteIp, psk, networks, and enabled. The 'etc.' signals non-exhaustive listing, so it stops short of fully specifying types and required subfields.
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 opens with a specific verb-resource pair, 'Create a site-to-site VPN tunnel,' which clearly identifies the action and resource. This distinguishes it from sibling tools like list_site_to_site_tunnels, update_site_to_site_tunnel, and delete_site_to_site_tunnel. The added 'site-to-site' qualifier also differentiates it from VPN server tools such as create_vpn_server.
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 offers no explicit guidance on when to use this tool versus alternatives, such as update_site_to_site_tunnel for modifying an existing tunnel or list_site_to_site_tunnels for inspection. The 'create' verb implies use only for new tunnels, but no prerequisites, exclusions, or alternative routing are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_traffic_matching_listA
Create a new traffic matching list on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Validated locally before the request (a missing field raises ValueError naming it):
a top-level type — the discriminator the controller validates first (verified live:
an empty body is rejected with Missing $.type value; observed value: 'PORTS').
traffic_list: for a PORTS list the live object also carries name (str) and
items (list). Note: the list field is 'items', not 'entries'.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| traffic_list | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does substantial work: it discloses local validation, ValueError behavior on missing fields, the required `type` discriminator, a live-verified rejection message, and the 'items' vs 'entries' naming trap. It does not cover authorization or side effects, but the disclosed behavior is unusually rich.
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 front-loaded with the core purpose and then uses compact labeled details for host, site, validation behavior, and traffic_list structure. It is slightly dense, but every sentence contributes useful information and there is no fluff.
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 nested-object create tool with 0% schema coverage, the description covers the essential call requirements: host/site identifiers, the `type` discriminator, the PORTS object fields, and the items/entries gotcha. The output schema exists, so return-value details are not required. Minor ambiguity remains about whether other `type` values besides 'PORTS' are supported, but the description is otherwise sufficient.
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 0%, so the description must compensate fully. It explains host formats (console name, ID, or composite ID), site naming, the required top-level `type` discriminator, and the PORTS-list shape with `name` and `items`. This adds meaning far beyond the bare schema with `additionalProperties: true`.
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 opens with a specific verb and resource: 'Create a new traffic matching list on a site.' This clearly distinguishes it from sibling read/update/delete operations and identifies the scope (a 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 clearly indicates this is for creating a new traffic matching list, which implies when to use it versus listing, updating, or deleting. It does not explicitly name alternatives or exclusion criteria, but the 'create' framing provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_traffic_routeA
Create a traffic route on a site (policy-based routing / WAN load-balancing).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. payload: required fields (validated locally — a missing field raises ValueError naming it — and verified against the live controller). This v2 endpoint uses snake_case wire field names (verified: 'network_id' is accepted, 'networkId' is not):
network_id (str): source network UUID (from list_networks), or 'ANY'
matching_target: 'INTERNET'|'ALL' or a traffic matching list ID
target_devices: the devices/networks the route applies to Optional: matching_target_type ('INTERNET'|'DOMAIN'|'IP_GROUP'), description (str).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses local validation raising ValueError, verification against the live controller, and the snake_case wire-format constraint with a concrete accepted/rejected example. It does not describe response behavior or side effects, but for a create operation the mutation is clear from the tool's name and first sentence.
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 dense but appropriately sized for a nested-object create tool. It front-loads the main verb and resource, then covers all parameters in an organized bullet-like layout. Every sentence adds useful information and there is no filler.
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 description covers the required payload and field naming in detail, but leaves some gaps: target_devices is not fully specified, the source of 'traffic matching list ID' is not pointed to, and no return/confirmation behavior is mentioned. These are relatively minor against the strong parameter-level detail and no output schema.
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 input schema provides only bare string and object types with 0% description coverage, and the description compensates thoroughly: it defines host, site, the required payload keys, accepted values, optional fields, and even warns that 'networkId' is not accepted. This is far beyond what the schema alone supplies.
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 and resource: 'Create a traffic route on a site' and immediately scopes it with '(policy-based routing / WAN load-balancing)'. This makes the tool clearly distinct from sibling tools like create_traffic_rule or create_traffic_matching_list.
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 tool's intended scenario is clear from the parenthetical scope and the payload guidance (e.g., 'network_id ... from list_networks'). It does not explicitly state when to prefer it over closely related create_traffic_rule, but it provides enough context that an agent can infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_traffic_ruleA
Create a traffic matching rule (QoS, block, or route by application/IP group).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. payload: required fields (validated locally — a missing field raises ValueError naming it — and verified against the live controller):
action: 'BLOCK'|'THROTTLE_RATE'|'QUEUE'
matching_target: 'INTERNET'|'LOCAL'|'ALL' or a traffic matching list ID
target_devices: the devices/networks the rule applies to (required by the API; previously undocumented) Optional (NOT required by the API): description (str), enabled (bool, controller defaults it), matching_target_type ('INTERNET'|'DOMAIN'|'IP_GROUP'|'APPLICATION_GROUP'), bandwidth_limit (dict with up_limit_kbps/down_limit_kbps for THROTTLE_RATE). Note: uses the Classic REST v2 API (/v2/api/site/{siteId}/trafficrules). May not exist on firmware 10.2.105 and below.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses significant behavioral details: local validation raises ValueError, live controller verification, target_devices is required by the API though previously undocumented, and a firmware version limitation. These go beyond the basic create semantics and help an agent anticipate errors and compatibility issues.
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 relatively long but every sentence carries unique information: purpose, parameter formats, required/optional fields, validation behavior, API endpoint, and compatibility note. The section is well-organized with bullet-like separations, making it scannable despite its length.
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 complexity (nested payload, many optional fields, validation behavior, firmware constraints), the description covers the essential knowledge needed to call it correctly. An output schema exists, so return values need not be described. Missing details like permission requirements or whether the rule is appended or replaces existing rules are minor given the richness present.
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 0%, so the description must fully explain parameters. It does: host (name/ID/composite ID), site (name/ID), and payload with a breakdown of required fields (action, matching_target, target_devices) and optional fields (description, enabled, matching_target_type, bandwidth_limit) including specific formats and API expectations. This completely compensates for the empty schema.
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 opens with a precise verb-object pair: 'Create a traffic matching rule' and specifies the rule types (QoS, block, or route by application/IP group). This clearly distinguishes the tool from siblings like create_traffic_route or create_firewall_policy by focusing on traffic-matching rules.
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 context on when the tool is applicable by noting that it uses the Classic REST v2 API and may not exist on firmware 10.2.105 and below. However, it does not explicitly state when to prefer this tool over alternatives like update_traffic_rule or delete_traffic_rule, nor does it mention prerequisites beyond providing host/site/payload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_vpn_serverB
Create a VPN server (OpenVPN, WireGuard, or L2TP).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. vpn_type: 'openvpn', 'wireguard', or 'l2tp'. subnet: VPN client address pool CIDR.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| site | Yes | ||
| subnet | No | ||
| enabled | No | ||
| vpn_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the creation action but does not disclose side effects, permissions required, idempotency, or failure modes. It is more of an action statement than a behavioral contract.
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 four short lines, front-loading the action and then listing parameter notes. Every segment adds information without filler, making it efficient and scannable.
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 presence of an output schema reduces the need to document return values. The description covers the operation and several key parameters, but it omits semantics for the required 'name' parameter and the 'enabled' flag, and provides no context on preconditions. For a create operation with no annotations, this is nearly complete but not fully.
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 0%, but the description adds useful meaning for host (name/ID/composite ID format), site (name/ID), vpn_type (enumerated values), and subnet (CIDR pool). However, it leaves the required 'name' and optional 'enabled' parameters undefined, which is a gap.
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 opens with a specific action 'Create a VPN server' and lists supported VPN types, clearly identifying the resource and operation. It distinguishes from sibling tools like update_vpn_server and list_vpn_servers via the 'Create' verb, though it does not explicitly name an alternative.
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 creating a VPN server, but provides no explicit guidance on when to use this tool versus update_vpn_server or delete_vpn_server, nor any exclusions. There is no mention of prerequisites such as host/site existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_wifi_broadcastA
Create a new WiFi broadcast SSID on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Validated locally before the request (a missing field raises ValueError naming it):
type — the discriminator the controller validates first (observed value:
'STANDARD'). The remaining fields are type-specific and enforced by the controller.
broadcast: for a STANDARD SSID also include: {'name': str (SSID name), 'enabled': bool,
'securityConfiguration': {...}, 'network': str, 'broadcastingFrequenciesGHz': [...]}.
Field names must be camelCase to match the UniFi Integration API.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| broadcast | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses important behavioral traits: local validation before the request, ValueError on missing fields, controller-first validation of the type discriminator, type-specific enforcement, and required camelCase field names. This goes well beyond a simple 'creates' statement and prepares the agent for validation and API syntax constraints.
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 compact and front-loaded. It starts with the purpose, then gives parameter formats and payload structure in a readable block. Each sentence adds value and there is no filler, though the payload formatting could be slightly tighter.
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 description covers the required identifiers, local validation, discriminator behavior, STANDARD payload keys, and camelCase requirement. Since an output schema exists, return value explanation is unnecessary. The only notable gap is not explicitly saying when not to use this tool (e.g., use update_wifi_broadcast for modifying an existing SSID), but for the creation use case it is sufficiently 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?
Schema coverage is 0%, so the description must compensate. It does add meaning for host, site, and broadcast, including the STANDARD payload fields and camelCase requirement. However, it does not fully enumerate all possible broadcast subfields for other types, leaving some semantics underspecified for the schema's empty 'broadcast' object.
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 begins with a specific verb and resource: 'Create a new WiFi broadcast SSID on a site.' It clearly distinguishes this from sibling tools like get_wifi_broadcast, update_wifi_broadcast, and delete_wifi_broadcast by focusing on creation. The purpose is unambiguous.
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 clear usage context by explaining required parameters, host/site format, and the broadcast payload shape for a STANDARD SSID. It doesn't explicitly list alternatives, but the creation verb and field guidance make it clear when to use this tool versus the sibling read/update/delete operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_acl_ruleA
Delete an ACL rule.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
rule_id: REQUIRED. The rule's id; obtain it from list_acl_rules (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| rule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only restates that the tool deletes an ACL rule; it does not say whether deletion is permanent, whether it affects rule ordering, what prerequisites exist, or what side effects may occur.
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 short and front-loaded: one sentence states the operation, and three compact notes document the parameters. There is no filler, and every sentence 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 three-string-parameter delete operation with an output schema present, the description covers all invocation essentials: operation, parameter semantics, requiredness, and ID source. It is not a 5 because, without annotations, it omits any statement about the destructive action's permanence or aftermath.
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 0%, but the description fully compensates by explaining host as a console name, ID, or composite ID, site as a name or ID, and rule_id as REQUIRED with a source instruction pointing to list_acl_rules. Every parameter receives functional meaning beyond the bare string type.
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 opens with a specific verb and resource, 'Delete an ACL rule,' which unambiguously defines the operation and distinguishes it from sibling tools such as list_acl_rules, get_acl_rule, update_acl_rule, and create_acl_rule. The purpose is immediately understandable and not a mere restatement.
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 clear when-to-use context by defining the operation as deletion and instructing the caller to obtain rule_id from list_acl_rules. It does not explicitly enumerate when-not-to-use alternatives such as update_acl_rule, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_arm_profileA
Delete an arm profile (DELETE /v1/arm-profiles/{id}). Irreversible — no undo.
host: console name, ID, or composite ID (MAC:numericId format).
arm_profile_id: REQUIRED. Obtain it from list_arm_profiles (its id field).
confirm: must be true to execute. Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No | ||
| arm_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and covers the destructive nature ('Irreversible — no undo'), the confirmation requirement, and the UNIFI_PROTECT_MUTATIONS_ENABLED guard. It doesn't discuss cascading side effects or permission requirements, but the critical delete semantics are disclosed.
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?
Four short lines, with the core action and the most important warning first. Parameter notes are one line each and contain only actionable details.
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 three-parameter destructive action, everything needed to call it correctly is present: endpoint, id source, confirmation flag, and the feature flag governing execution. An output schema exists, so return-value documentation isn't required and its absence doesn't hurt.
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 0%, and the description compensates fully: host's accepted formats (name/ID/composite MAC:numericId), arm_profile_id's required status and how to obtain it, and confirm's role plus the env-var gate. This is exactly the semantics missing from the schema.
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 opens with the verb and resource ('Delete an arm profile') and includes the HTTP endpoint, so an agent knows exactly what operation this is. It doesn't explicitly contrast with sibling operations like disable_arm or update_arm_profile, so it misses the top tier for sibling differentiation.
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?
It says deletion is irreversible and that confirm must be true, giving a clear precondition. It also tells the agent to source arm_profile_id from list_arm_profiles, but it never says when to prefer this over alternatives (e.g., disable_arm or update_arm_profile).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_device_tagA
Delete a device tag by ID. This permanently removes the tag from the site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tag_id: device tag ID to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| tag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This description states that the action 'permanently removes the tag from the site', which communicates irreversibility. With no annotations available, the description carries the burden of behavioral disclosure; it covers permanence but omits other important details such as required permissions, potential side effects on associated devices, or lack of confirmation prompts.
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 efficient: a one-sentence action with permanence note, followed by concise parameter definitions. No filler or redundant text; every sentence and line adds value.
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 simplicity and the presence of an output schema, the description is largely complete. It covers the action, permanence, and parameter formats. However, it lacks any note about permission requirements or what happens if the tag is in use, which could matter in an enterprise context, but these are minor given the straightforward delete operation.
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 input schema provides only names and types with 0% coverage, but the description compensates thoroughly by explaining each parameter: host as 'console name, ID, or composite ID (MAC:numericId format)', site as 'site name or ID', and tag_id as 'device tag ID to delete'. This adds significant meaning beyond the schema, giving the agent clear format and purpose guidance.
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 'Delete' with a clear resource 'device tag by ID' and adds the consequence 'permanently removes the tag from the site', which leaves no ambiguity about the operation. It distinguishes itself from create/update/list sibling tools through the explicit destructive verb and the word 'permanently'.
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 'Delete a device tag by ID', making it obvious this is for removing a tag. However, it provides no explicit guidance on when to use this tool versus alternatives like update_device_tag or list_device_tags, and does not mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_policyA
Delete a DNS policy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy_id: REQUIRED. The policy's id; obtain it from list_dns_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, yet it only repeats the destructive verb without stating consequences such as irreversibility, prerequisite policy state, or potential failures. It does not contradict the schema, but it fails to add meaningful behavioral context beyond the word 'Delete.'
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 short and front-loaded, with the action stated in the first sentence and parameter details in a compact list. Every clause adds useful information, with no filler.
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 description provides enough param semantics to call the tool and an output schema exists, so return-value documentation is not needed. However, the absence of behavioral warnings about deletion, and the incomplete 'REQUIRED' emphasis, leave gaps for a destructive operation with no annotations.
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?
Since schema description coverage is 0%, the description supplies valuable parameter guidance: host may be a console name, ID, or composite MAC:numericId, site is a name or ID, and policy_id is obtained from list_dns_policies. It could be clearer that all three parameters are required, given the schema lists all as required and only policy_id is marked REQUIRED.
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 first sentence, 'Delete a DNS policy,' uses a specific verb and resource, exactly matching the tool's purpose. Among many delete_* siblings, the DNS policy resource is unambiguous and distinct.
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 expected workflow by telling the agent to obtain policy_id from list_dns_policies. It does not explicitly state when not to use this tool or name alternatives, but no alternative deletion tool for DNS policies exists, so 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.
delete_firewall_policyA
Delete a firewall policy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy_id: REQUIRED. The policy's id; obtain it from list_firewall_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Delete a firewall policy' and does not mention that deletion is irreversible, what permissions are needed, whether associated rules are affected, or any side effects. This is a meaningful gap for a destructive operation.
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 compact and front-loaded: one clear purpose sentence followed by terse parameter guidance. There is no filler or repetition of schema field names without added value.
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 low complexity and the presence of an output schema, the description covers the essential calling details: what to delete, how to address host/site, and where to get the required policy_id. It is slightly incomplete only in that it omits any behavioral caution for a destructive action, but the core invocation context is present.
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 0%, so the description must compensate. It does: host is documented as console name, ID, or composite ID in MAC:numericId format; site as name or ID; and policy_id as required and sourced from list_firewall_policies. This adds real meaning beyond the bare string fields in the input schema.
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 opens with a specific verb and resource: 'Delete a firewall policy.' This clearly distinguishes it from sibling tools like create_firewall_policy, get_firewall_policy, update_firewall_policy, and patch_firewall_policy without needing to inspect their schemas.
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?
It gives context by explaining that policy_id must be obtained from list_firewall_policies via its id field, which tells the agent the prerequisite step. It does not explicitly state when to avoid this tool or list alternatives, but the use case is clear enough for a simple delete operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_firewall_zone_proxyA
Delete a firewall zone via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
zone_id: REQUIRED. Obtain it from list_firewall_zones_proxy (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It conveys that the operation deletes a resource, but fails to mention irreversibility, potential side effects, permissions needed, or failure conditions. This is a destructive operation, so more behavioral disclosure is warranted.
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 compact, front-loaded with the purpose, and uses a clear parameter breakdown. Every sentence adds value, and there is no redundant or verbose content.
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?
All required parameters are covered and the provenance of zone_id is explained; the presence of an output schema reduces the need to document return values. The description is complete enough for making the call, though a brief note on the destructive/permanent nature would strengthen it.
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 0%, and the description fully compensates by explaining each parameter: host accepts console name, ID, or composite ID (MAC:numericId format), site accepts name or ID, and zone_id is required and sourced from list_firewall_zones_proxy. This provides meaningful guidance beyond the raw schema.
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 states a specific action ('Delete a firewall zone') and the mechanism ('via connector proxy'), which clearly distinguishes it from sibling tools like list, get, or update firewall zone proxy. The resource and operation are unambiguous.
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 clearly instructs that zone_id is required and must be obtained from list_firewall_zones_proxy, providing an explicit prerequisite and source. It does not explicitly state when not to use this tool versus alternatives, but the delete-focused context makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_hotspot_operatorA
Delete a hotspot operator by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. operator_id: hotspot operator ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| operator_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It identifies the deleted resource but does not mention whether deletion is permanent, whether it cascades to other entities, what permissions are required, or what the response indicates. The parameter format hints add context, but they are not behavioral 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 two compact sentences, with the action front-loaded and parameter clarifications neatly separated. Every line adds value, and there is no redundant or filler content. It is an appropriate size for a simple three-parameter delete tool.
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 delete operation with three string parameters and an output schema present, the description gives enough parameter semantics to invoke the tool correctly. It explains the tricky host composite ID format and clarifies site and operator_id. The absence of behavioral and usage context is covered by other dimensions, but the basic invocation details are sufficiently 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 coverage is 0%, so the description must compensate, and it partially does. It explains that host accepts a console name, ID, or composite ID in MAC:numericId format, and that site accepts a name or ID. operator_id is defined only as 'hotspot operator ID,' which is nearly tautological, but the host composite format is genuinely useful beyond the bare schema.
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 opens with the specific verb and resource: 'Delete a hotspot operator by ID.' This clearly distinguishes the tool from sibling operations like update_hotspot_operator, create_hotspot_operator, and list_hotspot_operators. The resource and action are unmistakable.
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 no guidance about when to choose this tool over related alternatives, nor does it state prerequisites or conditions. It implies usage through the word 'Delete' but fails to mention exclusions, such as whether the operator must exist or what happens on failure. This is not enough to route an agent confidently among the many delete tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_hotspot_voucherA
Delete a single hotspot voucher.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
voucher_id: REQUIRED. Obtain it from list_hotspot_vouchers (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| voucher_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Delete' makes the destructive nature clear, but the description does not state whether deletion is permanent, require confirmation, or have side effects on dependent resources. Beyond naming the action, it offers no behavioral context.
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 compact and front-loaded with the action, followed by terse parameter definitions and a retrieval hint. Every sentence earns its place without redundancy.
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 3-parameter delete operation, the description covers all required inputs and tells the agent exactly where to source voucher_id. It omits any warning about irreversibility or permission requirements, but the presence of an output schema reduces the need to explain return values.
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 0%, so the description must compensate, and it does. It defines host as 'console name, ID, or composite ID (MAC:numericId format)', site as 'site name or ID', and explains that voucher_id is required and obtainable from list_hotspot_vouchers. This is meaningful semantic guidance beyond the raw string fields.
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 opens with a specific verb and resource pair: 'Delete a single hotspot voucher.' The word 'single' explicitly distinguishes this from the sibling bulk_delete_hotspot_vouchers, so an agent can immediately identify which tool matches the operation.
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?
It provides clear context for using the tool, including how to obtain the voucher_id from list_hotspot_vouchers. It does not explicitly mention when to prefer bulk_delete_hotspot_vouchers instead, but the 'single' framing gives enough implicit guidance for this simple deletion case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_networkA
Delete a network/VLAN.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
network_id: REQUIRED. Obtain it from list_networks (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| network_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Delete a network/VLAN' without elaborating on consequences such as irreversibility, cascading effects on associated objects, required permissions, or potential errors. While 'Delete' implies destructiveness, the description lacks any detail about the operation's side effects, making the behavior largely opaque. This is a significant gap for a mutating tool.
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 compact and efficient. Two sentences deliver the purpose and parameter semantics without any filler. The key action is front-loaded, and parameter explanations are concise and directly useful. 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?
While an output schema exists (so return values need not be described), the description omits critical context for a destructive operation. It does not mention whether deletion is permanent, whether there are safety checks, or what happens to networks in active use. Given the complexity of network management and the lack of annotations, the description should provide more operational context to avoid accidental misuse. It only covers parameter sourcing, not the operation's broader implications.
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 input schema provides only type information with no descriptions. The description compensates fully by explaining each parameter: host (with specific formats), site (name or ID), and network_id (required and how to obtain it). This is substantial added meaning beyond the schema, which is nearly useless alone. The guidance to use list_networks for the ID is particularly valuable.
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 begins with a clear, specific verb and resource: 'Delete a network/VLAN.' This makes the tool's purpose immediately obvious and distinguishes it from sibling tools like create_network, get_network, and update_network. The action and target are unambiguous.
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 clear context on how to use the tool by explaining the required parameters and directing users to list_networks to obtain the network_id. It implies usage ('when you want to delete, use this'), but it does not explicitly mention exclusions or alternative tools for scenarios like conditional deletion or bulk deletion. This is a clear context without formal exclusions, matching a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_port_forwardA
Delete a port forwarding rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
forward_id: REQUIRED. Obtain it from list_port_forwards (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| forward_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the deletion action and its target, which is transparent as far as it goes. However, it does not disclose consequences like irreversibility, effect on active traffic, or permission requirements. This is adequate for a simple delete tool but leaves some behavioral nuance unstated.
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 brief and well-structured: the action is front-loaded, and parameter details follow in a compact format. Every sentence adds value and there is no redundant or vague wording.
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 delete operation with three parameters, the description covers all parameter semantics and the source for the ID. An output schema exists, so return values need not be explained. It lacks explicit warnings about permanence or side effects, but that is a minor gap given the straightforward nature of the tool.
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 0%, but the description compensates well by defining all three parameters: host (name, ID, or composite MAC:numericId format), site (name or ID), and forward_id (required, obtained from list_port_forwards). This gives the agent everything needed to fill the parameters correctly.
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 opens with a clear verb and resource: 'Delete a port forwarding rule by ID.' It also references the sibling tool list_port_forwards for obtaining the ID, which helps distinguish it from create/update port forwarding 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?
It explicitly instructs the agent to obtain forward_id from list_port_forwards, indicating when it is appropriate to call this tool. It does not explicitly mention create/update alternatives, but the delete operation is self-evident and the source of the required ID is clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_rtsps_streamA
Delete an RTSPS stream for a Protect camera.
host: console name, ID, or composite ID (MAC:numericId format).
qualities: list of channel names to delete. The exhaustive set is 'high', 'medium',
'low', and 'package' (verified live; 'package' only on package-camera doorbells).
There is NO 'highest' channel. Case-insensitive — values are normalized to lowercase
before sending. Forwarded to the API as-is with no local allow-list; an unrecognised
name is not validated here and the upstream Protect API governs the outcome.
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes | ||
| qualities | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses key behaviors: case-insensitive normalization, no local allow-list with the upstream API governing unrecognized names, and channel availability caveats (package only on doorbells). It does not explicitly state irreversibility or permissions, but 'delete' implies destructive action. The added edge-case warnings go beyond a minimal description.
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 moderately lengthy but every sentence delivers essential detail. The primary action is front-loaded, followed by parameter-specific clarifications. There is no fluff or repetition, though the parameter block could be slightly more compact without losing 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?
For a delete operation with three parameters, the description covers all inputs, legitimate values, and a practical source for camera_id. It does not describe success/failure responses or state that the action is irreversible, but an output schema exists to define return values, and the destructive nature is implied by the tool's name. Overall, sufficient for an agent to invoke it 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 0%, so the description must fully compensate. It does: host formats are listed (console name, ID, composite ID), qualities includes the exhaustive set, explicitly excludes 'highest', explains case-insensitivity and forwarding behavior, and marks camera_id as required with a source instruction. Every parameter receives thorough, actionable meaning beyond the bare schema.
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 opens with a specific verb and resource: 'Delete an RTSPS stream for a Protect camera.' This clearly distinguishes it from siblings like get_rtsps_stream and create_rtsps_stream. The scope is well-defined and no ambiguity remains about what action is performed.
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 implicitly clarifies when to use the tool via the verb 'Delete' and provides concrete guidance such as sourcing camera_id from list_cameras. It does not explicitly name alternatives or state 'use this when you want to delete,' but the context is clear enough for an agent to select it correctly among many siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_site_to_site_tunnelA
Delete a site-to-site VPN tunnel by ID. This permanently removes the tunnel config.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tunnel_id: tunnel ID to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| tunnel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explicitly states 'permanently removes the tunnel config,' which is a critical transparency point for a destructive action. It does not cover every side effect (e.g., impact on active VPN traffic), but the permanent irreversibility is well conveyed.
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 compact and front-loaded: the primary action and object are in the first sentence, followed by a clear parameter list. No filler or redundant wording; every sentence 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 delete tool, this description is complete: it identifies the action, the irreversibility, and all three required parameters with enough semantic detail. The presence of an output schema means return value explanation is unnecessary, and the description provides what an agent needs to call the tool 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 description coverage is 0%, so the description must explain all parameters, and it does: host, site, and tunnel_id each get a concise meaning, including useful format details like 'composite ID (MAC:numericId format)' and 'site name or ID.' This goes well beyond the bare schema.
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 specific verb ('Delete'), resource ('site-to-site VPN tunnel'), and identifier ('by ID'), making the tool's purpose immediately obvious. It also adds 'permanently removes the tunnel config,' which reinforces that this is a destructive delete operation distinct from list/create/update siblings.
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 clear context: use this tool when you need to permanently delete a site-to-site VPN tunnel. It does not explicitly mention alternatives like update_site_to_site_tunnel, but the delete purpose is unambiguous and no exclusions or prerequisites are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_traffic_matching_listA
Delete a traffic matching list.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
list_id: REQUIRED. Obtain it from list_traffic_matching_lists (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| list_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states the delete action but omits critical details such as whether the deletion is permanent, whether related data is affected, permission requirements, or error conditions. This is a significant gap for a mutating operation.
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 and well-structured with no wasted words. It fronts the core action, then provides parameter details in a clean line-by-line format, making it easy to parse.
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 parameter guidance is strong and an output schema exists, the lack of behavioral context (e.g., irreversibility, permissions, side effects) makes the description incomplete for an agent deciding whether deletion is safe and appropriate. For a simple delete operation, this is acceptable but not thorough.
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 provides only type strings with 0% description coverage. The description compensates fully by explaining that host can be a name, ID, or composite ID, site can be a name or ID, and list_id is required and obtainable from the specific list endpoint. This gives an agent all necessary 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 starts with 'Delete a traffic matching list', which clearly states the action (delete) and the resource (traffic matching list). This distinguishes it from sibling tools like create_traffic_matching_list and list_traffic_matching_lists, so an agent can infer the operation without ambiguity.
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 explains how to obtain the required list_id (from list_traffic_matching_lists) and provides format details for host and site. It does not explicitly state when to use this tool over alternatives, but the 'delete' verb makes the use case obvious in the context of the sibling CRUD tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_traffic_routeA
Delete a traffic route by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
route_id: REQUIRED. Obtain it from list_traffic_routes (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| route_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden for behavioral disclosure. It states the action but does not mention permanence, consequences, idempotency, permissions, or side effects. For a destructive operation this is a meaningful gap.
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 compact and well-structured. The primary purpose is front-loaded, and parameter-level guidance is formatted clearly. Every sentence earns its place without repetition or filler.
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?
All three required parameters are described, the source of the identifier is provided, and an output schema exists so return-value documentation is unnecessary. The only missing context is behavioral caveats about deletion safety, which is already penalized in behavioral transparency.
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 0%, and the description fully compensates. It explains accepted formats for host and site, and explicitly tells the agent to obtain route_id from the id field of list_traffic_routes. This is exactly the semantic detail the raw schema lacks.
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 opens with a specific verb-resource pair: 'Delete a traffic route by ID.' The 'by ID' qualifier makes the operation unambiguous and distinguishes it from create/get/update traffic route siblings without requiring schema inspection.
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 clearly identifies the primary parameter context: host accepts console name/ID/composite ID, site accepts name/ID, and route_id must come from list_traffic_routes. It does not explicitly state when to use this over alternatives, but for a delete operation the purpose is sufficient and the source guidance is practical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_traffic_ruleA
Delete a traffic rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
rule_id: REQUIRED. The rule's id; obtain it from list_traffic_rules (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| rule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the deletion action but omits important context such as permanence, side effects (e.g., whether deleting a rule affects related policies), permission requirements, or the exact response behavior. The implicit destructiveness is clear from 'Delete', but the absence of explicit warnings or reversibility information leaves a gap.
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 and well-structured: one sentence for the core function, followed by parameter details. Every sentence adds value, with no fluff or repetition. The key action is front-loaded.
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 description covers parameter identification well, and the presence of an output schema may handle return values. However, given this is a destructive operation with no annotations, it lacks information about authentication prerequisites, error scenarios, or the scope of the deletion (e.g., whether it only deletes the rule or also impacts other entities). Some behavioral context is missing.
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 0%, but the description compensates fully by explaining each parameter: host formats (name, ID, or composite MAC:numericId), site as name or ID, and rule_id with a clear source and requirement. This goes beyond the bare schema and provides actionable semantic meaning.
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 begins with 'Delete a traffic rule by ID', specifying the verb, resource, and identification method. This clearly distinguishes it from sibling tools like list_traffic_rules, create_traffic_rule, and update_traffic_rule based on the operation and target.
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 practical guidance on how to obtain the rule_id (from list_traffic_rules), which is useful for the calling context. However, it does not explicitly state when to use this tool versus other delete tools (e.g., delete_traffic_route, delete_acl_rule) or mention any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_vpn_serverA
Delete a VPN server by ID. WARNING: Permanently removes VPN server. Connected clients will lose access immediately.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. server_id: VPN server ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| server_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It explicitly warns 'Permanently removes VPN server' and 'Connected clients will lose access immediately,' covering irreversibility and immediate impact. It does not mention permissions or rollback, but it effectively discloses the critical characteristics of this destructive operation.
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 efficient and well-structured: a warning is front-loaded, followed by a compact parameter list. Every sentence adds value, and there is no filler.
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 destructive action with three required parameters and an output schema (not shown), the description covers purpose, permanence, immediate effect, and parameter meanings. The main gaps are absence of explicit alternative routing and the unexplained necessity of host/site context, but the core information needed to invoke the tool correctly is present.
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 0%, so the description must compensate. It does by explaining all three parameters: host as console name/ID/composite ID (MAC:numericId), site as site name/ID, and server_id as VPN server ID. This adds meaning beyond the bare string type. However, it doesn't clarify why host and site are required when deleting 'by ID' or how they relate to server_id.
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 states the exact action and target: 'Delete a VPN server by ID.' The warning reinforces the destructive nature, and the resource is explicitly identified as a VPN server. This clearly distinguishes it from related VPN server tools like list_vpn_servers, get_vpn_server, create_vpn_server, and update_vpn_server.
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 want to permanently remove a VPN server—but it does not explicitly state when to use this vs alternatives such as update_vpn_server for disabling or unconfiguring. No 'when not to use' or alternative routing is provided; the guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_wifi_broadcastA
Delete a WiFi broadcast SSID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
broadcast_id: REQUIRED. Obtain it from list_wifi_broadcasts (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| broadcast_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Delete' but does not mention irreversibility, whether associated clients/networks are affected, permission requirements, or any side effects beyond the delete operation itself.
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 short and front-loaded with the core purpose. Parameter explanations are compact and provide maximum useful information with minimal 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 three-parameter delete operation, the description effectively covers all parameter semantics and the source of the key ID. The only gap is the absence of behavioral caveats such as permanence or side effects, which are especially relevant for a destructive action with no annotations.
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 0%, and the description fully compensates by explaining each parameter: host accepts a console name, ID, or composite ID with format details; site accepts a name or ID; broadcast_id is marked REQUIRED with a source instruction to fetch it from list_wifi_broadcasts.
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?
States the specific action and resource: 'Delete a WiFi broadcast SSID.' This clearly distinguishes it from sibling tools like list_wifi_broadcasts, get_wifi_broadcast, create_wifi_broadcast, and update_wifi_broadcast.
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 clear context for when to use the tool: when deleting a WiFi broadcast. It also gives actionable guidance by instructing the agent to obtain broadcast_id from list_wifi_broadcasts. It does not explicitly mention when not to use it, but the operation is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detach_carrier_subscriber_hostA
Detach a subscriber's gateway host (DELETE .../subscribers/{id}/host). Guarded write.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Guarded: read-before, no-op when no host is attached, confirm=true, write kill-switch, read-after (reports the just-detached prev_host_id).
subscriber_id: the subscriber UUID from list_carrier_subscribers. confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the write nature, the guard sequence (read-before, write kill-switch, read-after), the no-op edge case, the confirm=true requirement, and that it reports the just-detached prev_host_id. It even discloses the testing limitation, which is unusually transparent.
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 front-loaded with a one-line purpose and endpoint, then compactly groups behavioral guards and parameter notes. Every sentence contributes useful information, and the structure makes the guarded-write behavior easy to parse without unnecessary verbosity.
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 mutation tool with no annotations and 3 parameters, the description covers the operation, edge cases, confirmation requirement, parameter semantics, and the read-after output hint. Since an output schema is present, return values do not need to be spelled out in the description. Nothing essential for correct invocation is missing.
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 0%, but the description fully compensates by explaining all three parameters: subscriber_id's provenance, confirm's must-be-true requirement, and key_label's optional API-key routing purpose. This adds meaning well beyond the raw schema types and defaults.
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 operation with a specific verb ('Detach'), names the resource ('a subscriber's gateway host'), and includes the REST DELETE endpoint. This distinguishes it from attach_carrier_subscriber_host and other carrier-subscriber operations among the siblings.
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 clear context: it is a guarded write to detach a host, uses a subscriber_id sourced from list_carrier_subscribers, and behaves as a no-op when no host is attached. It does not explicitly name the attach counterpart as the alternative, but the purpose and endpoint make the detach scenario unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_armA
Disable the arm alarm (POST /v1/arm-profiles/disable). Disarms the system.
WARNING: physical side effects; requires a local Alarm Manager. host: console name, ID, or composite ID (MAC:numericId format). confirm: must be true to execute. Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral disclosure burden. It does well by warning that the operation has physical side effects, requires a local Alarm Manager, and is gated by an environment variable. It does not detail failure modes or permissions, but the essential risk profile is disclosed.
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 compact and front-loaded: the action and endpoint come first, followed by the critical warning and parameter clarifications. Every sentence adds value, and there is no redundant or filler content.
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?
An output schema exists, so return-value details are not the description's job. The description covers the tool's purpose, prerequisites, safety warning, environment gating, and both parameters. Given the tool's mutation nature and physical side effects, this is complete enough for an agent to invoke it 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 0%, so the description is the only source of parameter meaning. It clearly explains that host accepts a console name, ID, or composite ID in MAC:numericId format, and that confirm must be true to execute. This fully compensates for the sparse schema.
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 ('Disable') and resource ('arm alarm'), and immediately clarifies the action as 'Disarms the system.' It is clearly distinct from sibling tools like enable_arm, since it states the disabling operation and the exact endpoint.
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 concrete usage conditions: it requires a local Alarm Manager, warns of physical side effects, and states that confirm must be true and that execution is governed by UNIFI_PROTECT_MUTATIONS_ENABLED. It does not explicitly mention alternatives such as enable_arm, but the context is clear enough for an agent to decide when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_camera_mic_permanentlyA
Permanently disable the microphone on a Protect camera. This cannot be undone.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and clearly warns that the action is permanent and cannot be undone. It also specifies host formats. However, it does not mention required permissions or potential side effects on camera operation, but the core destructive behavior is transparent.
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 extremely concise: first sentence states the action and permanence, second sentence provides the critical warning, then parameter guidance follows. Every sentence earns its place with no filler.
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 two-parameter tool, the description is nearly complete: it covers the action, irreversibility, parameter formats, and provenance. It lacks explicit alternative routing and output/response details, but the output schema exists and is not required to be explained. Overall adequate for the tool's complexity.
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 0%, so the description must explain parameters. It does: host is described as 'console name, ID, or composite ID (MAC:numericId format)' and camera_id is marked REQUIRED with instructions to obtain it from list_cameras. This is practical and compensates for the bare schema.
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 states a specific action: permanently disable the microphone on a Protect camera. The verb 'disable' and resource 'microphone' are clear, and the permanent aspect is explicitly highlighted, distinguishing it from any temporary mute or update operation.
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 explains how to obtain the parameters (host formats, camera_id from list_cameras) but does not explicitly state when to use this tool versus alternatives like update_camera, nor does it mention any conditions or prerequisites beyond the permanent nature. Some guidance is provided, but no comparative usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_armA
Enable the arm alarm using the selected profile (POST /v1/arm-profiles/enable).
WARNING: arms the alarm system (physical side effects); requires a local Alarm Manager. host: console name, ID, or composite ID (MAC:numericId format). confirm: must be true to execute. Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It includes a WARNING about 'physical side effects' of arming the alarm, and discloses the dependency on a local Alarm Manager and the mutation flag. This goes beyond the schema to inform the agent of consequences and prerequisites.
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 and well-structured: a one-line purpose, then a warning and parameter explanations. All sentences add value with no redundancy.
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 description covers purpose, physical side effects, prerequisites, and parameter semantics. The output schema exists, so return details are covered elsewhere. Minor ambiguity about how the 'selected profile' is determined, but the description is otherwise complete for a 2-parameter mutation.
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 0%, but the description explains both parameters: host format ('MAC:numericId') and confirm's role ('must be true to execute'). This fully compensates for the schema's lack of property descriptions.
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: 'Enable the arm alarm using the selected profile' and includes the exact endpoint. It distinguishes itself from sibling tools like 'disable_arm' and the arm-profile CRUD operations by focusing specifically on the arming action.
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?
It provides clear preconditions: 'requires a local Alarm Manager' and 'confirm: must be true to execute', and notes that it is 'Governed by UNIFI_PROTECT_MUTATIONS_ENABLED'. It does not explicitly mention alternatives like 'disable_arm', but the context makes the appropriate use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exclude_network_on_port_profileA
Atomically exclude (untag) a VLAN network from a switch port profile.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
profile_id: REQUIRED. The port profile id; from list_port_profiles (its _id).
network_id: REQUIRED. The networkconf id to exclude; from list_networks (its id).
confirm: must be True to execute. This is a live PUT to a SHARED port profile
(its exclusion list affects every switch port using it); it refuses with an
error dict when confirm is False, before any controller call.
Inverse of allow_network_on_port_profile: fresh-reads the profile, adds
network_id to excluded_networkconf_ids, PUTs, and returns
{profile, tagged_networks} with names resolved.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| confirm | No | ||
| network_id | Yes | ||
| profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses atomicity, that this is a live PUT to a shared port profile, the impact on all switch ports using it, the confirmation guard, and the exact return value with names resolved. This is rich behavioral context well beyond a generic mutation.
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?
Every sentence contributes: opening summary, parameter meanings, validation requirement, shared-profile impact, and the inverse relationship with its behavior. The structure front-loads the core action and then details execution and consequences, with no filler.
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?
An output schema exists, so return details are not required in the description, but it still outlines the returned structure. It covers parameter origins, the mandatory confirm flag, side effects on shared resources, and the inverse operation. Nothing an agent needs to call it correctly is missing.
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 0%, but the description explains every parameter: host/site formats, profile_id source (list_port_profiles _id), network_id source (list_networks id), and confirm requirement. It fully compensates for the schema's lack of descriptions.
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 operation: 'Atomically exclude (untag) a VLAN network from a switch port profile.' The verb 'exclude' and the resource 'VLAN network' from 'switch port profile' precisely define the action. It also names the inverse sibling tool, which helps differentiate its 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?
The description provides explicit operational details: confirm must be True to execute, and it refuses with an error dict when False. It also references the inverse tool, allow_network_on_port_profile, guiding when they'd be used. However, it does not explicitly state 'when not to use' scenarios beyond the inverse relationship.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_client_actionB
Execute a client action (block, unblock, reconnect).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
action: must include: {'action': str}. Common commands: {'action': 'block'},
{'action': 'unblock'}, {'action': 'reconnect'}.
client_id: REQUIRED. Obtain it from list_clients (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| action | Yes | ||
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing side effects. It names mutating actions like block and unblock, which imply state changes, but it does not state consequences such as loss of network access, reversibility, or required permissions. The command examples are useful but do not reveal behavior beyond the action field.
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 compact, front-loads the purpose, and organizes parameter guidance with labels. Every sentence adds operational detail and there is no filler or redundancy.
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?
All parameters are documented with useful formats and sourcing, and the output schema covers return values. However, the description omits tool-selection context among siblings and does not state the operational impact of the actions, so an agent cannot fully anticipate side effects or choose correctly between this and dedicated client-action tools.
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 0%, and the description fully compensates: it defines host as name/ID/composite MAC:numericId, site as name or ID, action as an object with an 'action' string key and common commands, and client_id as REQUIRED with an explicit source (list_clients). This adds essential meaning to all four otherwise bare string/object 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?
The description states a specific verb ('Execute'), a resource ('client action'), and enumerates common actions (block, unblock, reconnect). However, it does not differentiate this generic tool from the dedicated sibling tools block_client, unblock_client, and reconnect_client, leaving the agent unsure why the generic variant exists.
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?
There is no guidance about when to use this tool versus the specialized sibling tools. The description only explains parameter formats and required fields; it never states a preferred use case, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_device_actionA
Execute a device action (restart, upgrade, locate, etc.).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
action: must include: {'action': str}. Common commands: {'action': 'restart'},
{'action': 'adopt'}, {'action': 'force-provision'}. Valid commands vary by device type.
device_id: REQUIRED. Obtain it from list_devices (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| action | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It does reveal that actions must be command objects, lists common commands, and warns that valid commands vary by device type. However, it omits side effects, permission requirements, reversibility, and response behavior for a mutation-capable action tool.
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 front-loaded with purpose and uses a compact breakdown of parameters without filler. It earns its length, though the parameter notes could be slightly better structured.
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 core call requirements are covered, and an output schema exists so return values need not be described. However, it leaves selection ambiguity among sibling action tools and does not address action support by device type or error/failure behavior, making it 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?
Schema description coverage is 0%, and the description fully compensates by explaining host formats (console name, ID, composite MAC:numericId), site formats, the required action object structure, and the source of device_id. Every parameter receives meaningful guidance beyond the bare schema types.
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 and resource: 'Execute a device action' with concrete examples like restart, upgrade, and locate. However, it does not differentiate this generic tool from dedicated sibling tools such as restart_device, locate_device, and upgrade_device.
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 prerequisites like obtaining device_id from list_devices and notes that valid commands vary by device type, but it provides no guidance on when to use this generic executor versus more specific action tools. There are no explicit alternatives or exclusions, leaving tool selection ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_port_actionA
Execute a port action on a device interface.
OPERATIONAL-ACTION-ONLY, NOT A CONFIG WRITER: this Integration port-actions endpoint performs a transient operational action; it does NOT persist port configuration. A PoE power cycle ({'action': 'power-cycle'}, canonical id POWER_CYCLE) is the only valid action -- it powers a PoE port off and back on (only meaningful on PoE-capable ports). Config-style actions such as {'action': 'set-poe-mode', ...} are rejected by the controller with HTTP 400 'unknown-type-id' and leave the port unchanged (verified live). Do NOT use this to set PoE mode, STP, VLAN, or any persistent port setting -- there is no confirmed per-port persistent-config writer on this API; a shared Ethernet Port Profile (update_port_profile) is a different, wide-blast-radius surface.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
port_idx: port index number (1-based, matching the switch's physical port numbering).
action: the port-action payload, shape {'action': str}, forwarded verbatim to the
UniFi Network Integration API port-actions endpoint. 'power-cycle' (POWER_CYCLE)
is the one valid, documented action; other values return HTTP 400
'unknown-type-id' from the controller.
device_id: REQUIRED. Obtain it from list_devices (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| action | Yes | ||
| port_idx | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the transient/non-persistent nature, the exact behavior of the only valid action, HTTP 400 responses for invalid actions, and that the port remains unchanged. It also flags PoE-capability as a prerequisite.
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 long but front-loaded with the critical operational-vs-config warning and organized into an overview followed by parameter details. The valid-action and HTTP-400 details are repeated, but the redundancy reinforces the most important constraint rather than becoming noise.
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 annotations and a minimal schema, the description provides everything needed for a correct call: the only valid action, invalid-action behavior, device_id source, and warnings against persistent config use. With an output schema present, return-value documentation is not required.
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 0%, but the description compensates fully by documenting all five parameters: host formats, site, 1-based port_idx, the exact action payload shape, and the required device_id with its source. No parameter is left unexplained.
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 states a specific operation, 'Execute a port action on a device interface', and immediately distinguishes it as operational-only, not a config writer. It also names the only valid action, power-cycle, and contrasts with update_port_profile, making sibling differentiation 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?
It explicitly says when to use the tool: PoE power cycle is the only valid action. It also lists when not to use it (set-poe-mode, STP, VLAN) and points to update_port_profile as a different, broad-blast-radius alternative. device_id provenance from list_devices is also given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fabric_connector_deleteA
Relay a DELETE through the Fabric connector. MUTATION — GATED, IRREVERSIBLE.
Refused unless BOTH confirm=true AND UNIFI_ENABLE_CONNECTOR_WRITE are set. DELETE has a GET twin, so the resource is read before and after; a successful delete makes the read-after return a 4xx, which the result records. There is no undo — confirm the exact resource path before enabling.
See fabric_connector_get for host/path/site/scope semantics. body: optional JSON body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| host | Yes | ||
| path | Yes | ||
| site | No | ||
| scope | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses critical behavior: the operation is gated (confirm=true and UNIFI_ENABLE_CONNECTOR_WRITE), irreversible with no undo, and performs a read-before-and-after to verify deletion via a 4xx response. These details provide far more than the annotations could have, giving the agent a clear safety profile.
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 dense and efficient, front-loading the most critical facts (MUTATION, GATED, IRREVERSIBLE) in the first line. Every sentence adds essential value: gating conditions, the read-after behavior, the no-undo warning, and a pointer to shared semantics. There is no filler or redundancy.
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 annotations and a complex destructive operation, the description covers all necessary context: safety gating, irreversibility, read-after verification, and parameter semantics via reference. The presence of an output schema handles return values, so the description is complete for making an informed call.
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 0%, so the description compensates by explaining the confirm parameter's gating role and noting body is optional. It also refers to fabric_connector_get for host/path/site/scope semantics, adding meaning to those parameters. While not deeply describing each parameter, it provides enough direction to understand their purpose.
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 'Relay a DELETE through the Fabric connector' with a specific verb and resource, and explicitly marks it as MUTATION. It distinguishes itself from siblings by naming the GET twin and referencing fabric_connector_get semantics, making its purpose unmistakable.
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 clear context for use: it is a destructive, gated operation requiring explicit confirmation and an environment flag. While it does not explicitly say 'use this when you want to delete', the DELETE verb and references to the GET twin strongly imply when it applies. It lacks an explicit exclusion list, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fabric_connector_getA
Relay a GET through the official Fabric connector to a console's /proxy/.
The escape hatch for a controller-supported route that has no typed tool yet. Always
available — GET needs no confirm. A 4xx/5xx is returned as status (not raised), so
a probe of an unknown route surfaces its own reachability status.
host: console name or ID (resolved to the owning API key + host id via the Registry).
path: the relay-relative application path AFTER /proxy/ — e.g.
network/integration/v1/sites or network/api/s/{site}/stat/device. Use the
{site} (slug) or {site_id} (UUID) placeholder for the site segment; the
server resolves and substitutes it (raw host/site ids and API keys never appear on
the tool surface). Only approved UniFi application namespaces are allowed (Network
integration/classic/v2, Protect integration/private, InnerSpace integration/legacy,
Access); .., %-encoding, and control characters are rejected.
site: site name or UUID — REQUIRED only when path contains a site placeholder.
params: optional query-string parameters.
scope: optional 'device' / 'site' / 'global' — cross-checked against the path so a
device route cannot be confused with a site-global setting route.
Returns {method, routeClass, path, resolvedPath, status, body} (body credential-redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| path | Yes | ||
| site | No | ||
| scope | No | ||
| params | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is exceptionally transparent about behavioral traits beyond any structured annotations: it explains that 4xx/5xx responses are returned as status rather than raised, that host resolves through the Registry, that the server substitutes site placeholders, and that credential-redaction occurs in the body. It also lists validation restrictions on paths and namespaces, which are critical for an escape-hatch tool.
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 thorough and front-loads the core mechanism before parameter details. It is somewhat long, but virtually every sentence contributes necessary operational or security context; the only minor reduction would be trimming redundancy in the namespace list.
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 a complex escape-hatch tool with 5 parameters, no annotations, 0% schema coverage, and a variety of route scenarios, the description fully covers invocation requirements, validation guardrails, return shape, and the parenthetical credential-redaction behavior. It leaves no ambiguity about required versus optional fields or when the tool should be chosen.
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 provides zero description coverage (0%), so the description must fully compensate; it does so with detailed semantics for host, path (including placeholder format and restrictions), site (conditional requirement), scope (cross-checking behavior), and params. It even gives concrete route examples and notes credential redaction in the return body.
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 it relays a GET through the official Fabric connector to a console's /proxy/<path>, explicitly identified as the escape hatch for controller-supported routes lacking typed tools. These details immediately distinguish it from typed siblings and the other fabric_connector_* verbs.
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?
Explicitly frames the tool as the fallback when no typed tool exists, reinforces that it is always available, and provides concrete path prefix examples that clarify its role relative to declarative siblings like get_site_inventory or get_network_application_info. It also conditions site usage on path placeholders, distinguishing when parameters are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fabric_connector_patchA
Relay a PATCH (partial update) through the Fabric connector. MUTATION — GATED.
Refused unless BOTH confirm=true AND UNIFI_ENABLE_CONNECTOR_WRITE are set. PATCH has a
GET twin, so read-before/write/read-after with noOp detection applies (see
fabric_connector_put). The candidate legacy InnerSpace save route
(innerspace/api/shapes/{id}) is a PATCH; probe it with a nonexistent shape ID and an
empty/invalid body first — a 4xx is reachability evidence, and a 200/204 on such a probe
is a stop condition, not a success. EXPERIMENTAL until persistence/rollback are proven.
See fabric_connector_get for host/path/site/scope semantics. body: the JSON request body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| host | Yes | ||
| path | Yes | ||
| site | No | ||
| scope | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that this is a gated mutation, requires a specific environment variable, is experimental, and follows a read-before/write/read-after pattern with noOp detection. It also warns that a 200/204 on a probe is a stop condition, not a success. This is exemplary behavioral disclosure for a high-risk operation.
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 dense but every sentence carries safety- or usage-critical information. It front-loads the core action and mutation status, then logically progresses through gating, operational pattern, probe instructions, and references. The only minor issue is slight redundancy between 'MUTATION — GATED' and the explicit refusal condition, but this emphasis is justified for a destructive operation.
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 complexity and risk, the description covers all needed context: gating requirement, environment variable, experimental status, read-before/write/read-after pattern, noOp detection, legacy route probing, and pointer to shared semantics. An output schema exists, so return value details are not required. The agent has enough to decide whether and how to call this tool safely.
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 0%, so the description must compensate. It explains 'body: the JSON request body' and that confirm must be true. For host/path/site/scope, it explicitly defers to fabric_connector_get, which is acceptable reuse of shared semantics. While not every parameter is described inline, the delegation and key requirements give an agent enough to understand the 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?
The description opens with a specific verb and resource: 'Relay a PATCH (partial update) through the Fabric connector.' It clearly identifies the operation as a mutation and distinguishes it from siblings by naming the GET twin and pointing to fabric_connector_put and fabric_connector_get. This gives an agent a precise understanding of what the tool does and how it differs from related 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?
The description gives explicit conditions: 'Refused unless BOTH confirm=true AND UNIFI_ENABLE_CONNECTOR_WRITE are set.' It also explains the read-before/write/read-after pattern and defers to fabric_connector_get for host/path/site/scope semantics. It even provides a probing procedure for the legacy route, including a stop condition. This is far beyond minimal usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fabric_connector_postA
Relay a POST (create/command) through the Fabric connector. MUTATION — GATED.
Refused unless BOTH confirm=true AND the server's UNIFI_ENABLE_CONNECTOR_WRITE flag are
set (fail-closed; gating is checked before any network call). POST targets a collection
or command route (e.g. network/api/s/{site}/cmd/...); it has no GET twin, so no
read-before/after is performed. The upstream status/body (redacted) and routeClass are
returned; a 4xx/5xx is reported, not raised.
See fabric_connector_get for host/path/site/scope semantics. body: the JSON request body. Every attempt is written to the structured audit log (never the API key value).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| host | Yes | ||
| path | Yes | ||
| site | No | ||
| scope | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden, and it does so exceptionally. It discloses that the call is a mutation, that it is fail-closed and gated on both confirm=true and the server's UNIFI_ENABLE_CONNECTOR_WRITE flag, that gating is checked before any network call, that errors are reported rather than raised, and that attempts are audited without logging the API key.
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 compact, front-loaded with the critical mutation/gated warning, and every sentence earns its place. It packs gating, fail-closed behavior, route targeting, response handling, audit logging, and a cross-reference into a short block without redundancy.
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 mutation tool with no annotations but an output schema, the description covers the essential decision factors: whether the operation may be performed, how the confirm flag is used, what happens on errors, and what side effects occur. The output schema covers return fields, so the description's brief mention of status/body/routeClass is sufficient.
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 0%, so the description must compensate. It defines body as the JSON request body, explains the confirm parameter's gating role, and gives a path example with site embedded in the route. Host, path, site, and scope are delegated to fabric_connector_get, which is a useful pointer but slightly indirect for a self-contained parameter explanation.
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 opens with a specific verb and resource: 'Relay a POST (create/command) through the Fabric connector' and immediately labels it 'MUTATION — GATED.' It clearly distinguishes this from the GET twin by stating the POST has no read-before/after behavior and pointing to fabric_connector_get for shared semantics.
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 clear context for when this tool is appropriate: POST-style create/command routes, with explicit gating requirements and the note that there is no GET twin. It references fabric_connector_get for host/path/site/scope semantics, though it does not explicitly contrast this with fabric_connector_put, fabric_connector_patch, or fabric_connector_delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fabric_connector_putA
Relay a PUT (full replace) through the Fabric connector. MUTATION — GATED.
Refused unless BOTH confirm=true AND UNIFI_ENABLE_CONNECTOR_WRITE are set. PUT has a GET
twin at the same resource path, so the resource is read BEFORE and AFTER the write and
the result carries readBefore / readAfter / noOp (diff-based: a same-value write is
flagged noOp=true). Use this for reversible per-device config probes (e.g. Classic REST
network/api/s/{site}/rest/device/{id}); scope='device' guards against selecting a
site-global setting route. EXPERIMENTAL for undocumented legacy routes until persistence
and rollback are proven live.
See fabric_connector_get for host/path/site/scope semantics. body: the JSON request body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| host | Yes | ||
| path | Yes | ||
| site | No | ||
| scope | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, but the description fully discloses behavioral traits: the tool is gated and refused unless both confirm=true and UNIFI_ENABLE_CONNECTOR_WRITE are set; it does a read-before and read-after the write; the result carries readBefore / readAfter / noOp, with a diff-based noOp flag for identical writes; and it is marked EXPERIMENTAL for undocumented legacy routes until persistence and rollback are proven live.
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 compact yet information-dense, leading with the core action and safety gate, then the read-before/after behavior, then an example usage, then a scope guard, then the experimental caveat, and finally a pointer to the sibling for parameter semantics. Each sentence earns its place without repetition.
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 generic relay tool with no annotations, it covers the critical operational context: mutation risk, gating requirements, scope guard, experimental status, and where to find parameter semantics. It also references an output schema to handle return values, so nothing necessary for an agent to safely invoke it is missing beyond the cross-referenced sibling 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 0%, so the burden is on the description. It explains that host/path/site/scope semantics are covered by sibling fabric_connector_get and that 'body' is the JSON request body. It names the confirm parameter as a required safety gate. It does not individually document each parameter with syntax details, but combined with the cross-reference, it provides enough meaning for a generic relay tool.
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 explicitly states 'Relay a PUT (full replace) through the Fabric connector' and differentiates it from 'fabric_connector_get', 'fabric_connector_post', 'fabric_connector_patch', and 'fabric_connector_delete' siblings. It also clarifies that PUT has a GET twin at the same resource path, making its purpose distinct from other mutation 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?
It gives explicit when-to-use guidance: 'Use this for reversible per-device config probes' with an example, and defines exclusion constraints ('scope='device' guards against selecting a site-global setting route', 'Refused unless BOTH confirm=true AND UNIFI_ENABLE_CONNECTOR_WRITE are set'). It also cross-references fabric_connector_get for host/path/site/scope semantics, clearly routing the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountA
Get a single RADIUS account by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. account_id: RADIUS account ID. Returned verbatim, including plaintext x_password credential fields.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| account_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It notably warns that the response is returned verbatim and includes plaintext x_password credential fields, which is critical security-sensitive behavior. It doesn't mention other behaviors like permissions required or potential errors, but the key sensitive disclosure is present.
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 compact and front-loaded: the core purpose is stated in one sentence, followed by concise parameter clarifications and a brief security note. Every sentence earns its place with no redundant or filler content.
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 description provides essential information for invocation: parameter formats and a warning about returned credentials. It lacks explicit info about the return structure (though 'returned verbatim' hints at it) and error conditions, but given the tool's simplicity and the sensitive data disclosure, the coverage is adequate but not exhaustive.
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 0%, so the description must compensate. It does so thoroughly: each parameter (host, site, account_id) is explained with acceptable formats, including the composite ID format for host. This adds significant meaning beyond the bare schema types.
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 'Get a single RADIUS account by ID', specifying the resource (RADIUS account) and the operation (get by ID). This distinguishes it from list_accounts and other getters for different resources. However, it does not explicitly contrast with sibling tools like list_accounts, so it falls short of a 5.
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 a single account when you know its ID, host, and site. It does not state when to use this tool versus alternatives like list_accounts or get_radius_profile, nor does it mention exclusions. The context is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_acl_ruleA
Get a single ACL rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
rule_id: REQUIRED. The rule's id; obtain it from list_acl_rules (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| rule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and 'Get' signals a read-only operation with no side effects. However, it does not explicitly confirm that no configuration changes are made or explain not-found/error behavior, leaving some behavioral details to inference.
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?
Three short lines with no filler: the purpose is front-loaded, and the parameter notes are directly useful. Every sentence 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 three-parameter getter, the description covers what the tool does, how to identify the host/site/rule, and where to get the rule ID. Since an output schema exists, return-value documentation is not required, and no critical calling information is missing.
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 only shows three string fields with no descriptions, but the description explains exact accepted formats for host (console name, ID, or MAC:numericId), site (name or ID), and rule_id (required, sourced from list_acl_rules). This fully compensates for the 0% schema coverage and adds actionable guidance.
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 states a specific operation ('Get a single ACL rule by ID') on a distinct resource ('ACL rule'), which separates it from sibling getters like get_firewall_rule and list_acl_rules. The 'single ... by ID' phrasing explicitly contrasts with list_acl_rules, making the tool's scope unambiguous.
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 clear context for use: retrieve one ACL rule by rule_id, and instructs the agent to obtain rule_id from list_acl_rules. It doesn't explicitly state when not to use this tool or name alternative retrieval/ordering tools, but the single-vs-list distinction is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_acl_rule_orderingA
Get the ordering of ACL rules for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Get' implies a read-only operation, which is useful given that no annotations are present. However, the description does not explicitly confirm read-only behavior, ordering semantics, or any site/host access implications; the output schema covers the return shape but the description adds little behavioral context beyond the operation itself.
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 tight sentences: one front-loaded statement of the operation and one compact parameter breakdown. Every element earns its place, with no filler or repetition of schema details.
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 two-parameter getter with an output schema available, the description provides the necessary operation and parameter semantics. It does not mention the relationship to set_acl_rule_ordering, but the core invocation details are sufficiently covered.
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 0%, but the description fully compensates by explaining both parameters: host accepts console name, ID, or composite ID with a concrete MAC:numericId format, and site accepts name or ID. This is exactly the semantic detail an agent needs beyond the bare 'string' type in the schema.
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 opens with a specific verb-resource pair, 'Get the ordering of ACL rules for a site,' clearly identifying the operation and target. It is distinguishable from sibling mutators like set_acl_rule_ordering and from get_acl_rule, though it does not explicitly name those alternatives.
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 given about when to use this tool versus related tools such as get_acl_rule, list_acl_rules, or set_acl_rule_ordering. The agent must infer the intended use solely from the name and the sibling list, with no explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alarm_hubA
Get one alarm hub by id (GET /v1/alarm-hubs/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
alarm_hub_id: REQUIRED. Obtain it from list_alarm_hubs (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| alarm_hub_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It clearly indicates this is a read operation (GET) and reveals the host format ('console name, ID, or composite ID (MAC:numericId format)'). However, it doesn't disclose potential error behaviors, authentication requirements, or whether the response is paginated (it's a single-resource GET, so this is fairly inferable). The GET disclosure is meaningful since there are many mutating sibling tools.
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?
Three sentences, all earning their place: the operation statement, the host format explanation, and the id provenance. It's front-loaded with the primary action, though the parameter details could arguably be reorganized. No redundancy or filler.
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 single-resource GET with only two parameters and no output schema describing return values, the description covers the essentials: what it does, how to get the id, and what host formats are accepted. It lacks explicit error/precondition information, but for this complexity level the definition is largely complete. The sibling list shows list_alarm_hubs exists as the natural counterpart, which is consistent.
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 input schema only provides type string for both parameters, with zero schema description coverage. The description adds critical semantics: alarm_hub_id is REQUIRED and how to obtain it (from list_alarm_hubs' id field), and host accepts three distinct formats including the composite MAC:numericId format. This meaningfully compensates for the bare schema.
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 states a specific verb ('Get') and resource ('one alarm hub by id'), and includes the endpoint path (GET /v1/alarm-hubs/{id}) which unambiguously identifies the operation. It also distinguishes this from list_alarm_hubs by requiring a specific id rather than a list.
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 tells the agent when to use this tool: to obtain a single alarm hub by id, and explicitly says to obtain the id from list_alarm_hubs. It doesn't explicitly state when NOT to use it (e.g., if you need multiple hubs, use list_alarm_hubs instead), but the relationship to the sibling 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_arm_profileA
Get one arm profile by id (filters GET /v1/arm-profiles; no GET-by-id exists upstream).
host: console name, ID, or composite ID (MAC:numericId format).
arm_profile_id: REQUIRED. Obtain it from list_arm_profiles (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| arm_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses that this is not a direct GET-by-id but a filtered call to the list endpoint, which is a meaningful implementation behavior that could affect error behavior and performance. The use of 'Get' and 'GET /v1/arm-profiles' implies read-only, though it does not explicitly say 'does not modify data'.
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?
Three short lines with no filler; the primary action and cardinality are first, the upstream limitation is a brief clarifying parenthetical, and parameter guidance is separated for readability. Every sentence 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 two-parameter getter with an output schema present, the description covers the essential selection logic, parameter sources, and the only relevant upstream quirk. It doesn't state what happens when no profile matches, but the presence of an output schema and the clearly-worded singular intent reduce the need for that detail.
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 0%, so the description must carry parameter meaning, and it does: host is explained as 'console name, ID, or composite ID (MAC:numericId format)', and arm_profile_id is marked REQUIRED with instruction to obtain it from list_arm_profiles. This exceeds what the raw string-typed schema 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?
States 'Get one arm profile by id' with a clear verb, resource, and cardinality. The parenthetical 'filters GET /v1/arm-profiles; no GET-by-id exists upstream' provides implementation context that distinguishes it from a typical direct fetch and from list_arm_profiles.
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 establishes that this tool is the way to retrieve a single arm profile, and explicitly points to list_arm_profiles as the source of the required arm_profile_id. It does not explicitly spell out when not to use it, but the 'by id' condition 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_bridgeA
Get one bridge by id (GET /v1/bridges/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
bridge_id: REQUIRED. Obtain it from list_bridges (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| bridge_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the only source of behavioral context. It discloses the HTTP GET method (implying a read operation) and required identifiers, but does not mention potential errors, permissions, or response characteristics. Adequate but not deeply transparent.
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 only two sentences, highly scannable, and front-loaded with the core purpose. Every clause adds value: the HTTP endpoint, host variations, and bridge_id sourcing. No filler or repetition.
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 GET-by-id tool with an output schema, the description covers the essential prerequisites (host and bridge_id) and their sources. It lacks explicit error semantics and pagination, but given the simplicity and output schema presence, it is sufficiently complete for an agent to invoke 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 description coverage is 0%, so the description fully compensates by explaining host's three allowed formats and the exact provenance of bridge_id. Every parameter's meaning is enhanced beyond the raw schema, making this a model case for compensating a schema gap.
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 explicitly states 'Get one bridge by id' with the HTTP endpoint, clearly identifying the action and resource. It distinguishes itself from list_bridges (fetching all) and update_bridge (modifying) without ambiguity.
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 clear guidance on where to obtain bridge_id ('Obtain it from list_bridges'), and explains acceptable host formats. Does not explicitly state when to prefer this over alternatives, but the singular resource retrieval use case is implied strongly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cameraA
Get details for a single Protect camera by ID.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden of behavioral disclosure. The verb 'Get' implies a read-only operation, and the host format is explained, but the description doesn't explicitly state side-effect-free behavior, permission requirements, or error handling. It provides some context but not deep behavioral detail.
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 extremely concise: a single summary line plus two parameter-focused bullet lines. Every sentence adds value, and the most important identifier (camera_id) is front-loaded in the summary. 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?
The output schema covers return values, and the description covers the two required parameters with source and format details. It does not mention authentication, read-only affirmations, or error scenarios, but for a simple single-resource retrieval tool, the provided information is largely sufficient. A small gap remains around explicit non-mutating behavior.
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 0%, so the description must fully compensate. It does: host is defined as 'console name, ID, or composite ID (MAC:numericId format)' and camera_id is marked REQUIRED with a clear source ('Obtain it from list_cameras (its id field)'). This is exactly the guidance an agent needs.
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 details') and the specific resource ('a single Protect camera by ID'). It naturally distinguishes this from sibling tools like list_cameras and get_camera_snapshot, making the tool's purpose unmistakable.
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 concrete instructions on how to correctly provide both parameters: the host format and the need to obtain camera_id from list_cameras. It doesn't explicitly state when NOT to use this tool, but the 'by ID' scope implies the selection criteria versus listing all cameras.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_camera_snapshotA
Get a snapshot from a Protect camera. Returns base64-encoded JPEG image data.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the disclosure burden. It usefully discloses the output format (base64-encoded JPEG image data), but it does not mention side effects, failure modes, latency, or that it is a read-only snapshot beyond the verb 'get.'
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 compact and well-structured: one sentence for purpose and return format, then one focused line per parameter. It contains no filler, and the critical camera_id sourcing instruction is prominently included.
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 getter with two required string parameters and an output schema, the description covers both parameters, the return format, and a clear discovery path for the camera ID. It does not discuss error conditions or host discovery beyond accepted formats, but those are not required for basic selection and invocation.
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 provides no descriptions for either parameter, so the description must compensate. It explains valid host formats (console name, ID, or composite MAC:numericId format) and tells the agent how to obtain camera_id via list_cameras. This is meaningful guidance, though it lacks concrete examples.
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?
States a specific action and resource: 'Get a snapshot from a Protect camera.' Also clarifies the return format as base64-encoded JPEG image data. It is distinct from sibling getters like get_camera and get_rtsps_stream, but it does not explicitly contrast with them, so it stops short of a 5.
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?
Implied usage is clear: use this when a camera snapshot is needed. It also provides a useful prerequisite by pointing to list_cameras for obtaining camera_id. However, it does not explicitly state when to prefer this tool over alternatives or provide exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_carrier_service_planA
Get one Carrier / ISP Fabric service plan by ID.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. An unknown id surfaces the upstream service_plan_not_found (404) verbatim.
plan_id: the service-plan UUID from list_carrier_service_plans. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| plan_id | Yes | ||
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the tool is not testable against live hardware and that unknown ids surface the upstream 404 error verbatim. This is useful transparency, though it does not explicitly address side-effect behavior; the 'get' verb implies read-only.
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 compact and front-loaded with the core action, followed by testing/error behavior and then parameter semantics. Every sentence earns its place with no filler or redundancy.
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 single-resource getter with an output schema, the description covers identification via plan_id, the error behavior for unknown ids, and optional routing via key_label. An agent has the necessary context to select and invoke the tool 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?
Both parameters gain meaning beyond the bare schema: plan_id is described as the service-plan UUID from list_carrier_service_plans, and key_label is explained as an optional API-key label for routing. This fully compensates for the 0% schema description coverage.
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 states a specific verb and resource: 'Get one Carrier / ISP Fabric service plan by ID.' The 'by ID' qualifier distinguishes it from list_carrier_service_plans and other getter siblings without needing to inspect their schemas.
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?
Plan_id is sourced from list_carrier_service_plans, which implies a list-then-get workflow. However, the description does not explicitly state when to use this tool over alternatives or provide exclusion criteria, so the usage guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_carrier_subscriberA
Get one Carrier / ISP Fabric subscriber by ID.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Returns the full Subscriber object verbatim under subscriber; an unknown id surfaces the upstream subscriber_not_found (404) verbatim.
subscriber_id: the subscriber UUID from list_carrier_subscribers. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: testing limitations, exact return behavior (subscriber verbatim), error propagation (404 verbatim), and parameter semantics. This goes beyond a minimal description and gives agents confidence in edge-case handling.
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 compact, front-loads the core action, and every sentence adds value. Testing caveats, return behavior, and parameter meanings are all covered without verbosity.
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 presence of an output schema, the description need not detail return fields, but it adds critical non-obvious info: hermetic testing status, verbatim passthrough, 404 surfacing, and key_label routing. For a simple get-by-ID operation, this is 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?
Schema coverage is 0%, but the description fully explains both parameters: subscriber_id as the UUID from the sibling list tool, and key_label as an optional API-key routing label. This compensates entirely for the lack of descriptive text in the schema.
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 states a clear action ('Get') targeting a specific resource ('Carrier / ISP Fabric subscriber') by ID, which distinguishes it from sibling list tools like list_carrier_subscribers. It also names the required parameter upfront.
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 explicit context: the subscriber_id comes from list_carrier_subscribers, and the optional key_label is explained. However, it does not explicitly state when to use this tool versus alternatives beyond identifying the source of the ID, so it misses a clear exclusion statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_planA
Get RF channel assignments and DFS status for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. 'Get' clearly implies a read-only operation and the scope is stated, which is helpful. However, it does not disclose response shape, notable edge cases, error conditions, or any special behavior beyond the basic retrieval.
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 short sentences with no filler. The main operation is stated first, followed immediately by the only parameter guidance an agent needs. Every sentence 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 two-parameter read tool with no output schema, the description provides enough to call it correctly: what it returns, the required entity, and accepted identifier formats. It could optionally describe the return payload in more detail, but that is not essential for invocation.
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 has no parameter descriptions and coverage is 0%, but the description compensates by explaining both parameters: 'host: console name, ID, or composite ID (MAC:numericId format)' and 'site: site name or ID.' This gives an agent concrete, actionable guidance for constructing valid calls.
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 first sentence uses a specific verb and resource: 'Get RF channel assignments and DFS status for a site.' It clearly states what the tool returns, and the focus on RF channel assignments and DFS distinguishes it from most of the many get_* siblings. It does not explicitly contrast itself with a closely related sibling, so it stops short of a 5.
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?
Usage is implied rather than stated: an agent should call this when it needs RF channel assignments or DFS status for a specific site. The description gives no explicit when-to-use/when-not-to-use guidance and does not name alternatives, though 'for a site' and the parameter hints provide moderate direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chimeA
Get details for a single Protect chime by ID.
host: console name, ID, or composite ID (MAC:numericId format).
chime_id: REQUIRED. Obtain it from list_chimes (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| chime_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description itself carries the burden of conveying the operation's nature. The verb 'Get' implies a read-only operation, and 'single Protect chime' clarifies the scope, but the description does not explicitly state side-effect-freeness, error behavior, or permission requirements. This 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?
The definition is compact and front-loaded: one purpose sentence followed by two scannable parameter lines. There is no filler, and every sentence 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 low-complexity two-parameter GET tool with an output schema in place, the description is complete. It documents the non-obvious host format, required parameter, and how to obtain the chime_id, leaving no invocation-critical gaps.
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 0%, but the description fully compensates: it defines host's accepted formats (console name, ID, or composite 'MAC:numericId' format) and marks chime_id as REQUIRED with clear provenance instructions from list_chimes. This goes well beyond the bare string schemas and gives the agent exactly what it needs to call the tool correctly.
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 states a specific verb and resource: 'Get details for a single Protect chime by ID.' The qualifier 'single ... by ID' clearly distinguishes it from the sibling list_chimes, while the resource name separates it from update_chime. An agent can understand what this tool does without opening the schema.
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 clear retrieval workflow by requiring chime_id and directing the agent to obtain it from list_chimes's id field. It does not explicitly contrast with update_chime or say when not to use it, but the single-by-ID framing plus the list_chimes linkage provides sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clientA
Get details for a single client.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
client_id: REQUIRED. Obtain it from list_clients (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Get details' without mentioning side effects, permissions, rate limits, error behavior, or what happens if the client is not found. The parameter format hints are useful but do not convey behavioral traits beyond the basic read operation.
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 and well-structured: a single purpose statement followed by clear, segmented parameter explanations. Every sentence adds value without redundancy.
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 an output schema present, return values are presumably covered elsewhere. The description supplies all parameter semantics and the source for client_id, making it largely complete for a simple get-by-ID operation. The only gap is the lack of explicit usage alternatives, but this is minor given the clarity of the tool's role.
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 0%, and the description fully compensates by explaining all three required parameters. It defines host as 'console name, ID, or composite ID (MAC:numericId format)', site as 'site name or ID', and client_id as REQUIRED with a pointer to list_clients. This gives the agent everything needed to fill the parameters correctly.
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's function: 'Get details for a single client.' It uses a specific verb and resource, and the phrase 'single client' distinguishes it from list_clients and other client-related tools. The purpose is unambiguous.
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 clear context for when to use this tool: when you need details for one client. It explains how to format host and site parameters and explicitly instructs the agent to obtain client_id from list_clients. However, it does not explicitly mention alternative tools or when not to use this one, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_client_link_diagnosticsA
Get first-class per-client link/policy diagnostics for one or more clients.
Read-only and Fabric-only: reuses the same Classic REST /v1/connector/consoles/{host_id}/proxy/network/api/s/{site_slug}/stat/sta request as list_active_clients_stats, then selects the requested client(s) from that payload in memory. Surfaces link quality (rssi, signal, noise, channel, radio_name), rx_rate/tx_rate and retry counters, satisfaction_reason, network/VLAN identity, QoS, fixed-IP, and virtual-network override fields when upstream provides them — the matching record is returned unchanged, so unknown/future fields survive.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. client_id: a single client selector — its /stat/sta _id, id, or mac (case- and separator-insensitive). Provide EITHER client_id OR client_ids, not both. client_ids: a bounded, explicit list of client selectors (max 64) for multi-client selection; returns the matching records as a list. A selector that matches no client fails clearly rather than being silently skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| client_id | No | ||
| client_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and delivers: read-only, Fabric-only, in-memory selection from an upstream payload, passthrough of unknown/future fields, unchanged matching records, and clear failure for unmatched selectors. This is more than enough for an agent to predict side effects and edge cases.
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?
Front-loaded with a one-sentence purpose, followed by compact behavior and parameter blocks. The length is justified because there is no schema documentation and all sentences add operational 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?
Covers purpose, constraints, parameter semantics, return passthrough, and failure behavior. It does not explicitly state the singular client_id return shape (single object vs list) or provide an example, but that is a minor gap given the detailed description.
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 0%, and the description fully compensates: host formats, site name/ID, client selector types, case/separator insensitivity, either-or rule, max 64 entries, list return, and failure behavior. Every parameter is given meaning beyond its JSON type.
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?
Opens with a specific verb+resource: 'Get first-class per-client link/policy diagnostics for one or more clients.' The resource and scope are clear, and the mention of reusing list_active_clients_stats' request distinguishes it from the sibling that returns all clients.
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?
Gives clear context: read-only, Fabric-only, and single vs multi-client selection with a strict either-or constraint. It names list_active_clients_stats as the underlying sibling request, which helps an agent place the tool, though it does not explicitly state when to choose this over that alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deviceA
Get details for a single adopted device.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device UUID or MAC address (accepted formats: AA:BB:CC:DD:EE:FF, AABBCCDDEEFF, aa-bb-cc-dd-ee-ff).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose useful behavioral context: the device must be adopted, and device_id accepts multiple MAC formats (AA:BB:CC:DD:EE:FF, AABBCCDDEEFF, aa-bb-cc-dd-ee-ff), implying input normalization. However, it does not disclose error behavior, permission requirements, or what happens when the device is not adopted or not found.
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 purpose statement is front-loaded in the first sentence, followed by compact parameter documentation. Every line earns its place, and the format examples are tightly packed without redundancy or fluff.
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 3-string-parameter get tool with an output schema present, the description covers the essential calling information: purpose, parameter identity, and accepted input formats. Minor gaps remain—no error-case behavior and no guidance on how host/site relate to the device's actual location—but nothing blocks a correct invocation.
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 0%, yet the description fully compensates by documenting every parameter: host (console name, ID, or composite ID with MAC:numericId format), site (name or ID), and device_id (UUID or MAC with three explicit accepted formats). This is rich, format-level guidance that an agent needs to call the tool correctly.
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 states a specific verb and resource: 'Get details for a single adopted device.' The phrase 'single adopted device' distinguishes it from listing tools (list_devices, list_site_devices) and from pending-device operations (approve_pending_device, reject_pending_device). However, it does not explicitly differentiate from get_device_statistics or search_device_fleet, so it falls just short of full sibling differentiation.
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 no guidance on when to use this tool versus the many similar accessors in the sibling list (get_site_inventory, list_devices, list_site_devices, get_device_statistics). No alternatives are named and no exclusions or prerequisites are stated; usage is only weakly implied by the phrase 'Get details for a single...'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_port_stateA
Get switch port health, PoE, optics, and LLDP telemetry for a device.
Read-only and Fabric-only: reuses the same Classic REST /v1/connector/consoles/{host_id}/proxy/network/api/s/{site_slug}/stat/device request as list_device_stats (one call, no new route), then projects the selected device's port telemetry from that payload. Upstream operational fields are preserved verbatim — link state/speed/duplex, rx/tx byte/packet/error/drop counters, PoE state and draw (poe_enable/poe_good/poe_power/poe_voltage/poe_current/poe_class/poe_mode), SFP/optics fields where present, and port config identity — nothing is renamed or dropped.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device selector — its /stat/device _id, id, or mac (case- and separator-insensitive). port_idx: optional 1-based port number. Omit it for the device view (verbatim port_table and lldp_table plus a thermal/power summary); set it to return that single port_table row verbatim. An unknown port_idx fails clearly.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| port_idx | No | ||
| device_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it delivers: it declares read-only behavior, explains data provenance (one call, no new route), states fields are preserved verbatim and nothing is renamed or dropped, and describes the optional port_idx behavior and failure mode. This is exemplary transparency for a data-access tool.
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 dense but every sentence adds operational value: purpose, constraints, provenance, preserved fields, parameter semantics, and edge-case behavior. It is front-loaded with the key purpose and avoids redundant restatement of the tool name.
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 tool with no output schema, no annotations, and 0% schema coverage, the description is remarkably complete. It tells the agent what data to expect, how to select devices, how to switch views, and what happens on an invalid port index. Nothing critical is missing for correct invocation.
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 0%, so the description must compensate, and it does thoroughly. It explains host formats (console name, ID, or composite ID), site name/ID, device_id selector variants (_id, id, mac) with case/separator insensitivity, and port_idx as an optional 1-based number with distinct behaviors for omitted vs. set values.
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 opens with a specific verb and resource: 'Get switch port health, PoE, optics, and LLDP telemetry for a device.' It clearly distinguishes itself from the sibling list_device_stats by stating it reuses the same request but projects the selected device's port telemetry, so an agent can tell them apart.
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 clear context: it is Read-only and Fabric-only, and it reuses the same Classic REST request as list_device_stats. It explains when to omit or set port_idx, but it does not explicitly state 'use this instead of X when y condition,' though the reference to list_device_stats implies the differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statisticsB
Get latest statistics for a device.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device UUID or MAC address (accepted formats: AA:BB:CC:DD:EE:FF, AABBCCDDEEFF, aa-bb-cc-dd-ee-ff).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read operation, but the description does not disclose output characteristics, whether the statistics are a snapshot or aggregated, or any operational constraints. It adds little beyond the operation name itself.
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 compact and front-loaded with the purpose, then provides parameter format details in a structured bullet-like layout. No filler or redundant content is present.
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 sparse schema and absence of annotations, the description covers all three required parameters with concrete accepted formats, and the output schema exists to handle return-value expectations. The main omission is usage context relative to statistical sibling tools, but the tool is otherwise callable based on the provided information.
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 0%, so the description must compensate for bare string parameters, and it does. It explains host as console name/ID/composite ID, site as name or ID, and device_id with multiple MAC address formats, which is valuable beyond the empty schema.
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 states a clear verb ('Get') and resource ('latest statistics for a device'), so an agent can tell it is a read operation for device statistics. It does not explicitly differentiate from sibling tools like get_site_statistics or list_device_stats, but the target resource is unambiguous.
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 no guidance on when to use this tool versus alternatives such as get_site_statistics, list_device_stats, or get_historical_stats. It only explains parameter formats, not the intended use case or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_stp_stateA
Get per-device STP/RSTP state and per-port STP role/state/path-cost.
Read-only and Fabric-only: reads the same Classic REST /v1/connector/consoles/{host_id}/proxy/network/api/s/{site_slug}/stat/device payload as list_device_stats and projects the selected device's STP fields. Returns the device-level stp_version, stp_priority, root_switch/root (and any other stp_* field present) plus per-port STP role/state/path-cost where upstream provides them, all verbatim. This tool is read-only: STP-priority write support is documented in the PR description only and no write is performed here.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device selector — its /stat/device _id, id, or mac (case- and separator-insensitive).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It explicitly states the tool is read-only, performs no write, is Fabric-only, returns fields verbatim, and depends on upstream availability for per-port data. It even clarifies that documented write support elsewhere is not performed here.
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 well structured and front-loaded with the core purpose. Every sentence adds value: scope, read-only guarantee, relationship to sibling tool, returned fields, and parameter semantics. It is detailed without being padded.
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?
Despite having no output schema or annotations, the description provides enough information to invoke the tool correctly: the underlying endpoint, the fields returned, upstream data caveats, and all parameter formats. Nothing essential is missing for a read-only retrieval tool with three simple parameters.
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 0%, but the description fully compensates by explaining all three parameters: accepted host formats, site name/ID, and device selector flexibility including case- and separator-insensitivity. This adds substantial meaning beyond bare property names.
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 opens with a specific verb and resource: 'Get per-device STP/RSTP state and per-port STP role/state/path-cost.' It clearly distinguishes this tool from list_device_stats by explaining that it projects only the selected device's STP fields from the same payload.
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 clear context: it is read-only and Fabric-only, and it names list_device_stats as the related tool that reads the same underlying payload. It does not explicitly state 'use this instead of X when you need STP fields,' but the relationship is clear enough for an agent to infer the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_policyA
Get a single DNS policy by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy_id: REQUIRED. The policy's id; obtain it from list_dns_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. 'Get' implies a read operation, but the description does not mention potential errors, authentication, or side effects. However, for a simple retrieval tool with an output schema, this level of disclosure is adequate, though not rich.
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 extremely concise: one purpose statement followed by terse parameter explanations. Every word earns its place, and the most important instruction (REQUIRED for policy_id) is clearly highlighted. No unnecessary fluff.
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 that an output schema exists and all parameters are explained with format and source, the description is complete for a straightforward single-resource fetch. It lacks explicit usage guidance or edge-case handling, but for this tool's simplicity, the essentials are covered.
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 has 0% description coverage, but the description fully compensates by explaining each parameter: host (console name, ID, or composite ID), site (name or ID), and policy_id (required, sourced from list_dns_policies). This is comprehensive and directly actionable.
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's purpose: 'Get a single DNS policy by ID.' It uses a specific verb (Get), identifies the resource (DNS policy), and emphasizes 'single' to differentiate from list operations. This makes it unambiguous among sibling tools like list_dns_policies.
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 clear context for each parameter, especially explaining that policy_id should be obtained from list_dns_policies. While it doesn't explicitly state when to prefer this over alternatives, the singular nature is implicit and the source of the ID is given, which guides correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dynamic_dnsA
Get a single Dynamic DNS configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Returned verbatim, including plaintext x_password credential fields.
ddns_id: REQUIRED. Obtain it from list_dynamic_dns (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| ddns_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Warns that returned data includes plaintext x_password credential fields, which is a critical behavioral disclosure not inferable from the schema. With no annotations, this adds meaningful transparency, though it doesn't discuss other potential behaviors (e.g., errors, rate limits).
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?
Concise and well-structured: opens with the core function, then parameter explanations, then the credential warning. Every sentence adds value with no redundancy.
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 get-by-id operation, the description covers the purpose, all parameter semantics, and the sensitive return behavior. No output schema exists, but the mention of returned verbatim fields gives sufficient context. Missing details like exact response structure are acceptable for this scope.
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?
Despite 0% schema description coverage, the description compensates fully by explaining each parameter: host accepts console name, ID, or composite MAC:numericId; site accepts name/ID; ddns_id is required and sourced from list_dynamic_dns. No parameter meaning is left obscure.
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?
States a specific verb ('Get') and resource ('single Dynamic DNS configuration by ID'), clearly distinguishing it from list_dynamic_dns and update_dynamic_dns. No ambiguity about what the tool does.
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?
Explains how to obtain the required ddns_id via list_dynamic_dns and defines host/site formats. While it doesn't explicitly contrast with sibling tools, the guidance for obtaining the ID and parameter formats covers usage adequately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_groupA
Get a single firewall group by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. group_id: firewall group ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly indicates a read-only fetch and explains accepted identifier formats, which is useful. It does not disclose possible error cases, response shape, or whether the group includes nested rules, but for a simple getter this is acceptable though not exhaustive.
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 main purpose is front-loaded in the first sentence, followed by terse parameter clarifications. There is no redundant wording, filler, or repetition of schema 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?
For a three-parameter getter with no output schema, the description covers the core action and all parameter meanings. It could additionally state what the response contains or that a missing group returns an error, but the current information is sufficient for an agent to call the tool correctly in most situations.
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 provides only bare string types with 0% description coverage. The description compensates fully by explaining host as 'console name, ID, or composite ID (MAC:numericId format)', site as 'site name or ID', and group_id as 'firewall group ID'. All three parameters are given meaningful 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 states a specific verb ('Get'), a specific resource ('a single firewall group'), and the retrieval key ('by ID'). The word 'single' clearly distinguishes it from the sibling 'list_firewall_groups' without requiring schema inspection.
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 usage context is implied: if you know a firewall group's ID, call this tool. However, it does not explicitly say to use list_firewall_groups first to discover group IDs, nor does it mention when not to use this tool. The guidance is present but not explicit about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_policyA
Get a single firewall policy by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy_id: REQUIRED. The policy's id; obtain it from list_firewall_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral disclosure burden. 'Get' clearly signals a read operation and 'single ... by ID' indicates cardinality, but the description does not explicitly state that this is non-mutating, nor does it mention behavior such as error handling or what happens when the policy does not exist. The added host/site format details give some useful behavioral context.
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 compact and front-loaded: the main purpose appears in the first sentence, followed by parameter guidance. Every sentence contributes necessary information, and there is no repetition of schema fields or filler.
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 get-by-ID tool with an output schema already present, this description provides all necessary invocation details: what the tool does, how to resolve host and site identifiers, and where to find policy_id. No critical operational context appears to be missing given the tool's 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?
The input schema has 0% description coverage, but the tool description fully compensates by explaining each parameter: host (console name, ID, or composite ID MAC:numericId), site (name or ID), and policy_id with a source instruction to use list_firewall_policies. This adds significant meaning beyond the bare string type declarations in the schema.
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 states a specific verb ('Get'), a specific resource ('firewall policy'), and a specific retrieval scope ('single ... by ID'). This clearly distinguishes it from list_firewall_policies, which would be the obvious sibling for fetching multiple policies.
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 appropriate use case: retrieving one specific policy when you already have its ID. It also provides a concrete prerequisite workflow by telling the agent to obtain policy_id from list_firewall_policies. It does not explicitly state when not to use it or contrast it with alternatives, but the single-by-ID framing gives clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_policy_orderingA
Get the ordering of firewall policies for a site filtered by source and destination zone.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. source_zone_id: UUID of the source firewall zone (required by the API). destination_zone_id: UUID of the destination firewall zone (required by the API).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| source_zone_id | Yes | ||
| destination_zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'Get' implies a read-only operation, and the parameter notes clarify what the API requires. However, it does not explicitly state that there are no side effects, nor does it explain what the returned ordering represents or whether hidden/system policies are excluded.
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 compact and front-loaded: the core operation appears first, followed by concise parameter documentation. There is no redundant or filler wording.
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?
All required parameters are documented, the output schema exists to describe return values, and the operation is clear enough to call correctly. It loses a point because it omits any usage guidance about when ordering retrieval is appropriate relative to sibling tools, and it does not explain conventions of the returned ordering.
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 0%, so the description fully compensates by documenting all four parameters. It explains host formats (console name, ID, or composite MAC:numericId), site name/ID, and identifies source_zone_id and destination_zone_id as UUIDs required by the API. This is exactly the semantic detail the schema lacks.
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 first sentence names a specific operation: retrieving the ordering of firewall policies for a site, filtered by source and destination zone. This clearly differentiates it from related siblings like list_firewall_policies (list, not ordering), set_firewall_policy_ordering (write), and get_acl_rule_ordering (different 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?
The description explains what the tool does and that source/destination zone IDs are required, but it gives no guidance on when to use this tool versus the many related firewall and ordering tools. It does not name alternatives like set_firewall_policy_ordering or list_firewall_policies, nor state when ordering is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_ruleB
Get a single classic firewall rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. rule_id: firewall rule ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| rule_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get' and does not mention error behavior, return format, or any side effects. The description adds no behavioral context beyond the verb.
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 and front-loaded with the main purpose, followed by terse parameter clarifications. Every sentence is informative, though it could be structured more clearly.
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 single-resource GET tool with three required parameters and no output schema, the description covers the core necessities. However, it lacks return format and error context, which would improve completeness for an agent unfamiliar with the API.
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 has 0% description coverage, so the description compensates by explaining what host, site, and rule_id refer to. The explanations are brief but add meaning beyond the bare parameter names, though they lack format details.
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 states 'Get a single classic firewall rule by ID', which clearly identifies the verb, resource, and scope of the operation. It is distinguishable from sibling list_firewall_rules, though it does not explicitly mention that alternative.
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 it is for fetching a specific rule when rule_id is known, but it does not explicitly state when to use it instead of listing or creating rules. No alternatives or exclusions are mentioned, leaving the agent to infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_zone_proxyA
Get a single firewall zone by ID via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
zone_id: REQUIRED. Obtain it from list_firewall_zones_proxy (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It adds useful context about host formats and the need to first list zones, but it does not describe side effects, error behavior, or explicitly confirm a read-only lookup. The verb 'get' implies a non-mutating operation, but the absence of explicit behavioral detail is a moderate gap.
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 compact and front-loaded with the core operation, followed by a clearly labeled parameter block. It uses REQUIRED to highlight the key constraint and provides all necessary formatting details in a scannable structure. Every sentence 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?
An output schema exists, so return-value details are covered elsewhere. The description handles all parameters and the non-obvious prerequisite of listing zones first. It could additionally state what happens on invalid IDs or explicitly route the 'list all zones' case to the sibling tool, but for a simple get-by-ID operation the current level is largely 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?
Schema description coverage is 0%, so the description must fully compensate for parameter meaning. It explains host formats (console name, ID, or composite MAC:numericId), site name or ID, and exactly how to source zone_id from the sibling list tool. This fully resolves the ambiguity that would otherwise exist in the bare string 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?
The description opens with a specific verb and object: 'Get a single firewall zone by ID via connector proxy.' This clearly distinguishes it from list_firewall_zones_proxy (plural/all), create/update/delete siblings, and other firewall tools. An agent can immediately understand the operation and 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?
The description tells the agent that zone_id is required and explains how to obtain it from list_firewall_zones_proxy, creating a clear prerequisite workflow. It does not explicitly state when not to use this tool or contrast it with create/update/delete, so it falls just short of fully explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fleet_summaryA
Get a high-level fleet summary: host, site, and device counts with status breakdowns.
Useful for a quick overview of the entire UniFi deployment. key_label: scope summary to consoles visible to a specific API key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. 'Get' implies a read-only operation, and the key_label line discloses scoping behavior. Still, it does not explicitly state safety/non-mutating guarantees, permissions, rate limits, or what happens when key_label is omitted.
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 compact and front-loaded: the core purpose appears first, followed by a short usage context and a parameter explanation. Every sentence contributes useful information with no filler or redundant restatement of the tool name.
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 low complexity, presence of an output schema, and single optional parameter, the description is largely complete for an agent to invoke the tool correctly. The main gap is that it does not explicitly describe the default scope when key_label is omitted, and it offers no guidance on when not to use this tool.
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 input schema provides only the key_label name with no description, so the description meaningfully compensates by explaining that it scopes the summary to consoles visible to a specific API key. It leaves some ambiguity about accepted string formats and the default behavior when the parameter is null, but it adds real semantic value beyond the schema.
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 states a specific verb and resource ('Get a high-level fleet summary') and describes the output ('host, site, and device counts with status breakdowns'). It conveys the tool's purpose clearly, but it does not explicitly differentiate it from potentially overlapping siblings such as list_all_sites_aggregated or get_site_health_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?
The phrase 'Useful for a quick overview of the entire UniFi deployment' provides clear context for when to use this tool. However, it does not mention any alternatives, exclusions, or cases where a more detailed or different summary tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fobA
Get one fob by id (GET /v1/fobs/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
fob_id: REQUIRED. Obtain it from list_fobs (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| fob_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explicitly marks the operation as GET (read-only) and documents accepted host formats, but does not mention error/not-found behavior, authentication, or side-effect absence beyond the GET method. This 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?
Three short sentences with no filler: the purpose is front-loaded, endpoint is given, and each parameter gets a meaningful note. Every line 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?
Given the tool's simple get-by-id nature and the presence of an output schema, the description covers operation, endpoint, and parameter acquisition. Nothing required to invoke the tool correctly is missing.
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 0%, so the description fully compensates: it explains host's accepted identity formats and specifies that fob_id is required and where to obtain it (list_fobs.id). This is exactly the semantic information an agent needs beyond bare string fields.
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 opens with 'Get one fob by id,' a specific verb+resource+scope that clearly distinguishes it from the sibling list_fobs (list all) and update_fob (modify). The explicit GET endpoint reinforces the exact operation.
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?
It provides concrete guidance for both parameters: host accepts console name, ID, or composite ID, and fob_id is required and should be obtained from list_fobs. It does not explicitly contrast when to choose get_fob over list_fobs or update_fob, but the single-entity purpose implies the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_statsA
Get bucketed historical statistics from the Classic REST /stat/report endpoint.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. interval: one of "5minutes", "hourly", "daily". scope: one of "ap", "user", "site". The "ap" scope carries num_sta per AP per bucket. start/end: epoch SECONDS (UTC). Unlike /stat/session, this endpoint requires MILLISECONDS — the tool converts seconds to milliseconds internally, so callers always pass seconds for a consistent interface. attrs: metrics to aggregate; defaults to num_sta, rx_bytes, tx_bytes.
Retention differs by interval: 5minutes ~1 day, hourly ~7 days, daily ~91 days. Output "time" is epoch milliseconds. Note: rx_bytes/tx_bytes come back as JSON floats in scientific notation (e.g. 5.27e9) — treat them as floats, not ints.
The response is passed through verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| host | Yes | ||
| site | Yes | ||
| attrs | No | ||
| scope | Yes | ||
| start | Yes | ||
| interval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels: it discloses internal unit conversion (seconds to milliseconds), retention policies per interval, output time epoch unit, scientific notation for float metrics, and verbatim response passthrough. These behavioral details are critical for correct interpretation and are not inferable from the schema.
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 longer than average but each sentence serves a purpose. It is organized into parameter definitions and follow-up notes. While not ultra-concise, the density of essential information justifies the length; a slight reordering could improve flow but the current structure is logical.
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 7 parameters, no output schema, and no annotations, the description covers all operational essentials: parameter meaning, enums, defaults, unit conversions, retention, and output quirks. An agent has everything needed to invoke the tool correctly and interpret results.
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 0%, so the description must fully document parameters. It explains host/site formats, interval enums, scope options with special behavior for 'ap', start/end unit and conversion, and attrs default with example metrics. This completely compensates for the schema gap.
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 ('bucketed historical statistics') and names the specific REST endpoint. It distinguishes itself from /stat/session but does not explicitly compare to sibling tools, so it's clear but not fully differentiated from similar statistics 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?
The description provides detailed parameter semantics and a note about the difference from /stat/session, but it does not state when to use this tool versus alternatives. There is no explicit when/when-not guidance or mention of sibling tools, leaving the selection decision to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hostA
Get details for a single UniFi console by name or ID.
host: console name, ID, or composite ID (MAC:numericId format for cloud consoles). Host record is returned verbatim, including reportedState GPS coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds important return-behavior detail: the host record is returned verbatim and includes reportedState GPS coordinates. It does not cover error cases, permissions, or side-effect guarantees, but 'Get details' and 'returned verbatim' sufficiently signal a read-only retrieval for a simple getter.
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 short, purposeful sentences. The core purpose is front-loaded, and the parameter explanation is compact and directly actionable. No filler or repetition of schema-provided 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?
For a single-parameter getter with an output schema present, this description is complete. It explains how to identify the target, what formats are accepted, and what the response contains. The agent has everything needed to select and invoke the tool 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 0%, so the description must fully explain the parameter. It does: host can be a console name, ID, or composite ID in MAC:numericId format for cloud consoles. This adds meaningful format semantics beyond the raw string type in the schema.
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?
States a specific verb ('Get') and resource ('details for a single UniFi console'), and clarifies the lookup key ('by name or ID'). It is clearly distinct from list_hosts, which would be the list counterpart, and from device-focused getters in the sibling set.
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 makes the intended use clear: retrieve one console using a name, ID, or composite ID. It does not explicitly name alternatives like list_hosts or exclude list operations, but the 'single console' scoping provides enough context for an agent to choose it over list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotspot_packageA
Get a single hotspot billing package by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. package_id: hotspot package ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| package_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It states the operation (get) but gives no details about safety, permissions, side effects, or response format. There is no mention that this is a read-only operation, any required authorization, or what happens if the package is not found. The description is minimal and lacks meaningful behavioral context.
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 compact and efficient. The opening sentence states the purpose, followed by concise per-parameter definitions. Every sentence contributes value, and the structure is easy to parse. No redundant or filler content exists.
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 getter with three required string parameters, the description covers the input semantics adequately. However, there is no output schema and no description of the return value, error scenarios, or any special conditions. Given the tool's simplicity, the absence of response details is a notable gap, but the core invocation context is sufficiently described.
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 0%, so the description's parameter explanations are critical. It clearly defines each parameter: host (console name, ID, or composite ID), site (name or ID), and package_id (hotspot package ID). This provides essential meaning beyond the bare schema, though it does not elaborate on formats for site or package_id beyond basic identification.
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 a single hotspot billing package by ID.' It specifies the resource (hotspot billing package) and the scope (single, by ID). This distinguishes it from list_hotspot_packages, which retrieves multiple packages, even though the sibling differentiation is implicit rather than explicit.
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 no guidance on when to use this tool versus alternatives. It does not mention the relationship to list_hotspot_packages or any scenarios where this specific getter is preferable. Context is only implied by the verb 'get' and the singular 'single,' leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotspot_voucherA
Get a single hotspot voucher by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
voucher_id: REQUIRED. Obtain it from list_hotspot_vouchers (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| voucher_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. The verb 'Get' implies a read-only operation, and the identifier formats are helpful, but the description does not explicitly state absence of side effects, permission requirements, or not-found/error behavior. For a simple getter this is a moderate gap.
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 compact and well structured: a one-sentence purpose followed by concise parameter guidance. Every line earns its place, and the most important ID-provenance information is clearly highlighted.
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 single-record lookup with an output schema present, the description is complete enough. All three required parameters are meaningfully documented, and the source of voucher_id is explicitly identified, leaving little ambiguity for an agent invoking this tool.
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 0%, so the description must compensate, and it does. It explains that host accepts a console name, ID, or composite ID in MAC:numericId format; site accepts a name or ID; and voucher_id should come from list_hotspot_vouchers. This adds substantial meaning beyond the bare string schema.
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 first sentence clearly states the tool retrieves a single hotspot voucher by ID, using a specific verb and resource. This distinguishes it from sibling tools like list_hotspot_vouchers, create_hotspot_vouchers, and delete_hotspot_voucher.
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 practical workflow guidance: voucher_id is required and should be obtained from list_hotspot_vouchers. It implies this tool is for single-voucher lookup by ID, but it does not explicitly state exclusions or when to prefer list_hotspot_vouchers over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_innerspace_assetA
Download a floor-plan asset (image) from a console's InnerSpace project.
Fetches the binary asset from the documented …/integration/v1/assets/{planId}/ {filename} endpoint (a floor plan's image_url resolves here). Bytes are returned base64-encoded inline under image_base64 when at or below the 10 MiB inline cap; a larger asset returns metadata only (image_base64=null) plus a note and the connector path to fetch it out-of-band. content_type is the upstream media type (typically image/jpeg or image/png).
host: console name, ID, or composite ID (MAC:numericId format). plan_id: the id in the {planId} segment of the floor plan's image_url -- i.e. the value between '/assets/' and the trailing '/{filename}'. This is the asset-group UUID and is NOT the floor plan's own 'id' field (they differ); passing the plan 'id' returns HTTP 404. Parse both plan_id and filename from image_url (from list_innerspace_floor_plans) rather than constructing them from the plan id. filename: the asset filename as published in the floor plan's image_url.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| plan_id | Yes | ||
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: base64-inline return under a 10 MiB cap, metadata-only response for larger assets, the content_type field, and the out-of-band connector path. This is rich behavioral context that exceeds what an agent could infer from a simple 'download' description.
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?
Although long, every sentence earns its place. The main purpose is front-loaded, the endpoint context follows, and parameter explanations are presented as a clean list. The complexity of the task justifies the length, and the structure makes it easy to scan.
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 description covers what the tool does, how to get the required parameters, the response format including edge cases, and the relationship to a sibling tool for extracting those parameters. For a tool with no annotations and three non-trivial parameters, nothing an agent needs to call it correctly is missing.
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 0%, so the description must compensate, and it does thoroughly. Each parameter is explained with real-world semantics: host accepts name/ID/composite ID, plan_id is clarified as the asset-group UUID not the floor plan id, and filename is tied to the image_url. This is far more than the bare names in the schema.
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 first sentence states a specific verb ('Download') and resource ('floor-plan asset'), immediately distinguishing this from sibling InnerSpace tools like list_innerspace_floor_plans or get_innerspace_summary. The mention of the endpoint and the asset's image_url further clarifies exactly what is fetched.
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 instructs to parse plan_id and filename from image_url returned by list_innerspace_floor_plans, and warns against constructing them from the plan id. This gives clear when-to-use and when-not-to-use guidance, effectively routing the agent away from a common pitfall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_innerspace_projectA
Return the full InnerSpace floor-plan project geometry for a console.
The complete (~66 KB) project document: shapes, plans, products, wall types, and attenuation-object types. Returned verbatim, including device meta.mac / meta.ip and floor-plan image/asset URLs. Prefer get_innerspace_summary first if you only need an inventory — this payload is large.
host: console name, ID, or composite ID (MAC:numericId format). mode: '3D' (default; device shapes carry real metric mounting heights) or '2D' (device shapes flattened to z=0). 3D is the only mode with real heights.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| mode | No | 3D |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the large payload size (~66 KB), that data is returned verbatim, that sensitive device metadata (meta.mac/meta.ip) and asset URLs are included, and precisely how 3D vs 2D mode changes geometry.
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?
Every sentence carries distinct information: result scope, payload contents and size, routing advice, then parameter definitions. It is structured with clear labels for host/mode and no filler.
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 an output schema present and both parameters fully documented in prose, the description covers what the tool returns, why it might not be the right choice, and how mode affects the result. No operational guidance needed for selecting and invoking the tool is missing.
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 input schema has no property descriptions, but the description fully compensates: host is explained as console name, ID, or MAC:numericId composite, and mode is explained with its default, allowed values, and geometric consequences. An agent can construct correct arguments from the description alone.
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?
States a specific action ('Return') on a specific resource ('full InnerSpace floor-plan project geometry for a console') and lists concrete contents. It also distinguishes itself from get_innerspace_summary by noting the summary is preferable for inventory-only needs.
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?
Explicitly tells the agent to prefer get_innerspace_summary when only an inventory is needed, because this payload is large. It also specifies the two mode variants and when each is appropriate, giving clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_innerspace_summaryA
Inventory a console's InnerSpace floor-plan project without the full payload.
Returns counts and structure: shape breakdown by type (wall / device / map / scale), per-floor plans with each plan's own scale, product and wall-material / attenuation-type dictionary sizes, and project metadata. Call this before get_innerspace_project when you only need to know what's present. Surfaces the multi-floor caveat: floors do not share a coordinate origin.
host: console name, ID, or composite ID (MAC:numericId format). mode: '3D' (default; device shapes carry real metric mounting heights) or '2D'.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| mode | No | 3D |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that this is a lightweight inventory call that returns counts/structure rather than the full payload, and it surfaces the multi-floor caveat (floors do not share a coordinate origin). It does not explicitly state read-only behavior, but the 'inventory' framing and the caveat disclosure provide meaningful behavioral context.
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 front-loaded with the core purpose and return shape, then provides usage guidance, a behavioral caveat, and compact parameter explanations. Every sentence contributes meaningful information with no repetition or filler.
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 that an output schema exists, the description covers everything needed to select and invoke the tool correctly: purpose, lightweight nature, key caveat, both parameters with semantics, and how it relates to sibling get_innerspace_project. The multi-floor caveat is especially valuable contextual detail that would not be inferable from the schema.
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 0%, so the description fully compensates. It explains that host can be a console name, ID, or composite ID with an explicit format (MAC:numericId). It also clarifies mode values, the default ('3D'), and the practical difference ('device shapes carry real metric mounting heights'). This is substantial value beyond the bare schema.
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 ('Inventory') and names the exact resource: a console's InnerSpace floor-plan project, explicitly noting it avoids the full payload. It also lists the returned structure (shape breakdown, per-floor plans, dictionary sizes, project metadata). It clearly distinguishes itself from get_innerspace_project by directing agents to call this first when only presence/overview is needed.
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 is explicit about when to use this tool: 'Call this before get_innerspace_project when you only need to know what's present.' It names the alternative tool directly and gives a clear selection condition, which is exactly the kind of routing guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_isp_metricsA
Get WAN health metrics (speed, latency, packet loss, uptime).
This is the simple, unfiltered variant (interval only). To scope by console/site or a
time window, use query_isp_metrics instead.
interval: time bucket for metrics aggregation — '5m' or '1h'. Returns a dict with a 'periods' list containing WAN speed, latency, packet loss, and uptime.
| Name | Required | Description | Default |
|---|---|---|---|
| interval | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It states that this is the 'simple, unfiltered variant,' meaning no console/site/time-window filtering, which is a meaningful behavior trait. It also discloses the return shape ('dict with a 'periods' list containing...'). While it does not detail error cases or exact formatting, it gives enough behavioral context for a safe read operation. A 4 is appropriate given the description's clarity, though a bit more on constraints or response details could push it to 5.
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 short, front-loaded with the core purpose, and every sentence earns its place. The first sentence states the resource and metrics; the second explains the filtering scope and names the alternative; the third defines the parameter; the fourth summarizes the return shape. There is no redundancy or filler.
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 single-parameter metrics tool with no annotations, the description covers the domain (WAN health), the exact metric categories, the interval format, the distinction from the sibling, and the return structure. The output schema exists, so detailed return fields don't need to be enumerated. Everything needed to select and invoke this tool correctly is present.
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 input schema has zero description coverage (0%), so the description must compensate. The description explains the interval param as 'time bucket for metrics aggregation — '5m' or '1h',' adding concrete allowed values and semantics not present in the schema. This fully compensates for the schema gap, and the description of the return structure adds useful context. A 4 is warranted because the parameter explanation is clear and complete for a single-param tool.
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 opens with a specific verb and resource: 'Get WAN health metrics (speed, latency, packet loss, uptime).' It clearly states what the tool does and explicitly differentiates itself from the sibling query_isp_metrics by naming it as the scoped variant. An agent can immediately understand this tool's purpose and how it differs from its nearest alternative.
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 states when to use this variant ('simple, unfiltered variant (interval only)') and directs the agent to use query_isp_metrics when scoping by console/site or a time window is needed. This provides clear when-to-use guidance and names the alternative tool, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lagA
Get one Link Aggregation Group.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. lag_id: LAG UUID from list_lags.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| lag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It does not mention any side effects, permissions, or what the response contains. Although 'Get' implies a read-only operation, the lack of any behavioral detail leaves significant gaps.
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 extremely concise, with no filler. It front-loads the main purpose and then explains the three parameters in a compact, scannable way. Every word adds value.
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 simplicity and the presence of an output schema, the description covers the essential identification of parameters adequately. However, it lacks usage context and behavioral transparency, which prevents it from being fully complete for an agent needing to decide when to invoke it.
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?
Despite 0% schema description coverage, the description provides meaningful guidance for each parameter: host format (console name, ID, or composite ID), site (name or ID), and lag_id (UUID from list_lags). This goes well beyond the bare schema and fully compensates for the schema gap.
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 'Get one Link Aggregation Group' uses a specific verb and resource, clearly indicating a fetch operation for a single entity. It distinguishes from sibling list_lags by emphasizing 'one' and even references list_lags as the source for lag_id, reinforcing the difference.
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. While the parameter description implies usage (needs a lag_id from list_lags), there is no statement about conditions or exclusions, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lightA
Get details for a single Protect light by ID.
host: console name, ID, or composite ID (MAC:numericId format).
light_id: REQUIRED. Obtain it from list_lights (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| light_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. 'Get details' conveys a read-only operation, but the description does not mention authentication needs, error behavior, or what happens when the light ID is invalid. For a simple getter this is minimally adequate, but it leaves some behavioral gaps.
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 three short, purposeful sentences: the purpose is front-loaded, and the parameter details are separated clearly. Every sentence adds information; there is no filler or repetition of the schema.
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 output schema exists, so return-value documentation is not needed. The description covers both required parameters, gives the composite ID format for host, and tells the agent exactly where to get light_id. For a straightforward single-resource getter, nothing essential is missing.
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 0%, so the description must document the parameters, and it does so thoroughly. It explains host as 'console name, ID, or composite ID (MAC:numericId format)' and light_id as required and sourced from list_lights, which is exactly the semantic information the schema lacks.
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 states a specific verb and resource: 'Get details for a single Protect light by ID.' This clearly differentiates it from siblings like list_lights (list all) and update_light (modify), and 'single ... by ID' removes ambiguity about scope.
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 clear workflow context by saying light_id should be obtained from list_lights, which implicitly tells the agent to call list_lights first. It does not explicitly state when not to use this tool or name alternatives, but the 'single ... by ID' phrasing supplies enough context for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_link_stationA
Get one link station by id (GET /v1/link-stations/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
link_station_id: REQUIRED. Obtain it from list_link_stations (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| link_station_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It explicitly says 'GET' and 'Get', which signals a read-only operation, and it gives the endpoint. However, it does not disclose error behavior, permissions, or side effects; for a straightforward retrieval this is a moderate gap rather than a severe one.
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?
Three compact sentences with the purpose front-loaded and each line adding endpoint context or parameter guidance. There is no filler or repetition of schema type constraints.
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, has an output schema, and the description covers the HTTP method, resource, and both required parameters. It lacks explicit not-found or error-handling semantics, but for a GET-by-id operation with an output schema present this is not a critical gap.
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?
With 0% schema description coverage, the description supplies needed meaning for both parameters: host can be a console name, ID, or composite MAC:numericId format, and link_station_id is required and should be taken from `list_link_stations`' id field. This fully compensates for the bare input schema.
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 opens with the specific verb-resource pair 'Get one link station by id', which exactly matches the tool name and clearly defines its scope. It also references the REST endpoint and ties the id to `list_link_stations`, distinguishing this single-item retrieval from the plural list operation.
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?
It tells the agent to obtain `link_station_id` from `list_link_stations`, giving a clear prerequisite workflow for using this tool. It does not explicitly state when not to use this tool or name alternatives, but the context is clear for a simple get-by-id operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_liveviewA
Get details for a single Protect liveview by ID.
host: console name, ID, or composite ID (MAC:numericId format).
liveview_id: REQUIRED. Obtain it from list_liveviews (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| liveview_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. 'Get details' clearly signals a read-only retrieval operation, and the added guidance on host ID formats and sourcing liveview_id from list_liveviews provides useful behavioral context. It does not mention permissions, errors, or rate limits, but for a simple get operation this is adequate.
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 compact and front-loaded: one clear purpose sentence followed by concise parameter guidance. Every sentence adds practical value, and there is no redundant or filler wording.
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 two-parameter retrieval tool with an output schema, the description covers the necessary ground: purpose, host formats, required parameter, and where to get the liveview ID. It does not discuss edge cases or error behavior, but nothing essential is missing for an agent to make a correct call.
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 0%, yet the description fully documents both parameters beyond the bare string type. host is explained with acceptable formats including 'console name, ID, or composite ID (MAC:numericId format)', and liveview_id is marked REQUIRED with an explicit acquisition source. This fully compensates for the schema's lack of descriptive content.
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 operation: 'Get details for a single Protect liveview by ID.' This specific verb+resource phrasing distinguishes it from listing and write operations such as list_liveviews or update_liveview, so an agent can select it correctly without ambiguity.
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 clear context for when to use this tool: after obtaining a liveview ID from list_liveviews. It also documents the valid host formats, which is practical invocation guidance. It does not explicitly state when not to use it or name alternatives, but the intended usage path is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mc_lag_domainA
Get one Multi-Chassis Link Aggregation domain.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. mc_lag_domain_id: domain UUID from list_mc_lag_domains.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| mc_lag_domain_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, but it only restates that this is a 'Get' operation. It does not disclose read-only guarantees, authorization requirements, potential errors, or side-effect-free behavior, leaving the agent to infer safety from the verb alone.
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 compact and front-loaded with the core purpose, followed by a clear mapping of each parameter. Every sentence earns its place with no redundancy.
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?
All three required parameters are explained with enough detail to construct a valid call, and an output schema exists to describe the result. Minor gaps are the lack of explicit usage boundaries and behavioral notes, but the essential calling information is present.
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 has 0% description coverage, and the description compensates fully by explaining each parameter: host accepted formats (console name, ID, or composite MAC:numericId), site as name or ID, and mc_lag_domain_id as a UUID sourced from list_mc_lag_domains. This goes well beyond the bare schema.
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 states a clear verb ('Get') and a specific resource ('one Multi-Chassis Link Aggregation domain'). It distinguishes from list_mc_lag_domains by singular/plural, but doesn't explicitly name a sibling alternative, so it stops short of the highest score.
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 a single domain and notes the mc_lag_domain_id comes from list_mc_lag_domains, giving a workflow hint. However, it never explicitly states when to prefer this tool over alternatives or any exclusions, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mobility_deviceA
Get full detail for one UMR device in a Mobility workspace.
Returns the complete DeviceDetail (WAN/cellular/WiFi/VPN/subscription/GPS, counts, and the summary fields) verbatim under device.
workspace_id: the workspace UUID from list_mobility_workspaces. device_id: the device UUID from list_mobility_devices. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does real work: it reveals the response is the complete DeviceDetail passed through 'verbatim under device', and that key_label is an optional routing selector among configured API keys. Missing are explicit read-only confirmation and behavior for invalid or absent IDs, which are minor for a single-item GET with an output schema.
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?
Four compact lines cover purpose, return shape, and all three parameter semantics with no filler. The most important claim ('full detail for one UMR device') is front-loaded, and the parameter notes use a consistent, scannable pattern.
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 tool with a present output schema, the description already explains the return container (verbatim DeviceDetail under device) and the full ID-sourcing workflow. The only gap is failure semantics — nothing on invalid UUIDs or authorization — which keeps it just short of 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?
Schema description coverage is 0%, so every parameter must be explained in prose, and the description delivers: workspace_id and device_id are tied to their source lists with provenance, and key_label's routing semantics and optionality (default null) are stated. This gives the agent everything needed to construct valid calls and goes well beyond the bare schema names.
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?
States a specific verb and resource — 'Get full detail for one UMR device in a Mobility workspace' — and enumerates the expected payload (WAN/cellular/WiFi/VPN/subscription/GPS, counts, summary fields). This distinguishes it from the list_mobility_devices enumeration and the update_mobility_device_* mutations among its siblings.
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 clear operational context by telling the agent where to source each required ID: workspace_id 'from list_mobility_workspaces' and device_id 'from list_mobility_devices'. It never explicitly contrasts this tool with alternatives (e.g., 'use list for summaries, this for full detail'), so it stops short of a 5, but the call sequence is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_networkA
Get a single network/VLAN by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
network_id: REQUIRED. Obtain it from list_networks (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| network_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The verb 'Get' clearly signals a non-mutating read operation, and the description adds the scoping detail that only one network is returned based on network_id. It does not discuss errors or authorization, but that is acceptable for a simple read operation with an output schema.
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 compact and front-loaded with the core action. Every sentence adds value: the first defines the operation, and the second provides essential parameter semantics. No filler or repetition.
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 single-fetch tool, the description covers invocation prerequisites, parameter formats, and how to obtain the key identifier. The presence of an output schema covers the response shape, leaving no significant gap for an agent to call this tool 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 description coverage is 0%, yet the description explains all three parameters: host accepts console name, ID, or composite ID, with explicit format; site accepts name or ID; network_id is marked REQUIRED and its provenance is explained. This fully compensates for the schema's lack of descriptions.
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?
States a specific verb and resource: 'Get a single network/VLAN by ID.' This clearly distinguishes it from list_networks (bulk retrieval) and get_network_application_info (application-specific network info), so an agent can select it correctly.
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 concrete guidance on how to construct the call, including accepted formats for host and site and explicitly directing the agent to obtain network_id from list_networks. It does not enumerate alternative tools or when-not-to-use conditions, but the singular/by-ID framing and the pointer to list_networks supply adequate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_application_infoA
Get the UniFi Network application version reported by a console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral context. It implies a read-only GET but does not disclose whether authentication is required, what happens on failure, whether the console must be online, or any other behavioral traits beyond the basic action.
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 concise sentences with no filler. The first sentence states the core purpose, and the second delivers the required parameter detail. 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?
Given the single parameter, an existing output schema, and the simple read-only nature, the description covers what is needed for a correct call. It could mention potential error conditions or the exact response shape, but the output schema presumably fills that gap.
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 only defines 'host' as a string with no description. The description explicitly clarifies the accepted formats: console name, ID, or composite ID (MAC:numericId), which is essential and non-redundant information.
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') and the resource ('UniFi Network application version') reported by a console. It is specific and unambiguous, and distinguishable from the sibling 'get_protect_application_info' which targets a different application.
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 about when to use this tool versus alternatives like get_system_info or get_host. The description only states the purpose and host parameter format, with no mention of context, prerequisites, or when a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_referencesA
Get all resources referencing a network — useful before deleting to check dependencies.
Returns WiFi broadcasts, firewall policies, and port profiles that use this network. host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. network_id: network UUID from list_networks.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| network_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It explicitly states this is a read operation ('Get', 'Returns') and enumerates the returned resource types. It does not mention permissions or edge cases, but for a read-only dependency check, this is sufficient 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 compact and front-loaded: purpose first, then return types, then parameter details. Every sentence adds value with zero fluff or repetition. The parameter explanations are concise and actionable.
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 has only three required parameters, and the description explains all three with formats and sources. An output schema exists to document the return structure, and the description supplements it by naming the concrete resource types. Nothing essential for calling the tool correctly is missing.
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 0%, so the description must fully compensate. It explains each parameter: host accepts console name, ID, or composite ID (MAC:numericId); site is name or ID; network_id is the UUID from list_networks. This provides complete semantic guidance beyond the bare string types in the schema.
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 'Get all resources referencing a network' and specifies the exact resource types returned (WiFi broadcasts, firewall policies, port profiles). This verb-resource pairing is distinctive and separates it from sibling tools like get_network or delete_network.
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 phrase 'useful before deleting to check dependencies' provides a clear situational context. It does not explicitly list alternatives or when-not-to-use, but the use case is specific enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nvrA
Get NVR details from a Protect console.
Returns NVR hardware info, storage status, firmware version, and system health. host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The tool has no annotations, so the description carries the behavioral disclosure burden. It discloses what fields are returned (hardware info, storage status, firmware version, system health), which is some useful behavior. However, it does not mention whether it requires authentication, whether the host must be a Protect-console host specifically, how it handles invalid hosts, or what the output schema's actual shape is beyond those categories.
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 and front-loaded: the main sentence states the resource and purpose, followed by the parameter clarification. It does not waste words, and the structure works well for an agent scanning it.
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?
There is an output schema present, so the return values do not need to be fully explained. Given a single required parameter and a rich output schema, the description covers the key missing piece - the host parameter's accepted formats - and enough about the response categories to orient an agent. It is slightly incomplete regarding error behavior and prerequisite host selection, but not severely.
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 0%, so the description must compensate for the bare schema. It defines 'host' as 'console name, ID, or composite ID (MAC:numericId format)', which adds genuine semantic value over the schema's minimal 'type: string'. A 4 is warranted because it clears up the ambiguous parameter format, though it could have added more examples.
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?
States a specific verb ('Get'), a resource ('NVR details from a Protect console'), and the core content (hardware info, storage, firmware, health). The sibling list contains related protect tools like get_camera, list_protect_events, and get_protect_application_info, but the description's focus on NVR details is distinct enough for an agent to differentiate it. It does not explicitly contrast with a sibling, so it does not earn a 5.
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 obvious use: when you need NVR details for a Protect console. It says nothing about when to use an alternative or when this would not be appropriate. Sibling tools with similar 'get' patterns exist, so an explicit routing hint would have helped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_port_profileB
Get a single switch port profile by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. profile_id: port profile ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry behavioral disclosure. It only says 'Get' and explains parameters; it does not describe return behavior, error conditions, read-only guarantees, or side effects. The name suggests a read operation but the description adds little behavioral context beyond that.
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 compact and front-loaded: the core purpose appears in the first sentence, followed by concise parameter definitions. Every sentence contributes useful information with no filler.
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 three-parameter get operation, the parameter explanations are adequate for making the call. However, there is no guidance on expected output structure, not-found behavior, or why both host and site must be provided together. These are gaps but not fatal for a straightforward read tool.
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 0%, so the description must compensate. It does so meaningfully by explaining accepted formats for host ('console name, ID, or composite ID (MAC:numericId format)') and site ('site name or ID'), and clarifies that profile_id is the port profile ID. This adds real value over the bare schema strings.
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 states a clear action and resource: 'Get a single switch port profile by ID.' The word 'single' and 'by ID' help distinguish it from list_port_profiles, though it does not explicitly name sibling tools that perform related operations like update_port_profile.
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 is given about when to use this tool versus alternatives such as list_port_profiles or update_port_profile. The parameter hints imply that it is for retrieving one known profile, but the description does not provide explicit 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.
get_protect_application_infoA
Get Protect application metadata (GET /v1/meta/info via Fabric proxy). Read-only.
Reports the Protect application version and Integration-API capabilities — the authoritative check for which extended Protect families this console supports. host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It declares the operation is read-only and uses a GET via Fabric proxy, which is valuable. But it doesn't mention permissions, error conditions, or response details beyond what the output schema provides.
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?
Three tight sentences: the operation and endpoint, the reported metadata and purpose, and the host parameter format. No fluff, every sentence earns its place, and the structure is logical.
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 metadata retrieval tool with one well-documented parameter and an existing output schema, the description is nearly complete. It lacks notes on authorization or potential errors, but these are minor for a read-only GET. The 'authoritative check' phrasing gives essential context.
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 0%, so the description must provide parameter meaning. It does so explicitly: 'host: console name, ID, or composite ID (MAC:numericId format)', giving an agent all needed information to format the parameter correctly.
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 identifies the specific verb 'Get', the resource 'Protect application metadata', and the endpoint. It distinguishes the tool from siblings by stating it reports version and Integration-API capabilities as the authoritative check for extended Protect families.
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?
It provides a clear use case: checking which extended Protect families the console supports, and labels itself as 'the authoritative check'. However, it doesn't explicitly mention when not to use it or name alternatives, though the context makes the purpose obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_protect_userA
Get one Protect user by id (GET /v1/users/{id}). Read-only.
host: console name, ID, or composite ID (MAC:numericId format).
user_id: REQUIRED. Obtain it from list_protect_users (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| user_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral transparency burden. It explicitly states 'Read-only' and shows the HTTP method, making the safety profile clear. It does not describe error cases or authentication needs, but for a simple getter this is sufficient behavior disclosure.
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 compact, front-loaded with the purpose, and devotes each sentence to useful information. It avoids boilerplate and repetition, making every line valuable.
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, both parameters are documented with formats and provenance, and an output schema exists so return values do not need to be repeated. The description gives an agent everything needed to select and invoke this tool 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 description coverage is 0%, so the description must explain both parameters on its own. It does: host accepts 'console name, ID, or composite ID (MAC:numericId format)', and user_id is marked REQUIRED with a clear provenance source in list_protect_users. This fully compensates for the empty schema descriptions.
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 states a specific verb-resource pair: 'Get one Protect user by id', reinforced by the explicit REST path 'GET /v1/users/{id}'. It clearly differentiates this from listing users and from sibling tools like get_ulp_user by naming the resource type 'Protect user'.
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 context is clear: call this when retrieving a single Protect user by its id. It also gives the important workflow hint that user_id should come from list_protect_users. It does not explicitly name alternatives or exclusions, but the intended usage is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_radius_profileB
Get a single RADIUS authentication profile by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. profile_id: RADIUS profile ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It only explains parameter formats and does not disclose behaviors like read-only nature, permission requirements, error conditions, or response characteristics beyond what an output schema might imply.
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 and well-structured: a one-sentence purpose followed by three terse parameter clarifications. No redundant or filler content.
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 a simple get operation and an output schema, the description is functional but incomplete. It lacks usage context (like when to use get vs list) and does not address potential authentication or error scenarios. The parameter semantics are minimal, and no annotations supplement the missing guidance.
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?
With 0% schema description coverage, the description partially compensates by explaining host ('console name, ID, or composite ID'), site ('site name or ID'), and profile_id ('RADIUS profile ID'). However, the explanation is shallow and lacks format details like the composite ID structure beyond a mention.
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') and the resource ('single RADIUS authentication profile by ID'). It is distinct from sibling tools like list_radius_profiles and create_radius_profile, so the purpose is unambiguous.
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 given on when to use this tool versus alternatives such as list_radius_profiles. There is no mention of prerequisites, scenarios, or cases where this tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recognition_group_countsA
Get aggregate recognition-group counts for a Protect console.
Returns totals such as totalCount, nameNotNullCount (named groups), nameIsNullCount, notificationEnabledCount, and degradedCount.
host: console name, ID, or composite ID (MAC:numericId format). type: recognition type. Use 'face' or 'vehicle' (singular — plural forms return HTTP 400 from upstream). Forwarded to the API as-is.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It reveals important behaviors: the upstream rejects plural type values with HTTP 400, type is forwarded as-is, and host supports multiple formats. It does not explicitly state read-only status but 'Get' implies it, and it does not hide side effects.
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 compact and front-loaded with the main purpose, followed by a clear list of return fields and parameter explanations. Every sentence carries required information with no fluff or redundancy.
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 two-parameter read-only aggregate-count tool, this description is complete: it covers both parameters' acceptable inputs, reveals an important upstream behavior (400 on plural), and lists the return fields. The presence of an output schema also offloads return-value detailing. No critical information is missing.
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 0% and the description fully compensates: it explains host formats (name, ID, or composite ID) and type constraints ('face' or 'vehicle', singular), including the upstream 400 error risk. Both required parameters are meaningfully described beyond their basic string type.
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 ('Get aggregate recognition-group counts') and identifies the resource ('a Protect console'), clearly distinguishing it from siblings like list_recognition_groups or get_recognition_group_image. The returned totals are listed, leaving no ambiguity about the tool's function.
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?
It clearly establishes when to use the tool by describing aggregate count outputs, but it does not explicitly name alternatives or exclusion conditions. The parameter guidance (singular forms, plural returns 400) is valuable but focuses on invocation rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recognition_group_imageA
Get a recognition group's reference crop. Returns base64-encoded JPEG image data.
host: console name, ID, or composite ID (MAC:numericId format). type: recognition type. Use 'face' or 'vehicle' (singular -- plural forms return HTTP 400 from upstream). Forwarded to the API as-is. group_id: the group's stable id, e.g. face_90.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| type | Yes | ||
| group_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses the output format (base64 JPEG), that the type parameter is forwarded as-is upstream, and that plural type values return HTTP 400. It does not explicitly state read-only semantics, but the 'get' verb and nature of the operation make this reasonably clear.
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 compact and front-loaded with the core purpose, followed by one line per parameter. Every sentence adds value, and the format is scannable and easy for an agent to parse.
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 an output schema exists, the description need not explain return values in detail, and it already mentions the base64 JPEG format. All three required parameters are described with formats and examples, making the tool fully callable without further research.
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 0%, so the description fully compensates by explaining all three parameters: host formats, accepted type values, and group_id's stable id format with an example. This is exactly the kind of semantic enrichment needed beyond the bare schema.
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 states a specific action ('Get a recognition group's reference crop') and a distinct resource, clearly distinguishing it from sibling tools like list_recognition_groups or get_recognition_group_counts. It also specifies the return type, leaving no ambiguity about what the tool does.
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 strong contextual guidance for parameters (which values are accepted, what causes HTTP 400), but it does not explicitly discuss when to choose this tool over alternatives such as get_thumbnail or list_recognition_detections. Usage is implied rather than contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_relayA
Get one relay by id (GET /v1/relays/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
relay_id: REQUIRED. Obtain it from list_relays (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| relay_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It identifies the operation as a GET request, implying read-only single-resource retrieval, and adds host id-format details. It doesn't discuss errors or auth, but the endpoint and retrieval semantics are clear.
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?
Three short sentences with the main action front-loaded. Each sentence adds a distinct piece of information: what it does, host format, and how to source relay_id.
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 two-parameter getter, the description covers the endpoint, both parameter formats, and the source of the id. The output schema exists, so return-value documentation is not the description's job.
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 0%, and the description fully compensates: host is explained as console name, ID, or composite ID, and relay_id is marked REQUIRED with explicit provenance from list_relays. Both parameters receive meaning beyond the bare string type.
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?
States a specific verb and resource ('Get one relay by id') and includes the exact REST endpoint. This clearly differentiates it from list_relays, update_relay, and relay_activate_output.
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?
Tells the agent to obtain relay_id from list_relays, which is a concrete prerequisite and workflow hint. It doesn't explicitly contrast with list/update/activate siblings, but the id lookup guidance covers the main usage decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rtsps_streamA
Get existing RTSPS stream URLs for a Protect camera.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. 'Get existing' indicates a read-only retrieval and avoids implying creation, but it does not disclose return format, failure behavior, permissions, or what happens when no RTSPS stream exists. This is adequate but not rich.
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 compact and front-loaded. The purpose is stated first, followed by two concise parameter clarifications. There is no filler or redundant text.
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 two-parameter getter with an output schema, the description provides the essential parameter semantics and provenance. It lacks explicit routing to sibling tools, but the tool name and surrounding context make the intended use 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?
Schema description coverage is 0%, so the description must compensate. It does well by explaining that host can be a console name, ID, or composite ID (MAC:numericId format), and that camera_id is required and obtainable from list_cameras. This adds real meaning beyond the bare string schema.
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 states a specific verb and resource: 'Get existing RTSPS stream URLs for a Protect camera.' This clearly distinguishes it from sibling tools like create_rtsps_stream and delete_rtsps_stream, and the word 'existing' reinforces the read-only scope.
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?
While the description gives useful parameter sourcing guidance ('Obtain it from list_cameras'), it does not explicitly state when to use this tool versus create_rtsps_stream or delete_rtsps_stream, nor does it mention any exclusions or prerequisites beyond obtaining camera_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduled_taskA
Get a single scheduled task by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. task_id: scheduled task ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. 'Get' signals a read-only lookup, and the host/site format clarifications add useful context, but there is no mention of error behavior, required permissions, or what happens if the task ID is not found. It is not misleading, but it is not fully transparent.
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 compact and front-loaded: the main purpose appears first, followed by three terse parameter clarifications. There is no filler, redundancy, or repetition of schema 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?
The parameter formats are sufficient to attempt a call, and the return value of 'a single scheduled task' is strongly implied by the name and first sentence. However, with no output schema, no annotations, and no mention of not-found or error behavior, the agent has little context about the outcome of the call.
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 0%, so the description must compensate for the bare string types. It does: host is described as console name, ID, or composite 'MAC:numericId' format, site as name or ID, and task_id as scheduled task ID. This adds real meaning beyond the schema, though task_id gets only a minimal restatement.
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 states the action ('Get'), the resource ('scheduled task'), and the selection criterion ('by ID'). The word 'single' clearly distinguishes it from the sibling tool list_scheduled_tasks, so an agent knows exactly what this tool returns.
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 phrase 'single ... by ID' implies this tool is for retrieving one known scheduled task rather than listing tasks, but it never explicitly names list_scheduled_tasks or states when not to use this tool. The usage context is implied rather than clearly contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdwan_configA
Get a single SD-WAN configuration by ID.
config_id: REQUIRED. Obtain it from list_sdwan_configs (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that config_id is required and where to get it, but doesn't disclose what the response contains (even though an output schema exists), whether the configuration is returned in a specific format, or any error behavior. For a read operation, it doesn't mention that it's non-mutating or idempotent. Given no annotations at all, this is a notable gap.
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, zero filler. The first sentence states the purpose, and the second gives the essential parameter guidance. Every word earns its place, and the critical 'REQUIRED' flag is front-loaded.
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 simplicity (one parameter, no nested objects) and the presence of an output schema, the description covers the essential context: what it does and where to get the ID. With no annotations, a bit more behavioral detail (e.g., that it's read-only, what the response looks like) would help, but the output schema likely compensates. The simplicity of the tool means this is fairly complete, but not fully.
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 0%, so the schema only provides the parameter name (config_id) and type (string). The description compensates by marking it REQUIRED and telling the agent exactly how to obtain it (from list_sdwan_configs' id field). This adds real semantic value beyond the schema. However, it doesn't describe the format of config_id or any constraints, so not a 5.
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's purpose: 'Get a single SD-WAN configuration by ID.' It names the specific verb (Get), resource (SD-WAN configuration), and identifier (ID). It doesn't explicitly differentiate from sibling tools like list_sdwan_configs or get_sdwan_config_status in the description, but the verb+resource+ID structure makes the purpose clear enough. It could have mentioned the distinction from get_sdwan_config_status, so not a 5.
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 explicit guidance on when to use this tool: when you have a config_id obtained from list_sdwan_configs. It states the precondition clearly ('Obtain it from list_sdwan_configs') and implies you should use this tool after listing. However, it doesn't explicitly say when not to use it or mention alternatives like get_sdwan_config_status, so it's clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdwan_config_statusA
Get the status of an SD-WAN configuration by ID.
config_id: REQUIRED. Obtain it from list_sdwan_configs (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the basic read operation but does not mention whether the operation is read-only, what the response format contains, or any potential side effects. The absence of any behavioral context beyond 'get status' is a notable gap.
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 extremely concise, consisting of two sentences with no wasted words. The first sentence states the action, and the second provides critical parameter sourcing. This is an exemplary model of efficiency.
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 single-parameter simple status-check operation, the description covers the essential input and its provenance. The presence of an output schema (even if not detailed here) reduces the need to explain return values. However, it could benefit from a brief note on the relationship to get_sdwan_config or the exact status semantics.
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 description explicitly states config_id is REQUIRED and instructs the agent to obtain it from list_sdwan_configs, adding meaningful semantics beyond the schema's bare string type. Although schema coverage is 0%, this direct guidance effectively compensates for the missing parameter documentation.
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 gets the status of an SD-WAN configuration by ID, with a specific verb and resource. However, it does not differentiate from sibling get_sdwan_config, which may retrieve configuration details, leaving some ambiguity about the exact distinction.
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 guidance on where to obtain config_id (from list_sdwan_configs), which is useful for usage. However, it does not explicitly state when to use this tool versus get_sdwan_config or other related tools, leaving the selection context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sensorA
Get details for a single Protect sensor by ID.
host: console name, ID, or composite ID (MAC:numericId format).
sensor_id: REQUIRED. Obtain it from list_sensors (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| sensor_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the disclosure burden. It clarifies that `sensor_id` is required and defines allowed `host` formats, which is useful behavior/context. However, it does not disclose return-value shape, error behavior, or whether the API has any side effects (though a GET is reasonably implied). This is adequate but not rich.
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 three sentences and front-loads the main purpose first, then explains parameters. Every sentence contributes essential information. It is concise, though it could slightly improve structure by separating parameter details into a clearer format.
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 an output schema present, return values need not be described. The description provides the required ID source and host format, which is sufficient for calling the tool. Minor gaps are lack of error/not-found behavior and no explicit statement that this is a read-only operation, but for a simple get-by-ID tool the context is nearly 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?
Schema description coverage is 0%, so the description fully compensates by explaining what `host` can be (console name, ID, or composite ID with MAC:numericId format) and that `sensor_id` is required and comes from `list_sensors`. This adds meaning the bare schema lacks.
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 retrieves details for a single Protect sensor by ID, with a specific verb (get), resource (sensor), and identifier requirement. It also differentiates it from the sibling `list_sensors` by noting the ID comes from there, so an agent can distinguish this single-item read tool from the broader list tool.
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 states the required parameter (`sensor_id`) and tells the agent how to obtain it (from `list_sensors`), which is strong usage guidance. It doesn't mention when to avoid this tool or alternatives beyond that implicit distinction, but the context of fetching a single sensor versus listing all sensors is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingA
Get a controller setting group by key.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. setting_key: setting group identifier (e.g. 'mgmt', 'super_smtp', 'guest_access').
There is no schema endpoint, so reading a group is how you discover what it accepts: the returned object lists every settable field and its current (valid) value. Inspect it before calling update_setting — the controller silently drops any field or enum value it does not recognise, so match an existing field's shape exactly. Common keys and notable enum fields (grounded in live responses): mdns (mode, enabled_for), ntp (setting_preference), doh (state), ips (ips_mode), global_nat (mode), ssl_inspection (state), dashboard (layout_preference), locale (timezone), country (code), guest_access (auth), super_mgmt (data_retention_setting_preference). Fields prefixed 'x_' hold credentials/secrets and are returned verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| setting_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It discloses that the returned object lists every settable field and current valid value, that update_setting silently drops unrecognized fields, and that fields prefixed 'x_' hold credentials/secrets and are returned verbatim. This is substantial, non-obvious behavioral detail.
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 front-loaded with the core purpose, then parameter definitions, then practical discovery guidance. Although it includes a list of common keys, each element serves a real purpose given the absence of schema descriptions. Every sentence adds value, and the structure makes scanning easy.
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 description is complete for a tool with three string parameters, no output schema, and no annotations. It covers what the tool does, the exact meaning of every parameter, how to use the result, what to do before update_setting, a credential-handling caveat, and common valid keys. No critical operational information is missing.
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 0%, and the description compensates thoroughly. It defines host as console name, ID, or composite ID in MAC:numericId format, site as site name or ID, and setting_key as a setting group identifier with concrete examples. It also provides a list of common keys and their notable enum fields, which is essential for correct parameter values.
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 states a specific verb and resource: 'Get a controller setting group by key.' It clearly differentiates from related tools by explaining that reading a group is how you discover what update_setting accepts, and names update_setting explicitly as the follow-up tool.
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 explicit guidance: 'There is no schema endpoint, so reading a group is how you discover what it accepts.' It instructs the agent to inspect the returned object before calling update_setting and warns about the controller silently dropping unrecognized fields and enum values. This is a clear when-to-use statement with an explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sirenA
Get one siren by id (GET /v1/sirens/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
siren_id: REQUIRED. Obtain it from list_sirens (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| siren_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. The explicit HTTP GET method signals a read-only operation, and the host format and id provenance add useful behavioral context. It does not describe error/not-found behavior, but the output schema likely covers the return shape.
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?
Three concise lines front-load the purpose and endpoint, then detail the two parameters with no redundant text. Every sentence 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?
The tool has only two required parameters, both fully explained. Output schema handles return values, and the description gives enough workflow context for an agent to call it 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 description coverage is 0%, so the description fully compensates. It explains host's accepted formats (console name, ID, or composite ID) and siren_id's required status and source. This goes far beyond the bare string types in the schema.
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?
States a specific verb ('Get'), a single resource ('one siren'), and the exact endpoint (GET /v1/sirens/{id}). The 'by id' scope clearly differentiates it from list_sirens and other siren-related 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?
The instruction to obtain siren_id from `list_sirens` implies the intended workflow for fetching a specific siren after listing. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_health_summaryB
Get health summary for a single site: uptime, alerts, and device counts.
site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It identifies this as a read-only retrieval operation, but does not disclose behaviors such as required permissions, latency, possible errors for invalid site names/IDs, or what the response contains beyond the brief list. This leaves significant behavioral uncertainty.
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: the first states the operation and outputs, and the second defines the single parameter. Every sentence earns its place and the most important information is front-loaded.
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 is a simple single-parameter read operation with no annotations, the description is reasonably complete for basic use. However, it lacks guidance on how to handle site lookup failures, what the output structure contains, and how this differs from related summary tools. These are notable omissions for a tool that must be invoked accurately among many siblings.
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 has only one parameter, 'site', and its format is just 'string'. The description adds meaning by stating 'site name or ID', which clarifies accepted values beyond the raw schema. However, it does not provide additional detail such as whether IDs are numeric/UUID or how partial/ambiguous names are handled, so there is a baseline moderate contribution.
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 specifies the action (get health summary) and resource (a single site), and enumerates the returned data: uptime, alerts, and device counts. While it does not explicitly distinguish itself from siblings like get_site_statistics or get_fleet_summary, the stated scope of 'single site' and the listed content provide adequate clarity.
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 when to use it by specifying that it operates on a single site and listing the summary contents, but it does not provide explicit guidance on when to prefer this tool over alternatives such as get_site_statistics or get_fleet_summary. There is no mention of exclusions or alternative tools for broader/multi-site queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_inventoryA
Get full inventory for a site: all devices and connected clients.
site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It communicates that this is a read operation returning a full inventory, but it does not disclose whether the call can be expensive, whether special permissions are required, or how the response is shaped beyond the separate output schema.
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?
Both sentences earn their place: the first states the tool's purpose and scope, and the second defines the only parameter. There is no filler, redundancy, or restatement of the schema.
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 single-parameter read-only endpoint with an output schema, the description is largely sufficient: it identifies the resource, scope, and parameter semantics. It is not fully complete only because it does not hint at when this endpoint is preferable to related list endpoints.
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?
With 0% schema description coverage, the description compensates by defining 'site' as 'site name or ID.' This adds meaningful semantics beyond the bare string type, though it could be richer with more detail about ID format or uniqueness.
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 and resource: 'Get full inventory for a site' and defines its scope as 'all devices and connected clients.' This distinguishes it from siblings like list_site_devices and list_clients by signaling that it returns a combined, site-scoped inventory snapshot rather than a single category list.
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?
There is no explicit guidance on when to use this tool versus alternatives such as list_site_devices, list_clients, or get_site_statistics. The description only implies an inventory use case; it does not provide when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_statisticsA
Get site health statistics: latency, throughput, and client counts per subsystem.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns a list of subsystem health objects from the Classic REST /stat/health endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does reveal that this is a read operation against the Classic REST /stat/health endpoint and that it returns a list of subsystem health objects. However, it does not disclose pagination behavior, real-time vs cached data, units of latency/throughput, or any authentication/permission requirements.
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 compact: it front-loads the core action and payload ('latency, throughput, and client counts per subsystem'), then adds parameter syntax and the endpoint in two more sentences. There is no unnecessary filler, though the structure could have separated usage notes more clearly.
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?
Without an output schema or annotations, the description should clarify the return format more richly. It says 'Returns a list of subsystem health objects' but does not describe the object fields, units, or possible error conditions. For a read-only stats tool this is acceptable but leaves room for ambiguity.
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 input schema provides zero descriptions (0% coverage), so the description must compensate. It does: host is defined as console name, ID, or composite ID (MAC:numericId format), and site is defined as site name or ID. This adds real meaning beyond the bare schema and helps an agent populate required parameters correctly.
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 the purpose: fetch site health statistics including latency, throughput, and client counts per subsystem. It names the resource and even the underlying endpoint (/stat/health). However, it does not explicitly differentiate itself from similar siblings like get_site_health_summary or compare_site_performance, which could confuse an agent.
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?
It explains both required parameters and their accepted formats (host console name/ID/composite ID, site name/ID), which is useful usage guidance. But it does not state when to prefer this tool over the closely related get_site_health_summary or other statistics/summary tools, nor does it give exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_speakerA
Get one speaker by id (GET /v1/speakers/{id}).
host: console name, ID, or composite ID (MAC:numericId format).
speaker_id: REQUIRED. Obtain it from list_speakers (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| speaker_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It explicitly states the GET method, indicating a non-destructive read operation, and specifies the acceptable forms of the host parameter. For a simple lookup, this is sufficient 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 compact, front-loaded with the core action, and each sentence earns its place by clarifying either the endpoint or a parameter. There is no filler or repetition.
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 that an output schema exists, the description need not explain return values. It covers both required parameters and their sources. Minor omissions like error behavior or when to prefer list_speakers for bulk retrieval are not critical for this simple getter.
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 0%, but the description fully compensates: it explains the host accepts a console name, ID, or composite ID with a specified format, and gives a precise derivation path for speaker_id via `list_speakers`. This adds significant meaning beyond the bare string schema.
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 the verb ('Get'), resource ('one speaker'), and identifier dimension ('by id'), plus the exact HTTP endpoint. It is distinguished from list_speakers by the word 'one' and from update_speaker/speaker_test_sound by the read-only intent.
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 tells the agent how to obtain the required speaker_id from `list_speakers`, which is a clear usage pointer. It does not explicitly enumerate when not to use this tool, but the 'one speaker by id' framing plus the sibling list makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_switch_stackA
Get one switch stack.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. switch_stack_id: switch-stack UUID from list_switch_stacks.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| switch_stack_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the operation is 'Get' but does not disclose any behavioral traits such as required permissions, potential errors, or response shape. The output schema exists but the description adds no extra context beyond the basic read operation.
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 minimal and front-loaded with the core action, followed by concise parameter explanations. No redundant words. Every sentence 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?
Given the simplicity of the tool and the presence of an output schema, this description covers the essential details: it explains all parameters and their sources. It lacks only usage context or error handling notes, which are minor for a simple get operation.
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 0%, so the description must explain each parameter. It does this excellently: host and site formats are specified ('console name, ID, or composite ID (MAC:numericId format)'), and switch_stack_id is tied to list_switch_stacks. This fully compensates for the bare schema.
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 states the exact operation ('Get one switch stack') with a clear resource. It distinguishes itself from list_switch_stacks by implying a single-item retrieval, and explicitly references switch_stack_id from list_switch_stacks, which provides context for the resource type.
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 when to use this tool by requiring a switch_stack_id obtained from list_switch_stacks, but it does not explicitly state when to use this versus alternatives or when not to use it. For a straightforward getter, this is acceptable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Get controller/console system info: version, uptime, and memory.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns system info objects from the Classic REST /stat/sysinfo endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it adds useful behavior: it names the Classic REST /stat/sysinfo endpoint, says the tool returns system info objects, and explains accepted host/site identity formats. It does not detail error behavior or auth requirements, but the read-only nature is clear from 'Get'.
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 compact and front-loaded: purpose first, then parameter semantics, then endpoint source. Every sentence adds value and there is no filler or repetition.
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 two-parameter GET with no output schema, the description covers purpose, parameter formats, and return content. It is mostly complete, though it does not describe the exact shape of the returned system info object or potential failure modes.
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 0%, and the description fully compensates by explaining both parameters: host accepts console name, ID, or composite ID in MAC:numericId format, and site accepts a site name or ID. This adds substantial meaning beyond the bare string type in the input schema.
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 states a specific verb ('Get') and resource ('controller/console system info') and enumerates the returned fields (version, uptime, memory). It clearly distinguishes this from sibling stats tools like get_site_statistics and get_device_statistics by targeting the system/controller level.
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 usage context is implied: use this when you need controller/console system-level version, uptime, or memory. However, it does not explicitly state when not to use it or name alternatives, even though many related stats tools exist among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thumbnailA
Get a detection thumbnail crop. Returns base64-encoded JPEG image data.
host: console name, ID, or composite ID (MAC:numericId format). thumbnail_id: the thumbnailId from a detection record.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| thumbnail_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful behavioral context: returns base64-encoded JPEG and explains the composite ID format for host. But it does not disclose potential errors, rate limits, authentication needs, or the fact that this is a read-only operation beyond the verb 'get'. Some transparency is present but not rich.
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 compact and front-loaded: the main purpose and return format appear first. Parameter explanations follow in a clean format. Every sentence earns its place; no fluff or redundancy.
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?
An output schema is present, so return values are presumably documented. The description covers both required parameters and clarifies the host's composite format. For a simple retrieval tool, this is sufficient; minor gaps like error handling are not critical given the output schema.
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 0%, so the description must compensate. It does: host is explained as 'console name, ID, or composite ID (MAC:numericId format)' and thumbnail_id is tied to detection records. This gives agents meaningful guidance beyond raw string type declarations.
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 a detection thumbnail crop' — a specific verb and resource. It distinguishes itself from generic getters like get_camera_snapshot or get_recognition_group_image by mentioning 'detection' explicitly. However, it does not name or differentiate from those sibling tools, so it falls short of a 5.
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: thumbnail_id is described as 'from a detection record', suggesting it should be used when the agent already has a detection record. But it gives no explicit guidance on when to use this tool versus alternatives like get_recognition_group_image or get_camera_snapshot. No exclusions or when-not-to-use are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traffic_matching_listA
Get a single traffic matching list by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
list_id: REQUIRED. Obtain it from list_traffic_matching_lists (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| list_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It does not state whether the operation is read-only, whether special permissions are needed, what the return structure is, or any edge cases (e.g., missing list behavior). The only behavioral hint is the verb 'Get', but no explicit disclosure beyond that.
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 and front-loaded with the core purpose. Parameter explanations are compact and directly tied to the schema fields, with 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?
Given the tool has an output schema, return values need not be described. All three parameters are clearly defined and the ID acquisition path is given. The only gap is lack of behavioral context (e.g., read-only nature), which is minor for a simple get operation but not fully covered.
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 0%, but the description adds valuable semantics for all three parameters: host format (console name, ID, or composite MAC:numericId), site format (name or ID), and list_id source. This fully compensates for the schema's bare string types.
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 a single traffic matching list by ID' with a specific verb and resource, distinguishing it from list/create/update/delete siblings. The object's role as a single-item fetch is unambiguous.
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 explains how to obtain list_id from list_traffic_matching_lists, which is helpful prerequisite info. However, it does not explicitly state when to prefer this tool over alternatives like list_traffic_matching_lists, nor any exclusion criteria. Usage context is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_traffic_routeA
Get a single traffic route by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
route_id: REQUIRED. Obtain it from list_traffic_routes (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| route_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only states the action ('Get') without revealing any additional behavior such as permission requirements, error handling, or response format. This is a minimal read operation, yet the description adds little beyond what the tool name implies.
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 three sentences with no fluff. The core purpose is front-loaded, and the parameter clarifications are concise and directly useful. Every sentence 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?
Given there is no output schema and no annotations, the description could have included what the response contains or behavior on missing/invalid IDs. However, for a simple single-entity retrieval with well-clarified parameters, the current description is mostly sufficient, though not fully 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 provides only type strings with 0% description coverage, but the description compensates fully by clarifying acceptable formats: host can be console name, ID, or composite ID (MAC:numericId), site can be name or ID, and route_id is required with a clear source. This is essential semantic detail that the schema alone does not provide.
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 states a specific verb ('Get') and resource ('single traffic route by ID'), clearly differentiating from list/create/delete route siblings. It also names the source for obtaining the route_id, reinforcing the tool's single-entity retrieval 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?
The description tells the agent exactly how to obtain the required route_id ('Obtain it from list_traffic_routes'), which is practical usage guidance. It does not explicitly state when to use this tool versus alternatives, but the purpose is self-evident from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ulp_userA
Get one ULP (UniFi account) user by id (GET /v1/ulp-users/{id}). Read-only.
host: console name, ID, or composite ID (MAC:numericId format).
ulp_user_id: REQUIRED. Obtain it from list_ulp_users (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| ulp_user_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It proactively states 'Read-only', which is critical behavioral context. It also explains the composite ID format for host, giving the agent necessary operational detail. It does not mention error handling or required permissions, but for a simple read operation this is sufficient.
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 compact and information-dense. Every sentence serves a purpose: the first declares the operation and endpoint, the second defines host, and the third defines ulp_user_id with a cross-reference. No filler or redundancy.
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 that an output schema exists, the return format is already documented. The description covers both parameters fully, states the read-only nature, and provides a cross-reference to the sibling list tool. Nothing essential for an agent to invoke this correctly is missing.
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 0%, so the description must compensate. It does so thoroughly: for host it details the three valid formats, and for ulp_user_id it marks it as REQUIRED and gives a precise origin ('Obtain it from list_ulp_users (its id field)'). This adds meaning far beyond the bare schema definitions.
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 specifies a clear verb ('Get'), a specific resource ('one ULP user'), and the identifying parameter ('by id'). It also includes the explicit HTTP endpoint, which unambiguously defines the operation. This distinguishes it from sibling tools like list_ulp_users, which lists users rather than fetching a single one.
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 concrete usage guidance: it explains the host parameter's accepted formats (console name, ID, or composite ID) and explicitly instructs the agent to obtain ulp_user_id from list_ulp_users. It does not explicitly exclude alternative tools like get_user or get_protect_user, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userA
Get a single DHCP/client-alias entry by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
user_id: REQUIRED. Obtain it from list_users (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Get a single...' which suggests a read operation, but it does not explicitly describe safety, return values, error behavior, or any side effects. This is insufficient for a tool with no annotations and no output schema.
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 and efficient, with three short sentences. Each sentence earns its place: the first states the purpose, the second clarifies two parameters, and the third explains the critical user_id provenance. No redundancy or filler.
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 description fully covers parameter semantics and hints at the required workflow, but it lacks any mention of return payload, error conditions, or permission requirements. Since there is no output schema, the description should at least indicate what the 'entry' contains or what happens on failure, leaving the context incomplete.
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 provides no property descriptions (0% coverage), but the description richly explains each parameter: host (console name, ID, or composite ID format), site (name or ID), and user_id (required, sourced from list_users). This adds essential meaning far beyond the bare schema definition.
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 states a specific verb and resource: 'Get a single DHCP/client-alias entry by ID.' This clearly identifies what the tool does and distinguishes it from list-type tools like list_users or other getters such as get_client by narrowing the resource type to DHCP/client-alias entries.
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 a usage flow by instructing to obtain user_id from list_users, giving context on how to prepare parameters. However, it does not explicitly state when to prefer this tool over similar getters (e.g., get_client, get_host) or provide exclusions, so 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.
get_viewerA
Get details for a single Protect viewer by ID.
host: console name, ID, or composite ID (MAC:numericId format).
viewer_id: REQUIRED. Obtain it from list_viewers (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| viewer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral context. It only says 'Get details', which is a simple read operation, but it does not explicitly state that the operation is non-mutating, has no side effects, or requires specific permissions. While a get operation is inherently safe, the description adds no behavioral context beyond the verb.
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 compact and front-loaded: the first sentence states the core purpose, and the second sentence provides parameter-specific guidance. No filler or redundant information is present.
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 that the tool has an output schema (though not displayed), return value details are covered externally. The parameter semantics are fully explained, and the tool is simple. A slight gap remains: no explicit guidance on when to prefer this over get_camera or other get-* tools, but the context is sufficient for the intended use.
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?
With 0% schema description coverage, the description fully compensates by explaining the host format ('console name, ID, or composite ID (MAC:numericId format)') and clarifying that viewer_id is required and obtainable from list_viewers. This adds substantial meaning beyond the plain string type in the schema.
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 states a specific verb ('Get'), a clear resource ('details for a single Protect viewer'), and the identifier ('by ID'). This distinguishes it from list_viewers (which lists) and update_viewer (which modifies) without needing to reference 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?
The description explains how to obtain viewer_id from list_viewers, providing a clear workflow. It lacks an explicit exclusion of alternatives (e.g., 'use list_viewers to list all' or 'use update_viewer to modify'), but the workflow is strongly implied and practical for a single-view lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vpn_serverA
Get a single VPN server configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. server_id: VPN server ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| server_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. 'Get' signals a read-only operation, but the description does not mention required permissions, error behavior, or what part of the configuration is returned. The presence of an output schema mitigates return-value ambiguity.
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 front-loaded with the main purpose in the first sentence, followed by compact, useful parameter notes. There is no filler, redundancy, or 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?
All three required parameters are semantically covered, and an output schema exists to document return values. The main gap is the absence of a pointer to list_vpn_servers when the server_id is unknown, but this is a minor completeness issue for a simple getter.
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 has 0% description coverage, and the description compensates by explaining all three parameters: host as console name/ID/composite ID with MAC:numericId format, site as name/ID, and server_id as the VPN server ID. Only server_id is somewhat tautological, but the overall compensation is strong.
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 states a specific verb ('Get'), a clear resource ('single VPN server configuration'), and a selection criterion ('by ID'). This distinguishes it from broader operations such as list_vpn_servers without ambiguity.
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: use this tool when you need one VPN server config by ID. However, it does not explicitly say when to use this versus list_vpn_servers or mention prerequisites like how to obtain the server_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wifi_broadcastA
Get a single WiFi broadcast SSID by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
broadcast_id: REQUIRED. Obtain it from list_wifi_broadcasts (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| broadcast_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic 'get' operation without mentioning response behavior, error conditions, permissions, or any side effects. The output schema exists but the description adds no behavioral context beyond the action itself.
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 compact, with the primary function front-loaded in the first sentence, followed by concise parameter definitions. Every sentence carries useful information with no redundancy.
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 single-resource getter, the description covers the essential inputs and how to obtain the ID. An output schema exists, so return values need not be described. It lacks mention of potential errors or prerequisites, but given the simplicity, it is nearly 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?
Schema description coverage is 0%, so the description fully compensates. It explains all three parameters: host includes formats (console name, ID, or composite MAC:numericId), site is name or ID, and broadcast_id is marked required with a pointer to `list_wifi_broadcasts`. This is detailed, practical guidance that the schema alone lacks.
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 operation: "Get a single WiFi broadcast SSID by ID." The verb 'Get' and the resource 'WiFi broadcast SSID' are specific and distinguish this tool from siblings like list_wifi_broadcasts (list all) and update/delete_wifi_broadcast (mutations).
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 explains how to use the tool by defining each parameter's role, especially the source of broadcast_id via `list_wifi_broadcasts`. It provides clear context for retrieval but does not explicitly state when to prefer this over alternatives or mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wlan_configA
Get a single WLAN (SSID) configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. wlan_id: WLAN config ID. Returned verbatim, including plaintext x_passphrase credential fields.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| wlan_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description compensates by disclosing that the response is returned verbatim and includes plaintext x_passphrase credential fields—an important, non-obvious behavior. It does not mention permissions or error cases, but the sensitive-data warning adds significant 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 compact and well-structured: one-line purpose, followed by parameter definitions, then a behavioral warning. Every sentence adds value, with no fluff or redundancy.
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 a simple 3-parameter read operation with no output schema, the description covers the action, parameter semantics, and return characteristics (verbatim, plaintext credentials). Minor gaps like error handling or authorization requirements are acceptable for this tool's complexity.
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 0%, so the description carries the full burden. It provides concrete meanings for all three parameters: host (console name, ID, or composite MAC:numericId), site (name or ID), and wlan_id. This fully compensates for the schema's bare string types.
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 states a specific action ('Get a single WLAN configuration by ID'), identifies the resource (WLAN/SSID config), and clearly distinguishes it from list and update sibling tools. The verb+resource+scoping is unambiguous.
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 explains what each parameter means and implies the tool is for retrieving a specific config when its ID is known. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select it over list_wlan_configs or update_wlan_config.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wlan_groupA
Get a single WLAN group by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. group_id: WLAN group ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| group_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only explains parameter formats (host, site, group_id) and the read-only verb 'Get', but does not mention whether any side effects occur, what the response contains, whether special permissions are required, or error behavior. The description adds minimal behavioral context beyond what the name implies.
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 extremely concise: a single functional sentence followed by a compact parameter legend. Every line earns its place, with no filler or repetition. The layout cleanly separates the action from parameter semantics, making it easy for an agent to parse quickly.
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 description covers all three required parameters and their accepted formats, which is the core need for invoking the tool. However, with no output schema, no annotations, and no mention of return values or error conditions, the agent lacks information about what response to expect. For a simple read-only getter this is a moderate gap, making it barely adequate.
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?
With 0% schema description coverage, the description fully compensates by explaining each parameter: host is a console name, ID, or composite ID; site is a name or ID; group_id is a WLAN group ID. Since the schema only provides types, this additional detail is essential and well provided. A small deduction for lacking concrete examples or further formatting constraints.
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 specific action and resource: 'Get a single WLAN group by ID.' The verb 'Get' and the resource 'WLAN group' are unambiguous, and the 'single... by ID' scope distinguishes it from list-type siblings like list_wlan_groups and get_wlan_config. The one-sentence opening fully conveys what the tool does.
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 a single WLAN group is needed, but it does not explicitly state when to choose this over alternatives such as list_wlan_groups, nor does it provide exclusions or prerequisites. There is no mention of when not to use this tool. The parameter guidance is helpful but does not address selection context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsA
List local RADIUS user accounts for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returned verbatim, including plaintext x_password credential fields.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It usefully warns that results are returned verbatim and include plaintext x_password credential fields, which is important and non-obvious. It could go further by stating read-only status or pagination, but the sensitive-output warning is strong context.
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?
Three concise, front-loaded sentences with no filler. The purpose comes first, then parameter explanations, then a meaningful behavioral warning. Every sentence 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?
Given the low complexity, no output schema, and no annotations, the description covers the operation, required parameters, and a critical output characteristic. It is nearly complete, though it does not mention potential pagination or whether the full account list is returned at once.
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 0%, so the description must fully document the parameters. It does: 'host' is explained as console name, ID, or composite ID with a specific format, and 'site' as name or ID. This adds essential meaning that the bare string schema lacks.
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 states a specific verb ('List') and a specific resource ('local RADIUS user accounts for a site'), which clearly distinguishes this tool from siblings like list_users, get_account, and list_radius_profiles. It also clarifies the scoping to local RADIUS accounts per 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 purpose implies when to use it — when listing local RADIUS accounts for a site — but it does not explicitly mention alternatives or say when not to use it. The context is clear enough for an agent to infer usage, but there is no direct comparison with related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_acl_rulesA
List all ACL rules for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that host accepts name/ID/composite ID formats and that site accepts name or ID, which is useful. It does not state read-only behavior, pagination, or side effects, though 'List' strongly implies a non-mutating operation.
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, no wasted words; the operation is front-loaded and parameter guidance follows immediately.
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 operation with only two required parameters, the description covers the essential identification semantics and an output schema exists to define the return shape. It could add an explicit note on alternatives or any pagination, but nothing essential is missing.
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 input schema has no property descriptions (0% coverage), but the description compensates by defining both parameters: host can be a console name, ID, or composite ID (MAC:numericId), and site can be a name or ID. This gives an agent enough to fill the required fields correctly.
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 states a specific verb (List), a concrete resource (ACL rules), and the scope (for a site), clearly distinguishing this list operation from sibling get_acl_rule (which fetches one rule) and the mutating ACL 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?
It does not explicitly name alternatives or state when not to use it; instead, 'all' implies listing the collection while siblings like get_acl_rule cover single-rule retrieval. The required host/site context is given, but no direct routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_clients_statsA
List detailed per-client statistics: traffic, signal strength, and experience score.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns a list of client stat objects from the Classic REST /stat/sta endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavior on its own. It reveals the return type (a list of client stat objects) and names the underlying endpoint (/stat/sta), but does not define what 'active' means, whether results are limited, paginated, or require permissions. This leaves major behavioral traits undisclosed.
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 three short, purposeful sentences: purpose first, then parameter explanations, then a return note. There is no filler or repetition of the schema. It is well-structured and front-loaded.
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 list operation with no output schema or annotations, the description gives only a high-level return description and some parameter context. It does not clarify the scope of 'active' clients, possible errors, or return object details beyond the three named metrics. This is adequate for basic usage but leaves meaningful gaps for an agent.
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 input schema only defines two string properties with no descriptions, so the description fully compensates by explaining the accepted formats for host (console name, ID, or composite MAC:numericId) and site (name or ID). This gives an agent enough to construct valid values. Minor ambiguity remains around what a 'composite ID' is precisely.
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 ('List') and identifies the exact resource ('detailed per-client statistics') plus the data types (traffic, signal strength, experience score). This clearly distinguishes it from siblings like list_clients or get_client, which deal with client records rather than statistics. It is a clear, non-tautological statement.
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?
There is no explicit 'when to use' or 'when not to use' guidance, and no alternatives are named. The intended usage is only implied by the descriptive verb and resource. An agent could infer it is for stats retrieval, but not why it should be chosen over similar stat tools like list_device_stats or get_historical_stats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alarm_hubsA
List alarm hubs on a Protect console (GET /v1/alarm-hubs via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits on its own. It indicates the operation is a GET (read-only) but does not mention permissions, pagination, rate limits, or any side effects. The HTTP method implicitly suggests safety, but the description does not explicitly confirm behavior beyond listing, which is insufficient for full 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 two sentences with no wordy filler. It front-loades the main action and endpoint, then immediately explains the parameter format. Every sentence carries useful information, making it appropriately concise and well-structured.
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 a simple list operation with one parameter, the description covers the essential information: what is listed, the endpoint, and how to specify the host. Since an output schema exists, return values are already defined, so that gap is covered. A minor missing piece is explicit guidance on when to choose this over get_alarm_hub, but overall it is complete enough to invoke 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?
The schema provides only a bare 'host' string with no description (schema coverage 0%), so the description's clarification that 'host' can be a console name, ID, or composite ID (MAC:numericId format) is essential and adds significant meaning. It fully compensates for the schema's lack of documentation.
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 a specific verb ('List') and resource ('alarm hubs') and identifies the exact endpoint (GET /v1/alarm-hubs) and proxy mechanism (Fabric proxy). This distinguishes it from siblings like get_alarm_hub (single item) and update_alarm_hub (modification), so an agent can immediately understand its scope.
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 explains the host parameter format (console name, ID, or composite ID), which is useful for invoking the tool, but it does not explicitly state when to use this tool versus alternatives like get_alarm_hub. The usage context is implied rather than directly stated, leaving some room for interpretability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_clientsA
List all connected clients across all sites.
Fans out requests to every site and aggregates results with source host/site annotations on each client record. key_label: scope query to consoles visible to a specific API key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explains that the tool fans out requests to every site and aggregates results with source host/site annotations, which is meaningful beyond the function name. It does not mention potential performance costs or failure behavior, but the disclosed fan-out and aggregation behavior is substantial.
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 three short sentences, each earning its place: the first states the core purpose, the second explains the fan-out and annotation behavior, and the third documents the parameter. It is front-loaded with the main action and contains no filler or repetition.
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 description, combined with the presence of an output schema and a single optional parameter, covers the essential aspects: what the tool does, its cross-site behavior, the aggregated result annotations, and the parameter's role. It could additionally warn about the cost or latency of fanning out to every site, but nothing critical is missing for correct invocation.
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 input schema only defines key_label as a nullable string with a default, but the description adds meaning by stating "key_label: scope query to consoles visible to a specific API key." This compensates for the 0% schema description coverage and gives the agent actionable guidance on how the parameter affects behavior. It does not specify allowed values or where to find the label, but it is sufficient for one optional 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 states the exact verb and resource: "List all connected clients across all sites." It clearly differentiates from siblings like list_clients by emphasizing the cross-site scope and the aggregation behavior. The agent can tell exactly what this tool does without needing to infer from the name.
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 clearly indicates this tool is for listing clients across all sites, contrasting with any site-scoped alternative. It says "across all sites" and "Fans out requests to every site," which gives clear context for when this tool is appropriate. It does not explicitly name alternative tools or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_devicesA
List all devices across the entire fleet.
Aggregates devices from all consoles. Optionally filter by status (e.g. 'offline', 'online', 'updating') to find problem devices quickly. status_filter is applied LOCALLY by exact (case-insensitive) match against each device's status/state. WARNING: an unrecognised value is NOT rejected — it matches nothing and returns an EMPTY device list, so a typo (e.g. 'ofline') looks like a healthy fleet with zero problem devices rather than an error. Omit status_filter to get the full fleet, then read the real status values off the returned records. key_label: scope query to a specific API key (use list_configured_api_keys to see available keys).
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No | ||
| status_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and delivers: it discloses local exact case-insensitive matching, the non-rejecting behavior of unrecognized status values, and the resulting false-negative risk (typo appears healthy). This is precisely the kind of behavioral nuance agents need.
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 dense but every sentence earns its place. The critical warning is front-loaded and clearly structured, and parameter guidance is separated. Nothing extraneous.
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 output schema exists, return-value explanation is unnecessary. The description covers parameter behavior, edge cases, and usage advice completely for a two-optional-param list tool.
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 0%, so the description compensates fully: it explains status_filter matching semantics and the warning around typo behavior, and it explains key_label scoping with a pointer to the key-listing tool. Both parameters are meaningfully described.
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 opens with 'List all devices across the entire fleet' and clarifies it aggregates devices from all consoles. It clearly distinguishes this from device-listing siblings by emphasizing the fleet-wide scope.
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?
Explicitly explains when to use status_filter for finding problem devices, warns against unrecognized values causing empty results, and advises omitting it for full fleet visibility. It also directs users to list_configured_api_keys for key_label options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_sites_aggregatedA
List all sites with aggregated health stats from the /v1/sites/ API.
Returns sites merged with health summary: device counts, client counts, alerts, and connectivity status in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the call aggregates health stats and returns device counts, client counts, alerts, and connectivity status in one merged result. However, it does not mention pagination, data freshness, authentication requirements, or rate-limit behavior, leaving some gaps for a list-all operation.
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: the first states the action and endpoint, the second lists the returned data. It is front-loaded and contains no filler.
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 no parameters and an output schema available, the description fully covers what an agent needs: the purpose, the aggregation behavior, and the included data categories. No critical calling information is missing.
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 tool has zero parameters and the schema coverage is 100%, so there is no parameter ambiguity. The description correctly avoids adding irrelevant parameter details, and the baseline for no-parameter tools 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 states a specific verb and resource: 'List all sites with aggregated health stats'. It clearly identifies the endpoint and distinguishes itself from sibling list_sites by the aggregation/health-summary feature.
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 when to use this tool: when you need sites merged with health summary data in a single call. It provides clear context, though it does not explicitly name alternatives like list_sites or get_site_health_summary or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_arm_profilesA
List arm profiles on a Protect console (GET /v1/arm-profiles via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format). Availability requires a Protect application exposing the v7.1.87 Integration API.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose the Fabric proxy transport path, the exact endpoint, and the v7.1.87 Integration API requirement. However, it does not explicitly confirm read-only behavior, authentication needs, or error conditions, leaving some burden unmet.
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 three short, information-dense sentences. It front-loads the purpose and endpoint, then clarifies the host parameter and availability requirement with 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 single-parameter list tool with an output schema, the description covers the endpoint, target console, host identifier formats, and API availability constraint. It is complete for basic invocation, though it could optionally mention when to use get_arm_profile for a single profile.
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 only defines host as a string, but the description adds meaning by specifying accepted forms: 'console name, ID, or composite ID (MAC:numericId format)'. This materially helps an agent populate the parameter correctly despite the 0% schema description coverage.
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 states the specific operation 'List arm profiles' on a Protect console and gives the exact endpoint 'GET /v1/arm-profiles via Fabric proxy'. This clearly identifies the action and resource, but it does not explicitly contrast with get_arm_profile or other arm-profile siblings, so differentiation is mostly implicit.
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?
There is no explicit guidance on when to use this tool versus alternatives like get_arm_profile, create_arm_profile, or update_arm_profile. The availability prerequisite is useful but is not a usage guideline. The intended use is only implied by the word 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bridgesA
List bridges on a Protect console (GET /v1/bridges via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full behavioral burden. It reveals that the operation is a GET request via a Fabric proxy, implying read-only behavior, but it does not mention pagination, result size limits, required permissions, or any potential side effects. Some useful context is provided, but significant gaps remain.
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 with no redundant words. The core purpose is stated first, followed by the parameter clarification. Every sentence contributes valuable 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?
For a simple list tool with one parameter, an output schema, and no annotations, the description covers the essential information: what it does, the route, and parameter format. It lacks some peripheral context like pagination or approval requirements, but these are less critical for a read-only GET list operation. The presence of an output schema reduces the need to explain return values.
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 0%, so the description fully compensates by explaining the host parameter in detail: console name, ID, or composite ID in MAC:numericId format. This adds critical meaning beyond the bare string type in the schema, making it clear how to populate the required 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?
Description clearly states the tool lists bridges on a Protect console, specifies the HTTP endpoint (GET /v1/bridges via Fabric proxy), and uses a distinct verb and resource. It is easily distinguishable from sibling tools like get_bridge (single bridge) and update_bridge (modify), even though it doesn't explicitly contrast 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?
The description implies usage context: use it to list bridges on a Protect console. However, it does not explicitly state when to prefer this over get_bridge or update_bridge, nor does it mention any exclusions or alternative routing. The intent is fairly clear from the name and GET method, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_camerasA
List all cameras on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden, but 'List all cameras' honestly describes a read-only operation and includes the host resolution format ('console name, ID, or composite ID (MAC:numericId)'). It does not mention pagination or authentication, but the simple listing behavior is not misleading.
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 sentences with no filler. The core purpose is front-loaded, and the host detail follows immediately, making it easy to scan and understand.
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 one-parameter list operation with an output schema present, the description covers the purpose and the only parameter's allowed formats. Minor details about pagination or filtering are not critical for this simple list scope.
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 0%, so the description must compensate. It effectively explains that host accepts a console name, ID, or composite MAC:numericId format, giving the agent meaningful input guidance beyond the bare string type in the schema.
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 ('List all cameras') and the scope ('on a Protect console'), specifying the resource. It does not explicitly differentiate from similar sibling tools like list_devices or get_camera, but 'cameras' and 'Protect console' are specific enough for an agent to infer the target.
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?
There is no guidance on when to use this tool versus alternatives such as list_devices or get_camera, and no exclusions are mentioned. The only usage hint is the host parameter format, which is more about parameter input than decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_carrier_service_plansA
List the Carrier / ISP Fabric service plans for the authenticated organization.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Not query- paginated by the API; the full set is returned under service_plans.
key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It goes beyond a simple list action by disclosing that the tool is not testable against live hardware, hermetic/spec-conformance testing only, and is not query-paginated since the full set is returned under service_plans. This gives the agent important operational context.
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 compact and front-loaded: it states the core purpose first, then adds relevant behavioral caveats and parameter semantics. Each sentence provides useful information without padding or redundancy.
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 operation with one optional parameter and an output schema present, the description is sufficiently complete. It covers the resource scope, pagination behavior, testing status, and the key_label parameter's purpose, so an agent has enough context to invoke the tool 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?
The schema description coverage is 0%, so the description fully compensates for the only parameter. It explains that key_label is optional and that it is a configured API-key label used to route on a specific key, adding meaning beyond the raw schema type and default.
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 states a specific verb ('List') and resource ('Carrier / ISP Fabric service plans') and scopes it to 'the authenticated organization.' This clearly defines what the tool does and distinguishes it from sibling tools like get_carrier_service_plan, which fetch a single plan.
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 implicitly conveys when to use the tool: when you need the full set of service plans for the organization. It also notes that the API is not query-paginated and returns the complete set, which helps with expectations, but it does not explicitly mention alternatives or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_carrier_subscribersA
List Carrier / ISP Fabric subscribers visible to the authenticated ISP key.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only — the Carrier Fabric is not deployed here. Cursor-paginated by the API; every page is drained and the complete list is returned under subscribers.
plan_id: optional service-plan UUID filter. suspended: optional boolean filter. sort: optional createdAt/-createdAt/name/-name/subscriberNumber/-subscriberNumber. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| plan_id | No | ||
| key_label | No | ||
| suspended | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses pagination behavior ('Cursor-paginated by the API; every page is drained'), visibility scope ('visible to the authenticated ISP key'), and a notable testing caveat ('hermetic/spec-conformance tested only'). It also confirms the return shape ('complete list is returned under subscribers'). While it doesn't cover permissions or rate limits, the disclosed details are substantial and useful.
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 information-dense with each sentence earning its place: function, testing caveat with pagination, and parameter semantics. A slight redundancy exists ('Not testable...' and 'the Carrier Fabric is not deployed here') and the second sentence is long, but overall it is structured 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?
Given the output schema exists and all parameters are described, the core calling requirements are covered. The testability caveat adds important context. The main gap is the lack of guidance on when to use this tool versus related carrier subscriber tools, which would make the context fully 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?
Schema description coverage is 0%, so the description must compensate fully. It does: each parameter is explicitly explained with acceptable values, including the sort options (createdAt/-createdAt/name/-name/subscriberNumber/-subscriberNumber) and the purpose of key_label. This exceeds what the bare schema provides and gives an agent enough to use the parameters correctly.
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 opens with a specific verb and resource: 'List Carrier / ISP Fabric subscribers visible to the authenticated ISP key.' This clearly identifies what the tool does and its scope, distinguishing it from related tools like get_carrier_subscriber (single item) and list_carrier_service_plans (different 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?
The description does not state when to use this tool versus alternatives or provide exclusions. It mentions the testability limitation and pagination behavior, but offers no guidance on selecting this list tool over the many sibling carrier tools. Context is implied only by the tool's name and general list purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chimesA
List all chimes on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description's read-only nature is only implied by the verb 'List' rather than stated. It does add a scoping behavior ('on a Protect console') and explains the host identifier formats, but it does not mention side effects, permissions, or response behavior.
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 with no filler. The primary function is front-loaded, and the parameter explanation is placed immediately after, making it efficient and easy to parse.
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 single-parameter tool with an output schema, the description covers the function, scope, and parameter format. It could mention whether get_chime is more appropriate for a single chime, but that is a usage guideline gap, not a completeness gap.
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 only defines 'host' as a string, but the description adds critical meaning by stating it accepts 'console name, ID, or composite ID (MAC:numericId format)'. This fully compensates for the 0% schema coverage and tells an agent exactly what values are valid.
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 states a specific verb ('List'), a specific resource ('chimes'), and a location ('on a Protect console'). This clearly distinguishes it from sibling tools like get_chime and update_chime, which operate on a single chime or modify it.
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 phrase 'List all chimes' implies the tool is for enumerating chimes rather than fetching or updating one, but it does not explicitly state when to prefer this over get_chime or update_chime, nor does it provide exclusions. This is adequate but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clientsA
List connected clients for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
By default every page is drained and the complete client list is returned
as {data, totalCount}. offset/limit: fetch a single page manually (the
API's totalCount is surfaced so you can advance). client_type: convenience
shorthand — WIRELESS, WIRED, or ALL (default: all types) — translated into
the upstream type.eq(...) filter (the raw type query parameter is ignored
by the UniFi API, so this translation is what actually narrows the result).
filter: optional Network Integration API filter expression, forwarded
unchanged as the upstream filter query parameter for server-side filtering
(e.g. type.eq('WIRED'), macAddress.eq('aa:bb:cc:dd:ee:ff')); omitted
entirely when unset. client_type and an explicit filter are mutually
exclusive (the upstream grammar has no conjunction operator to compose them);
passing both raises an error rather than silently returning wrong results. A
capped drain returns the clients gathered so far with incomplete=true rather
than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No | ||
| client_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly. It discloses the default full drain behavior, the {data, totalCount} return shape, manual pagination semantics, how client_type is translated to an upstream filter, that the raw type parameter is ignored, mutual exclusivity with filter, and the incomplete=true behavior for capped drains. These are non-obvious behaviors an agent needs to know.
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 dense but every sentence earns its place. It opens with the core purpose, then uses clear parameter-by-parameter notes. Given six parameters and multiple non-obvious behaviors, the length is justified and well organized.
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 description is complete for a tool with no annotations and no output schema. It covers all parameters, pagination, return shape, filtering behavior, error case for mutually exclusive options, and partial-drain semantics. An agent has enough information to invoke the tool correctly and interpret the result.
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 0%, so the description must compensate. It explains every parameter meaningfully: host formats (console name, ID, composite MAC:numericId), site as name or ID, offset/limit for manual paging, client_type allowed values and default, and filter as an upstream Network Integration API expression. This goes far beyond the bare schema types.
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 states a specific verb and resource: 'List connected clients for a site.' It clearly scopes the operation to connected clients and requires host/site context, which helps distinguish it from broader tools like list_all_clients or list_known_clients. The one-line opening is unambiguous and 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?
The description explains when to use the default drain behavior versus manual offset/limit pagination, and when to use client_type versus an explicit filter. It does not explicitly name sibling alternatives or give a 'when not to use' exclusion, but the context for using this tool is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_client_sessionsA
List historical client connection sessions from the Classic REST /stat/session endpoint.
This is the highest-value history tool: retention is ~90 days, so it covers far more than the currently-connected client list.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. start/end: epoch SECONDS (UTC). This endpoint uses seconds natively — passing milliseconds returns HTTP 200 with an EMPTY array and no error, so seconds are enforced (millisecond-magnitude values are rejected). session_type: session class filter. The values that actually narrow the result are "all" (default — the full unfiltered set), "user" (regular clients), and "guest" (guest-network clients). WARNING: an unrecognised value is NOT rejected and does NOT return an empty array — the endpoint silently ignores it and returns the full "all" set, so a typo yields everything rather than a visible error or "no data". (UniFi documents "voucher" as a fourth class; on tested firmware it returned the full set, so prefer "user"/"guest" for real narrowing.)
Each session includes mac, is_wired, assoc_time (session start, epoch seconds), duration (seconds), ap_mac, rx_bytes, tx_bytes, satisfaction, hostname, ip, _id, and roaming_sessions[]. Two things that surprise callers:
There is NO explicit disconnect timestamp — session end is assoc_time + duration.
Radio band lives ONLY inside roaming_sessions[] (radio_band: na/ng/6e), never at the top level. Wired sessions have ap_mac=null and carry sw_mac/sw_port instead.
The response is passed through verbatim, including identifiers (MAC/IP/hostname).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| host | Yes | ||
| site | Yes | ||
| start | Yes | ||
| session_type | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden, and it delivers: it discloses retention, millisecond input behavior leading to empty arrays, silent ignoring of unrecognized session_type values, absence of disconnect timestamps, radio band location, wired session specifics, and verbatim identifier passthrough. This is exceptional 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?
Although long, the description is densely packed with actionable warnings and parameter semantics. Each sentence, paragraph, and parenthetical adds information the agent needs to call the tool correctly; there is no filler.
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 no annotations, the description fully compensates by documenting return fields, surprising behaviors, edge cases, and parameter constraints. An agent has everything needed to invoke this tool correctly and interpret its response.
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 0%, so the description must explain every parameter, and it does: host formats, site formats, start/end epoch units with enforcement details, and session_type values with warnings about invalid values. Nothing is left to schema guesswork.
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 states a specific verb and resource ('List historical client connection sessions') and names the exact endpoint ('Classic REST /stat/session endpoint'). It further distinguishes this tool from the currently-connected client list, so an agent can immediately understand its scope.
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 frames this as 'the highest-value history tool' and contrasts its ~90-day retention with the currently-connected client list. This gives clear when-to-use guidance against the main alternative class of client-listing tools, without ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_configured_api_keysA
List all configured API keys with their labels and types.
Shows which API keys are available for MSP multi-console queries. Returns labels and org-key status without exposing actual key values.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly guarantees that actual key values are not exposed, which is a critical safety behavior. It also clarifies the output scope (labels, types, org-key status). It does not mention permissions or side effects, but for a read-only list operation this is adequate.
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?
Three concise sentences with zero fluff. The first sentence gives the core action and resource; the second adds usage context; the third clarifies privacy and output fields. Every sentence 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 parameterless read-only tool with an output schema present, the description fully covers purpose, scope, and a critical privacy guarantee. No missing information would prevent an agent from selecting and invoking this tool 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?
The tool has zero parameters, so the baseline of 4 applies. The description adds meaningful context about what the returned data represents without needing to explain any 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 specific verb 'List' with clear resource 'configured API keys' and states it returns labels and types. It explicitly notes it does not expose actual key values, which distinguishes its purpose from any potential key-manipulation tools. Among siblings, no other tool targets API keys, so it stands alone clearly.
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 states a clear context ('Shows which API keys are available for MSP multi-console queries'), telling the agent when this tool is relevant. It does not explicitly mention when to avoid using it, but given the unique resource and simple read-only nature, the usage context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_countriesA
List all countries with ISO codes available on a console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. 'List' implies a read-only operation, and the host parameter indicates the list is console-scoped, but the description does not mention error behavior, invalid host handling, or whether the result set changes by host. Still, for a simple list operation, the core behavior is reasonably clear.
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 compact: one sentence states the tool's purpose, and one sentence documents the required parameter format. There is no redundant or filler content.
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 output schema exists and the tool has a single required parameter, the description is nearly complete. The only minor gap is that 'console' is not explicitly defined, though the host parameter format makes it sufficiently clear that it refers to a console device identifier.
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 0%, and the description fully compensates by explaining the only parameter: 'host: console name, ID, or composite ID (MAC:numericId format).' This gives the agent concrete accepted formats beyond the bare string type in the schema.
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 states a specific verb ('List'), a clear resource ('all countries with ISO codes'), and a scoping condition ('on a console'). This clearly distinguishes it from sibling list tools such as list_sites or list_accounts, which fetch different resource types.
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 should be used when an agent needs the list of countries available on a given console. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it; for a unique list operation, this is adequate but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List all devices across the fleet with status, firmware, and model.
host: optional filter by console name, ID, or composite ID (MAC:numericId format). By default every page is drained and the complete device list is returned. Pass page_token to fetch a single page manually (the response then carries a nextToken cursor to continue). A capped drain returns the devices gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavior and covers it well: it discloses that all pages are drained by default, that page_token switches to single-page mode with a nextToken cursor, and that a capped drain returns incomplete=true instead of truncating silently. These are genuinely valuable behavioral details beyond what a basic list description provides.
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 purpose is front-loaded in the first sentence, followed by a concise parameter note and a tight explanation of paging behavior. Every sentence adds information needed to call the tool correctly, with no filler.
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 description covers the tool's purpose, both optional parameters, accepted host formats, and the non-obvious pagination/truncation contract. Since an output schema exists to document return values, nothing essential is missing for an agent to invoke this 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?
Despite 0% schema description coverage, the description documents both parameters: host accepts a console name, ID, or composite MAC:numericId format, and page_token controls manual single-page fetching with a nextToken cursor. This fully compensates for the bare input schema.
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 opens with a specific verb and resource: 'List all devices across the fleet with status, firmware, and model,' which makes the core purpose immediately clear. It does not explicitly differentiate this tool from the sibling list_all_devices or list_site_devices, so it misses the top score.
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 clear context for when to use the tool: to get a fleet-wide device listing, optionally filtered by host, and it explains the default full-drain behavior versus manual page_token fetching. It does not explicitly name when-not-to-use alternatives, but the usage context is clear and not merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_device_statsA
List per-device statistics: CPU load, memory, uptime, and port throughput.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns a list of device stat objects from the Classic REST /stat/device endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits itself. It states that the tool returns a list of device stat objects and identifies the source endpoint, which implies a read-only operation. However, it does not mention error scenarios, performance implications, or whether the data is real-time vs historical, so coverage is only partial.
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 three concise sentences: the first defines the operation, the second explains both parameters compactly, and the third specifies the return type. It is front-loaded and contains no filler.
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 two-parameter list operation with no output schema, the description covers the core purpose, parameter semantics, and return shape. It omits usage differentiation and potential caveats like pagination or error behavior, but these are secondary given the tool's 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?
The input schema provides only bare string types, so the description compensates by explaining that host accepts a console name, ID, or composite ID in MAC:numericId format, and that site accepts a name or ID. This gives concrete value formats that the schema lacks, fully clarifying both required 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?
The description clearly identifies the operation as listing per-device statistics and enumerates the specific metrics (CPU, memory, uptime, port throughput). It also names the underlying endpoint, which helps distinguish it from similar device-stat tools, but it does not explicitly disambiguate from get_device_statistics, so it lacks explicit sibling differentiation.
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 no guidance on when to prefer this tool over alternatives such as get_device_statistics or list_devices. It only explains parameter formatting, not selection criteria. This leaves the agent without explicit routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_device_tagsA
List all device tags defined in a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the operation but does not mention that this is a read-only action, any required permissions, pagination/limitations, or what the response will look like. Even for a simple list operation, the lack of explicit behavioral context leaves the agent to assume safety and output characteristics.
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 and every word earns its place. It states the resource and operation first, then provides clarifying parameter formats. There is zero redundancy or filler.
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 simplicity and the existence of an output schema, the description covers the essential operation and parameter semantics. It lacks explicit usage guidance and read-only disclosure, but these are minor for a straightforward list operation with well-documented parameters.
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?
With 0% schema description coverage, the description fully compensates by explaining both parameters: "host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID." This adds concrete meaning that the bare input schema lacks, making the parameters self-explanatory.
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 exact operation: "List all device tags defined in a site." It uses a specific verb and resource, and the operation is unambiguously distinct from sibling tag tools like create_device_tag, update_device_tag, and delete_device_tag.
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 useful parameter format context but does not explicitly state when to use this tool versus alternatives. The list operation is implied by the name and phrasing, but there is no clear guidance on when to choose it over other tag-related operations or any mention of exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_policiesA
List all DNS policies for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. DNS policies are offset-paginated (native default page size 25); by default every page is drained and the complete list is returned as {data, totalCount}. Pass offset or limit for a single manual page. A capped drain is flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and handles it well. It discloses the default page-draining behavior, native page size, return shape ({data, totalCount}), manual pagination via offset/limit, and the incomplete flag for a capped drain — key behavioral traits an agent needs.
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 compact and well structured: purpose first, then parameter formats, then pagination behavior. Every sentence contributes essential information without repetition or filler.
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 list operation with an output schema available, the description is complete. It covers the required parameters, pagination semantics, default behavior, and response shape. No critical call-time information appears to be missing.
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 0%, so the description must compensate. It adds meaning for host (console name, ID, or composite ID), site (name or ID), and explains the role of offset/limit in selecting a single manual page. This covers all four parameters, though limit/offset could be further clarified (e.g., whether limit is a count or max page size).
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 opens with a specific verb and resource: 'List all DNS policies for a site.' It clearly identifies the operation's scope (site) and distinguishes this list operation from single-policy siblings like get_dns_policy.
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 clear operational context: it explains that pagination is offset-based, defaults to draining all pages, and describes the manual page mode. It does not explicitly name alternatives such as get_dns_policy, but the list-vs-get distinction is strongly implied by the 'all DNS policies' scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dpi_applicationsA
List DPI applications available for traffic rules.
Companion to list_dpi_categories; use application IDs in traffic rule configurations. host: console name, ID, or composite ID (MAC:numericId format). site: ignored — DPI data is host-level, not site-scoped. By default every page is drained and the complete catalogue is returned as {data, totalCount}. Pass offset/limit to fetch a single page manually. A capped drain returns the applications gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It fully discloses pagination behavior (all pages drained by default, manual paging with offset/limit, capped drain returns incomplete=true), host format requirements, and site parameter irrelevance. This is exemplary 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 dense but compact; each sentence earns its place. It flows logically from function to companion tool to parameter details to pagination behavior. No filler or repetition.
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 simplicity, an output schema existing, and no annotations, the description covers everything an agent needs: purpose, parameter semantics, pagination behavior, and return format. There are no critical gaps.
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 0%, so the description must explain all parameters. It does: host format (console name, ID, or composite MAC:numericId), site being ignored, and limit/offset behavior for page draining. Every parameter receives meaningful semantic explanation beyond the raw schema.
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 states a specific verb ('List') and resource ('DPI applications') and immediately ties it to traffic rules. It also names its companion tool (list_dpi_categories), distinguishing it from that sibling. This leaves no ambiguity about what the tool does.
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 it is a companion to list_dpi_categories and explains the intended use (application IDs in traffic rule configurations). It also clarifies that the site parameter is ignored, which prevents misuse. It does not explicitly describe when not to use this tool, but the contextual guidance is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dpi_categoriesA
List DPI (Deep Packet Inspection) app categories available for traffic rules.
Categories include Social Media, Streaming Video, Gaming, etc. host: console name, ID, or composite ID (MAC:numericId format). site: ignored — DPI data is host-level, not site-scoped. By default every page is drained and the complete catalogue is returned as {data, totalCount}. Pass offset/limit to fetch a single page manually. A capped drain returns the categories gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | No | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It reveals default page draining, the return shape {data, totalCount}, manual pagination via offset/limit, and the incomplete=true behavior on capped drains. It also clarifies the host format and site-ignored semantics. This is rich, non-obvious behavior that an agent must know, and it is clearly stated.
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 efficiently structured: a short purpose sentence, an optional example list, then each parameter's meaning, followed by default behavior and pagination semantics. Every sentence adds value; there is no fluff or repetition. The front-loading of purpose aids quick understanding.
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 a simple list operation, and the description fully covers the parameters, the host/site scoping, and the pagination behavior. Since an output schema exists, the return structure need not be reiterated. No critical behavioral aspects are left undocumented, making the description complete for an agent to invoke 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 description coverage is 0%, so the description must compensate. It does: it defines the host parameter values (console name, ID, composite ID), states that site is ignored, and explains the role of limit/offset in pagination. This adds meaning beyond raw types and defaults, giving the agent enough to use each parameter correctly.
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 states a specific verb ('List') and resource ('DPI app categories'), explicitly scoping them 'for traffic rules'. It provides example categories (Social Media, Streaming Video, Gaming) that distinguish the domain. The name itself is clear, and the description reinforces it without ambiguity, separating it from similar list tools like list_dpi_applications.
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 practical context: it explains how to specify the host (console name, ID, or composite ID), states that site is ignored, and explains pagination behavior. However, it does not explicitly mention when to prefer this tool over alternatives such as list_dpi_applications or when not to use it. The guidance is contextual but lacks explicit exclusion or sibling differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dynamic_dnsA
List Dynamic DNS provider configurations for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returned verbatim, including plaintext x_password credential fields.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It goes beyond the tool name by warning that the response is 'Returned verbatim, including plaintext x_password credential fields,' which is a significant, non-obvious behavioral trait. It does not cover auth or rate limits, but the plaintext credential warning is high-value context.
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 compact and front-loaded: the first sentence states the core purpose, the second explains parameters, and the third adds a security-relevant return trait. Every sentence earns its place with no redundancy.
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 two-parameter list tool with no annotations and no output schema, the description covers the purpose, all parameter formats, and a notable plaintext-credential response detail. It does not spell out the exact output shape or pagination, but the description provides enough for a correct invocation.
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 0%, and both parameters are unannotated strings. The description fully compensates by specifying accepted forms for each: host is 'console name, ID, or composite ID (MAC:numericId format)' and site is 'site name or ID.' This gives the agent all the semantic meaning the schema lacks.
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 states a specific verb and resource: 'List Dynamic DNS provider configurations for a site.' This clearly identifies what the tool does and distinguishes it from related siblings like get_dynamic_dns and update_dynamic_dns with the plural action 'List' and site scoping.
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 clear context ('for a site') and implies the tool is for listing configurations, but it does not explicitly say when to choose this over get_dynamic_dns or update_dynamic_dns, and it offers no exclusions or alternatives. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_groupsB
List firewall groups (IP/port sets referenced by firewall rules) for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'List', which implies read-only but does not explicitly state safety, pagination, return format, errors, or any other behavioral traits. The description carries the full burden but fails to disclose meaningful behavior beyond the operation name.
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 and front-loaded. The first sentence states the purpose clearly, and the second provides parameter semantics in a compact format. No unnecessary words or repetition.
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 tool with no output schema and no annotations, the description is incomplete. It explains the operation and parameters but lacks any mention of the return value, pagination, error behavior, or prerequisites. It also does not guide the agent on when to use this tool relative to siblings, leaving gaps for correct invocation.
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 0%, so the description must compensate. It does so by explaining both parameters: host can be a console name, ID, or composite MAC:numericId format; site is a name or ID. This adds useful detail beyond the bare schema definition, though it could clarify their relationship or required format expectations.
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 'List' with a clear resource 'firewall groups' and defines what firewall groups are (IP/port sets referenced by firewall rules). It also scopes to a site, distinguishing it from related sibling tools like get_firewall_group or list_firewall_rules.
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?
There is no explicit guidance on when to use this tool versus alternatives. While it mentions firewall groups are referenced by rules, it does not state when to choose this over list_firewall_rules or get_firewall_group. No exclusions or alternative names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_policiesA
List firewall policies for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
By default every page is drained and the complete policy list is returned as
{data, totalCount}. Pass offset/limit to fetch a single page manually (the
API's totalCount is surfaced so you can advance). filter: optional Network
Integration API filter expression, forwarded unchanged as the upstream filter
query parameter for server-side filtering (e.g. name.like('*guest*'),
metadata.origin.eq('USER_DEFINED')); omitted entirely when unset. A capped drain
returns the policies gathered so far with incomplete=true rather than truncating
silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it excels. It reveals default drain behavior, the 'incomplete=true' flag on capped drains, the exact response shape ({data, totalCount}), how offset/limit override the default, and that filter is forwarded unchanged as the upstream query parameter. Nothing about its runtime behavior is hidden.
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 information-dense but every sentence earns its place. It opens with the core purpose, then sequentially details host/site, pagination defaults, output shape, filter semantics, and truncation behavior. No filler, no repetition, and the most important scoping details are front-loaded.
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 paginated list-and-filter tool with five parameters and no annotations, the description is remarkably complete. It covers required parameters, optional pagination, filter syntax, return format, and edge-case behavior (capped drain with incomplete=true). An agent could invoke this tool correctly without any additional context.
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 0%, so the description is the sole source of parameter meaning. It explains every parameter: host (console name, ID, or composite ID), site (name or ID), limit/offset (manual pagination), and filter (server-side expression format with concrete examples and 'omitted when unset'). This goes well beyond simply re-stating the schema.
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 opens with a clear verb-resource pair: 'List firewall policies for a site.' It precisely identifies both the object (firewall policies) and the required scope (site), distinguishing it from sibling tools like list_firewall_rules and list_firewall_groups without ambiguity.
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 clearly implies its usage: when you need the list of firewall policies for a given host/site. It thoroughly explains the pagination and filtering semantics, giving the agent the context to choose this tool over simpler listing alternatives. It stops short of explicit 'when not to use' or comparison with specific siblings, but the naming and detail make the intended use unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_rulesA
List classic L3/L4 firewall rules for a site (distinct from Integration API policies).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description relies on 'List' to signal a read-only action and adds scoping detail for host and site identifiers. It does not disclose pagination, output shape, permissions, or rate-limit behavior, so behavioral transparency is only partial.
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 extremely compact: one sentence states purpose and distinction, and one sentence covers both parameter formats. Every phrase earns its place, and key information is front-loaded.
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 two-parameter read operation with no annotations or output schema, the description covers the essential invocation details well. It leaves minor gaps such as return format/pagination and does not explicitly compare to list_firewall_policies or list_firewall_groups, but these are not critical for making a correct call.
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 provides no property descriptions (0% coverage), but this description compensates by defining both required parameters: host accepts console name, ID, or composite ID in MAC:numericId format, and site accepts site name or ID. This gives practical, format-level meaning beyond the bare string schema.
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 opens with the verb 'List' and a specific resource type, 'classic L3/L4 firewall rules', scoped to a site. The parenthetical 'distinct from Integration API policies' further differentiates it from potential sibling confusions, making the purpose clear and unambiguous.
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 clear context for the operation and explicitly excludes one alternative ('Integration API policies'). It does not mention other relevant alternatives such as get_firewall_rule or list_firewall_policies, but the intended use case is clear enough for a list operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_zones_proxyA
List all firewall zones for a site via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Zones are offset-paginated (native default page size 25); by default every page is drained and the complete list is returned as {data, totalCount}. Pass offset or limit for a single manual page. A capped drain is flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals pagination mode, default page size, the auto-drain behavior, the return shape {data, totalCount}, the manual single-page mode, and the incomplete cap flag. This is unusually transparent.
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 compact and information-dense. The purpose is front-loaded, followed by parameter clarification and pagination behavior. Every sentence adds necessary information with no filler.
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 simple 4-parameter schema, the description fully covers required identifiers, optional pagination parameters, return shape, and edge-case behavior. The capped-drain incomplete flag is a useful detail that prevents an agent from silently trusting truncated results.
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 0%, so the description must compensate. It does: host is documented as console name, ID, or composite ID in MAC:numericId format; site as name or ID; and offset/limit are explained in the pagination context. It could add value by specifying constraints like minimum offset or maximum limit, but the provided semantics are sufficient.
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 states a specific verb and resource: 'List all firewall zones for a site via connector proxy.' It also clarifies the scope ('all') and the proxy context, which clearly distinguishes it from the singular get/update/delete firewall-zone sibling 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?
The description provides clear operational guidance: by default every page is drained and the complete list is returned, while passing offset or limit requests a single manual page. It does not explicitly name alternatives like 'use get_firewall_zone_proxy for a single zone,' but the intended usage is clear and no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fobsA
List fobs on a Protect console (GET /v1/fobs via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It mentions 'GET /v1/fobs via Fabric proxy', which implies a read-only operation, but does not explicitly state side effects, required permissions, pagination, or result behavior. This is partial transparency but lacks depth.
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 and front-loaded: a clear functional statement followed by the parameter explanation. No wasted words, though it could be slightly more structured with separate sentences for clarity.
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, has an output schema, and the description covers the endpoint and parameter. However, it lacks usage context (when to call it), pagination details, and any note about how it relates to get_fob/update_fob. The absence of use-case guidance leaves the agent slightly under-informed.
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 0%, so the description must compensate. It explains that 'host' can be a console name, ID, or composite ID (MAC:numericId format), providing meaningful semantics for the only parameter. This is sufficient for a simple parameter, though a concrete example would improve clarity.
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 states a specific verb ('List'), a resource ('fobs'), and a scope ('Protect console'), and even gives the HTTP endpoint. This clearly distinguishes it from sibling tools like get_fob and update_fob.
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 no guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. It only implies a list operation without explaining the intended context or how it differs from related fob tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hostsA
List all UniFi consoles (hosts) with firmware, WAN IP, and status.
Host records are returned verbatim, including reportedState GPS coordinates. By default every page is drained and the complete host list is returned. Pass page_token to fetch a single page manually (the response then carries a nextToken cursor to continue). A capped drain returns the hosts gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full burden and delivers strong detail: host records are returned verbatim including GPS coordinates, all pages are drained by default, page_token returns a single page with a nextToken cursor, and capped drains signal incomplete=true rather than truncating silently. This is far more than a generic list statement.
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 three compact sentences, front-loading the tool's purpose before detailing pagination behavior. Every sentence earns its place: purpose, return fidelity, pagination modes, and incomplete result handling.
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 an optional single cursor parameter with an output schema, the description covers the key behaviors needed to invoke the tool correctly: default full draining, manual page fetching, continuation cursors, and incomplete results. The only minor gap is that 'capped drain' is mentioned but not defined; the trigger or threshold for the cap is not specified.
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 provides only type/default for page_token with no property description, so the description must compensate. It does by explaining that passing page_token fetches a single page manually and that the response carries a nextToken cursor. It could clarify where the token comes from or its exact format, but the added semantics are meaningful.
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 opens with a specific verb and resource: 'List all UniFi consoles (hosts)', and enumerates the returned fields (firmware, WAN IP, status). This clearly distinguishes the tool from singular operations like get_host and makes its scope immediately obvious.
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 clearly explains the default behavior of draining all pages and explicitly states when to pass page_token for manual single-page fetching. It does not name sibling alternatives such as get_host for single-host lookups, so it lacks explicit when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hotspot_operatorsA
List hotspot operator accounts for captive portal management.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states a list operation but does not disclose response format, pagination, permissions, or any side effects. Minimal beyond the basic action.
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?
Extremely concise: one line for purpose, one line for parameter guidance. No redundant words, and the crucial parameter formats are front-loaded.
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 an output schema present, return values are covered. Parameters are well explained, but the description lacks usage context and exclusion guidance. Mostly complete for a simple list tool but missing some context.
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 provides only 'string' types with 0% coverage. The description adds meaningful semantics: 'host: console name, ID, or composite ID (MAC:numericId format)' and 'site: site name or ID', fully explaining acceptable values.
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 states a specific verb ('List') and resource ('hotspot operator accounts') with a clear purpose ('for captive portal management'). It clearly distinguishes from sibling create/update/delete operators.
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 or any exclusions. It merely lists parameters, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hotspot_packagesA
List guest portal billing packages for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The text implies a read-only listing operation and adds no warning flags, so the only behavior conveyed is that package data is returned. With no annotations, the description does not disclose pagination, filtering, or error/response details, but these are not critical for a safe list tool.
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 first sentence states the operation immediately, and the second compactly covers both parameter formats. No filler or repetition.
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 description fully explains the two required parameters and identifies what the tool lists; for a simple read-only list operation this is sufficient. It could mention output shape or pagination, but the lack is minor given the operation's straightforwardness.
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?
Both parameters are defined beyond the bare schema: 'host' accepts console name, ID, or MAC:numericId composite ID, and 'site' accepts name or ID. This compensates fully for the 0% schema description coverage.
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 names a concrete operation ('List'), a specific resource type ('guest portal billing packages'), and a scope ('for a site'). This clearly separates it from singular get_hotspot_package and from voucher-related siblings.
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?
It states that the operation is scoped to a site and documents the required host/site identifiers, so an agent knows the basic condition for calling it. However, it gives no explicit when-to-use/when-not-to-use guidance against sibling tools such as get_hotspot_package or list_hotspot_vouchers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hotspot_vouchersA
List all hotspot/guest vouchers for a site (there is no list_vouchers — this is it).
This is the voucher-listing tool; the family is list_hotspot_vouchers,
create_hotspot_vouchers, get_hotspot_voucher, delete_hotspot_voucher — all
prefixed hotspot_. There is no shorter list_vouchers/get_voucher alias.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Vouchers are offset-paginated (native default page size 100) and batches routinely exceed that; by default every page is drained and the complete list is returned as {data, totalCount}. Pass offset or limit for a single manual page. A capped drain is flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and it delivers: it discloses offset-paginated behavior, default page size 100, automatic draining of all pages, return shape {data, totalCount}, and the incomplete-drain flag. This is rich behavioral detail well beyond the bare schema.
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 front-loaded with the core purpose and then organized into useful behavioral details. Minor redundancy exists in repeating that there is no shorter alias, but each paragraph earns its place and the length is justified by the pagination nuances.
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 tool with no annotations, the description is complete: it covers purpose, family context, parameter formats, pagination defaults, response shape, and the incomplete-capped behavior. The output schema covers return structure, so no further format detail is needed.
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 0%, so the description must fully explain parameters, and it does. It defines acceptable `host` forms (console name, ID, or MAC:numericId composite), `site` as name or ID, and explains the meaning and effect of `offset` and `limit` for pagination.
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?
States a specific verb and resource: 'List all hotspot/guest vouchers for a site', and clarifies there is no shorter alias, which distinguishes it from any imagined sibling. It clearly names the voucher family and orients the agent to this specific listing role.
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?
Explicitly identifies the tool as the voucher-listing tool, names related tools in the family, and points out that no shorter `list_vouchers`/`get_voucher` alias exists. It also gives practical selection context by explaining pagination behavior and how to request a single manual page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_innerspace_access_pointsA
List placed access points from a console's InnerSpace floor plans (Integration API).
Each AP carries id, name, model (SKU), mac, serial, floor_plan_id, x/y (pixels on the floor-plan image), height (mounting height in metres), azimuth (antenna orientation, 0-360 degrees), mount, and status. Returned verbatim, including mac/serial.
host: console name, ID, or composite ID (MAC:numericId format). site_id: optional UniFi site filter — only APs whose product siteId matches.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses that data is returned verbatim including mac/serial, which is a meaningful privacy-related behavior, and explains host formats. However, it does not mention pagination, rate limits, or confirm read-only behavior beyond the verb 'List'.
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 well-organized: purpose first, then return-field details, then parameter semantics. The field enumeration is somewhat redundant given the output schema, but it includes the unique 'returned verbatim' note and remains readable without bloat.
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 an output schema present, return value details are sufficiently covered. Missing elements are explicit usage differentiation among InnerSpace listing tools and any caveats about pagination/limits. For a straightforward list operation, it is adequate but not fully 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?
Schema coverage is 0%, so the description must compensate. It fully explains both parameters: 'host' with accepted formats (console name, ID, or MAC:numericId composite) and 'site_id' as an optional UniFi site filter with matching semantics. This significantly exceeds the bare schema types.
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 states a specific verb ('List') and resource ('placed access points from a console's InnerSpace floor plans'), which clearly distinguishes it from sibling tools like list_innerspace_devices or list_innerspace_switches. The phrase 'placed access points' adds precise scope.
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 when to use it (wanting floor-plan access points for a console) and explains parameters, but it does not explicitly contrast with alternatives such as list_innerspace_devices or list_innerspace_inventory. No exclusions or 'use X instead' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_innerspace_devicesA
List placed device shapes from a console's InnerSpace floor-plan.
Each mounted device's placement: mount, productId, title, position, and rotation (pov = heading/yaw, base = mount tilt). Returned verbatim, including device meta.mac / meta.ip. Use mode='3D' (default) for real metric mounting heights; mode='2D' flattens positions to z=0.
host: console name, ID, or composite ID (MAC:numericId format). mode: '3D' (default) or '2D'.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| mode | No | 3D |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on full responsibility for behavior disclosure. It explains what is returned (placement fields, device meta.mac/meta.ip, returned verbatim), defines the rotation semantics (pov = heading/yaw, base = mount tilt), and clarifies how mode changes the output coordinates. This is much more informative than a typical list tool description.
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 organized and front-loaded: a one-sentence purpose, then useful details about fields, mode behavior, and parameters. Each sentence adds necessary information. It is slightly dense, but nothing is redundant or irrelevant.
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 that an output schema exists (so return value structure is already formalized), the description adequately covers the tool's scope, host identification, mode semantics, and field meanings. It omits potential error cases or prerequisites, but for a read-only listing tool in a larger family, the provided context is sufficient for correct invocation.
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 input schema provides only 'string' types and a default for mode, with 0% schema description coverage. The description fully compensates by explaining host formats (console name, ID, or MAC:numericId composite) and mode values ('3D' or '2D') with their effects. This gives an agent all the necessary parameter-level understanding.
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's purpose: 'List placed device shapes from a console's InnerSpace floor-plan.' It specifies the resource type and context, and the additional field details (mount, productId, title, position, rotation) help distinguish it from general inventory or network listing tools. However, it does not explicitly name sibling tools, so some differentiation relies on the reader inferring from wording.
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?
It gives clear operational guidance: host can be a console name, ID, or composite ID, and mode has two options with explained behavior. It does not explicitly state when to use this tool versus competing InnerSpace tools (e.g., list_innerspace_inventory), but the description's focused context makes the appropriate use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_innerspace_floor_plansA
List a console's InnerSpace floor plans (documented Integration API).
Each floor plan carries id, name, floor_number, image_url (an asset path — fetch with get_innerspace_asset), ppm (pixels per metre, the scale for interpreting coordinates/heights), width/height (image pixels), origin_x/origin_y, and site_id when filtered. Returned verbatim.
host: console name, ID, or composite ID (MAC:numericId format). site_id: optional UniFi site filter — only floor plans whose product siteId matches.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It says responses are 'Returned verbatim,' and enumerates the exact fields per floor plan, including semantic details like ppm as the coordinate/height scale and when site_id appears. It does not cover every possible behavior (e.g., auth, pagination), but for a list operation the essential behavior is well disclosed.
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 front-loaded with the purpose, then a compact list of return fields, then parameter definitions. There is no filler; each line adds needed 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?
Despite having an output schema, the description adds the non-obvious context: asset paths require get_innerspace_asset, ppm is the coordinate scale, and site_id appears only when filtering. For a read-only listing tool with two parameters, nothing essential is missing.
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 provides only types and defaults with 0% description coverage, so the description must compensate. It does: host is defined as console name, ID, or composite ID (MAC:numericId format), and site_id is defined as an optional UniFi site filter matching product siteId. This fully clarifies both 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?
The opening sentence states the exact operation: 'List a console's InnerSpace floor plans,' with verb, resource, and scope. It also notes the Integration API and clarifies how image_url relates to get_innerspace_asset, distinguishing the tool from nearby list_innerspace_* siblings.
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?
It gives concrete context for calling: host can be console name, ID, or composite ID (MAC:numericId format), and site_id is optional with a clear filtering behavior. It points to get_innerspace_asset as the follow-up for fetching an asset path, which routes the agent appropriately, though it does not state explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_innerspace_inventoryA
List UNPLACED device inventory for a console's InnerSpace project (Integration API).
Devices known to the project but not yet positioned on a floor plan. Each carries id, name, model, mac, and serial. Returned verbatim, including mac/serial. The response array key is 'devices'.
host: console name, ID, or composite ID (MAC:numericId format). site_id: optional UniFi site filter — only inventory whose product siteId matches.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses meaningful behavior: devices are 'Returned verbatim, including mac/serial', which warns about sensitive data exposure. It also states the response array key ('devices'). It does not mention pagination or error cases, but the key behavioral traits are covered.
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 compact, well-organized, and front-loaded with the core purpose. Every sentence earns its place: scope definition, key return details, and parameter explanations are clearly separated without redundancy.
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 description covers the essential invocation context: what is returned, key name, parameter formats, and filtering semantics. Since an output schema exists, detailed return structure need not be restated. Minor omissions like pagination or explicit auth requirements are not critical for this list operation.
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 0%, so the description fully compensates. It explains host accepts 'console name, ID, or composite ID (MAC:numericId format)' and clarifies that site_id is an optional filter matching the product siteId. This gives the agent actionable semantics for both 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?
The description uses a specific verb ('List') and a precisely bounded resource ('UNPLACED device inventory for a console's InnerSpace project'). It clearly defines 'unplaced' as 'not yet positioned on a floor plan', which distinguishes it from sibling tools like list_innerspace_devices that likely return all InnerSpace devices.
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 context is clear: this tool returns only unplaced inventory, so an agent knows when it applies. It does not explicitly name alternatives or state when NOT to use it, but the 'UNPLACED' qualifier strongly implies the scope. No explicit exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_innerspace_switchesA
List placed switches from a console's InnerSpace floor plans (Integration API).
Each switch carries id, name, model, type (switch), mac, serial, floor_plan_id, x/y (pixels on the floor-plan image), and status. Returned verbatim, including mac/serial.
host: console name, ID, or composite ID (MAC:numericId format). site_id: optional UniFi site filter — only switches whose product siteId matches.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description discloses meaningful behavior: it returns switch data 'verbatim, including mac/serial', notes the site_id filter behavior (only matching product siteId), and specifies the accepted host formats (name, ID, or MAC:numericId). This goes beyond a simple 'list' statement and informs the caller about data fidelity and filtering semantics.
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 compact and well-organized: purpose first, then return fields, then parameter definitions. Each line adds necessary information without redundancy. The use of bullet-like lines for params aids quick parsing, and no sentence is wasted.
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 two-parameter list operation with an output schema, the description covers the essential context: what resource is listed, what fields are returned, and how each parameter behaves. It does not discuss pagination, error handling, or prerequisites like the need for the console to have InnerSpace enabled, but given the simplicity and the presence of an output schema, these are minor omissions.
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 input schema provides zero parameter descriptions, so the description fully compensates by explaining both parameters. host is defined as 'console name, ID, or composite ID (MAC:numericId format)', giving concrete acceptable values. site_id is explained as an optional UniFi site filter with explicit matching behavior, making the parameter's purpose and effect clear.
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 opens with a specific verb and resource: 'List placed switches from a console's InnerSpace floor plans.' It clarifies the API context and explicitly enumerates returned fields (id, name, model, mac, serial, etc.), distinguishing it from sibling tools like list_innerspace_devices or list_innerspace_access_points by focusing on 'placed switches' within floor plans.
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 strongly implies when to use it (when you need switch placements from floor plans) but does not explicitly state alternatives or when not to use it. It does not reference sibling tools like list_innerspace_inventory or explain how to choose among InnerSpace list endpoints. Usage context is implied through the resource focus, not explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_known_clientsA
List the full per-site client roster incl. offline history (Classic REST /stat/alluser).
Unlike list_active_clients_stats (currently-connected only), this includes clients seen historically — typically far more entries. (Distinct from the fleet-wide list_all_clients aggregation tool, which spans every console.) This endpoint accepts GET.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Each entry includes mac, first_seen, last_seen, disconnect_timestamp (all epoch seconds), is_wired, oui, last_ip, last_radio, hostname, and device-fingerprint fields.
The response is passed through verbatim, including identifiers (MAC/IP/hostname/name).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it states the endpoint, notes the response is passed through verbatim including identifiers, and enumerates returned fields. It doesn't mention pagination or rate limits, but for a read-only list operation the disclosed details are substantial.
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 well-structured: purpose first, then sibling differentiation, then parameter semantics, then output fields. Every sentence adds useful information and none are redundant.
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 no annotations, the description covers what the tool returns, the meaning of both parameters, and how this tool differs from related tools. An agent has enough context to select and invoke it 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 0%, but the description fully documents both parameters: host accepts 'console name, ID, or composite ID (MAC:numericId format)' and site accepts 'site name or ID'. This adds critical format information beyond the bare string types in the schema.
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 opens with a specific verb and resource: 'List the full per-site client roster incl. offline history', and immediately distinguishes it from list_active_clients_stats and list_all_clients. An agent can clearly tell this tool from its siblings without inspecting schemas.
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?
It explicitly contrasts this tool with list_active_clients_stats ('currently-connected only') and list_all_clients ('fleet-wide aggregation'), giving clear when-to-use guidance. It also confirms the HTTP method (GET), which further clarifies expected behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lagsA
List Link Aggregation Groups (LAGs) on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Drains all pages by default; pass offset/limit for a single manual page. A capped drain is flagged incomplete rather than truncated silently. filter: optional UniFi Integration API filter expression.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden and does well by disclosing the auto-drain behavior, the effect of offset/limit, and the explicit incomplete-flag behavior on capped drains. It does not mention auth or read-only semantics, but 'List' plus the drain disclosure covers the main behavioral risks.
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 front-loaded with the purpose, then uses compact labeled sentences for parameters and pagination. Every sentence adds operational value without repetition of schema defaults.
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 list operation with an output schema, the description covers the required host/site inputs, optional filter, and pagination semantics. It is slightly incomplete only in not clarifying how this relates to the sibling get_lag or MC-LAG domain tools, but that does not prevent a correct call.
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 0%, so the description must explain the parameters, and it does: host accepts names/IDs/composite MAC:numericId, site accepts name or ID, filter is a UniFi Integration API expression, and offset/limit control manual paging. It stops short of giving filter syntax or examples.
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 opens with a clear verb-resource pair: 'List Link Aggregation Groups (LAGs) on a site.' It is distinguishable from the sibling get_lag (singular retrieval) by the plural 'list' scope, though it does not explicitly call out the distinction from list_mc_lag_domains.
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: call it to enumerate LAGs scoped to a host/site. It gives pagination instructions (offset/limit for a manual page) but does not state when to prefer get_lag or list_mc_lag_domains, so alternative routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lightsA
List all lights on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses the operation (listing) and the scope ('all ... on a Protect console'), but it does not mention pagination, response size, read-only status, or any special conditions. For a simple list operation this 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?
Two short sentences with no filler: the first states the action and scope, the second clarifies the single parameter's accepted formats. Every sentence is useful and the most important information is front-loaded.
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 one-parameter list operation, the description is nearly complete: it states what is listed, the target scope, and how to identify the host. The presence of an output schema covers return-value expectations, and the remaining gaps are minor usage/behavior 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?
The schema only defines host as a required string with no description, so the extra line 'host: console name, ID, or composite ID (MAC:numericId format)' adds meaningful format guidance. This compensates well for the 0% schema description coverage.
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-resource pair ('List all lights') and scopes it to 'a Protect console.' It clearly identifies the tool's function and is distinguishable from sibling tools such as get_light and update_light, which retrieve or modify a single light.
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 intended use is implied by the name and first sentence: call this when you need to enumerate lights on a Protect console. However, it does not explicitly mention when not to use it or name alternative tools such as get_light for retrieving a single light, so the agent must infer the selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_link_stationsA
List link stations on a Protect console (GET /v1/link-stations via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It reveals the HTTP method (GET), the resource path, and the Fabric proxy indirection, which is useful. It does not mention pagination, permissions, or other runtime behavior, but the list operation is simple and the output schema exists.
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 concise sentences with no filler. The main action and endpoint come first, followed by the key parameter guidance. Every word adds value.
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 straightforward list endpoint with one parameter and an output schema, the description covers the essential operational details: endpoint, proxy path, and host identifier formats. It could mention pagination or return summary, but the output schema likely covers returns, and the description is otherwise sufficient.
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 input schema only defines host as a string with no description. The description fully compensates by explaining that host can be a console name, ID, or composite ID in MAC:numericId format. This is essential for correct invocation.
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 'List link stations on a Protect console' and includes the exact HTTP endpoint. It is distinguishable from sibling tools like get_link_station and update_link_station by being plural and read-oriented.
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 clear context: this operates on a Protect console and needs a host identifier. It also explains the supported host formats. It does not explicitly contrast with get_link_station or update_link_station, but the list-versus-single nature is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_liveviewsB
List all liveviews on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only list operation but does not mention permissions, pagination, scope limits, or what happens if the host is invalid or has no liveviews. The behavioral information is 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?
The description is extremely concise: two sentences, no filler, and the primary action is front-loaded. The host parameter clarification is placed directly where it is most useful.
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 parameter and has an output schema, so return-value details are covered elsewhere. However, the description lacks usage guidance and behavioral details such as read-only confirmation or response characteristics, leaving some gaps given the absence of annotations.
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 only defines host as a string, but the description adds meaningful semantics by listing accepted formats: console name, ID, or composite ID (MAC:numericId format). This substantially helps the agent supply a valid value despite 0% schema description coverage.
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 states a clear verb ('List'), a specific resource ('liveviews'), and a scope ('on a Protect console'). This differentiates it from single-item operations like get_liveview, though it does not explicitly contrast with sibling list tools such as list_viewers.
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 no guidance on when to use this tool versus alternatives like get_liveview, create_liveview, or list_viewers. It only describes what the tool does and the meaning of the host parameter, without any contextual cues or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_local_sitesA
List sites managed by one UniFi Network application.
host: console name, ID, or composite ID (MAC:numericId format). By default every page is drained and the complete list is returned. Pass offset/limit to fetch a single page manually (native envelope preserved). A capped drain returns the sites gathered so far with incomplete=true rather than truncating silently. filter: optional UniFi Integration API filter.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so very well. It discloses that all pages are drained by default, that offset/limit fetch a single page, that the native envelope is preserved, and that capped drains return incomplete=true rather than silently truncating. This is rich, honest behavioral context.
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 compact and front-loaded with the action, followed by parameter and behavior details in logical order. Every sentence provides useful information and there is no redundancy or filler.
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 list operation with an output schema, the description covers host parameters, pagination behavior, and the filter option well. The main missing piece is explicit guidance for choosing this tool among closely related siblings, but the core calling context is adequately 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?
Schema description coverage is 0%, so the description must compensate, and it mostly does. It explains host formats, the meaning of offset/limit, and the existence of filter. The filter parameter is only described as an 'optional UniFi Integration API filter' without syntax details, which leaves a small semantic gap.
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 opens with a clear verb and resource: 'List sites managed by one UniFi Network application.' This conveys the core purpose precisely. It does not explicitly name sibling tools like list_sites or list_all_sites_aggregated, but the 'one UniFi Network application' scope provides useful differentiation.
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 strong guidance on pagination behavior and when to use offset/limit manually. However, it does not explicitly explain when to choose this tool over the many sibling list tools, such as list_sites or list_all_sites_aggregated. The scope is implied but not contrasted with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mc_lag_domainsA
List Multi-Chassis Link Aggregation (MC-LAG) domains on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Drains all pages by default; pass offset/limit for a single manual page. A capped drain is flagged incomplete rather than truncated silently. filter: optional UniFi Integration API filter expression.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses non-obvious pagination behavior: 'Drains all pages by default' and 'A capped drain is flagged incomplete rather than truncated silently.' This is genuinely useful and goes beyond a simple listing statement.
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 tight and front-loaded: the primary purpose appears first, followed by parameter semantics and pagination behavior. Every sentence adds information; there is no filler or repetition of schema content.
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?
An output schema is present, so return-value documentation is not required. The description covers required parameters, optional pagination controls, filtering, and the incomplete-drain behavior. An agent has enough context to invoke this tool 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 description coverage is 0%, so the description must compensate. It explains host formats, site formats, and the filter expression, and it gives practical meaning to offset/limit. This is strong compensation even though the schema still carries type/default details.
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 first sentence states a specific action and resource: 'List Multi-Chassis Link Aggregation (MC-LAG) domains on a site.' This clearly distinguishes it from related siblings like get_mc_lag_domain and list_lags by resource type and operation scope.
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 clear invocation context: the host/site addressing, the default page-draining behavior, and how to request a single manual page with offset/limit. It does not explicitly name alternative tools or when-not-to-use conditions, but the context is sufficient for correct selection in most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mobility_adminsA
List the admins of a Mobility workspace (mobility permissions only).
Each admin carries name, email, status, is_owner and a permissions object exposing the umr (Mobile Routing) level (ALL/VIEW_ONLY/NONE); permissions is null for a pending invite. Returned verbatim.
workspace_id: the workspace UUID from list_mobility_workspaces. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return structure (name, email, status, is_owner, permissions object, null permissions for pending invite) and says 'Returned verbatim', which gives some behavioral insight. However, it does not mention pagination, authentication, or any side effects. For a read-only list tool this is decent but not exhaustive.
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 appropriately concise and well-structured. It leads with the purpose, then describes the return payload, then explains each parameter. Every sentence adds value with no redundancy or filler.
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 description covers the purpose, return content, and parameter semantics, which is sufficient for a simple list tool. It lacks explicit usage guidance relative to the many sibling tools, but the resource scope is clear. Given that an output schema exists for return details, this is nearly 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?
Schema description coverage is 0%, so the description must compensate. It does: workspace_id is explained as 'the workspace UUID from list_mobility_workspaces' and key_label is explained as 'optional configured API-key label to route on a specific key'. This adds meaningful semantics beyond the bare schema properties.
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 names a specific verb ('List'), a specific resource ('admins of a Mobility workspace'), and a clear scope ('mobility permissions only'). It clearly differentiates from sibling tools like list_mobility_workspaces or list_users by focusing on admins and their permission details.
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 when to use this tool (when you need Mobility workspace admins) and gives a pointer that workspace_id comes from list_mobility_workspaces, but it does not explicitly state when NOT to use it or name alternative tools. This is sufficient context but lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mobility_clientsA
List the clients associated with a UMR device.
Each client carries mac, name, type (WIRED/WIRELESS), connection_status, ip_address, is_blocked and (wireless only) a wifi_experience score. Offset-paginated by the API (limit/offset, 200 max); every page is drained.
workspace_id: the workspace UUID from list_mobility_workspaces. device_id: the device UUID from list_mobility_devices. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | ||
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses automatic draining of offset-paginated API pages (limit/offset, 200 max), which is a key behavioral trait. It also details the exact fields returned, including the wireless-only wifi_experience, and optional key_label behavior.
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 well-structured: purpose first, then output fields, pagination behavior, and parameter explanations. Each sentence adds necessary context and there is no fluff. It is appropriately sized for the tool's complexity.
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 has an output schema, the description needn't detail return values, but it does anyway. It covers pagination, field list, and parameter sources, making the tool fully self-contained for an agent. No critical information is missing for correct invocation.
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 0%, but the description fully compensates by explaining each parameter: workspace_id as the UUID from list_mobility_workspaces, device_id as the UUID from list_mobility_devices, and key_label as an optional routing label. This gives the agent complete semantic understanding without needing to inspect the schema.
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 clients associated with a UMR device, using a specific verb and resource. It differentiates from sibling tools like list_clients and list_all_clients by scoping to mobility device clients. No ambiguity about what the tool does.
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 clear context for when to use the tool: after obtaining workspace_id from list_mobility_workspaces and device_id from list_mobility_devices. It also notes key_label for routing on a specific API key. However, it does not explicitly mention alternatives or when NOT to use this tool versus other list clients tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mobility_devicesA
List the UMR devices in a Mobility workspace.
Each device is the lightweight summary (id, name, model, state, firmware_version, mac_address). Offset-paginated by the API (limit/offset, 200 max); every page is drained.
workspace_id: the workspace UUID from list_mobility_workspaces. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses pagination behavior (limit/offset, 200 max, all pages drained), the summary nature of results, and key routing semantics. It does not state auth/read-only assumptions, but for a list operation this is fairly complete.
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 compact and front-loaded: purpose, return content, pagination, then parameters. Every sentence adds information without redundant phrasing.
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 straightforward listing tool with an output schema, the description covers what is returned, how pagination is handled, and what each parameter means. No critical information needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining both parameters: workspace_id is the workspace UUID from list_mobility_workspaces, and key_label is an optional configured API-key label used for key routing. This adds meaning beyond the bare schema types.
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 names a specific verb ('List') and resource ('UMR devices in a Mobility workspace'), and specifies the lightweight summary fields returned. The Mobility workspace scoping separates it from generic device-list siblings such as list_devices and list_site_devices.
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?
It clearly establishes the prerequisite and source for the required parameter ('workspace_id: the workspace UUID from list_mobility_workspaces'). It does not explicitly name alternatives or when-not-to-use it, but the workspace context and required parameter provide clear enough usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mobility_workspacesA
List UniFi Mobility workspaces visible to the authenticated API key.
A workspace is a mobility "cloud site" (workspace_id, workspace_name, is_owner, status). Returned verbatim. Not query-paginated by the API. Mobility identity is workspace-based and independent of the console host/site model.
key_label: optional configured API-key label to route the request on a specific key (multi-key deployments). Omit to use the default key.
| Name | Required | Description | Default |
|---|---|---|---|
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it well: it discloses auth scoping ('visible to the authenticated API key'), return shape ('workspace_id, workspace_name, is_owner, status'), that results are 'Returned verbatim,' and that the API is 'Not query-paginated.' This goes beyond what the name implies, though it stops short of describing error/empty-result behavior.
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 front-loaded with the purpose sentence, then adds only high-value details: return fields, verbatim behavior, non-pagination, the mobility-vs-site model distinction, and the parameter explanation. Every sentence earns its place, and there is no repetition of schema defaults.
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, single-parameter list tool with an output schema present, the description is nearly complete: it covers scope, return contents, pagination behavior, and the only parameter. It does not mention read-only guarantees or error conditions, but the output schema covers return structure and the 'list' verb makes the operation's nature clear.
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 0%, so the description must fully compensate, and it does. key_label is explained completely: what it is ('configured API-key label'), why it exists ('multi-key deployments,' 'route the request on a specific key'), and its default behavior ('Omit to use the default key'). Nothing about the parameter is left ambiguous.
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 opens with a specific verb and resource: 'List UniFi Mobility workspaces visible to the authenticated API key.' It also distinguishes the tool from site-oriented siblings by stating that mobility identity is workspace-based and 'independent of the console host/site model,' so an agent can tell it apart from list_sites, list_local_sites, and list_all_sites_aggregated.
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 clear context that this tool operates on the mobility workspace concept, not the console host/site model, which effectively tells an agent when this tool applies versus the site-listing siblings. It does not name a specific alternative tool for console sites, so exclusion is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_networksA
List all networks/VLANs for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
Networks are offset-paginated (native default page size 25); by default every page
is drained and the complete list is returned as {data, totalCount}. Pass offset or
limit for a single manual page. filter: optional Network Integration API filter
expression, forwarded unchanged as the upstream filter query parameter for
server-side filtering (e.g. vlanId.eq(100), name.like('*guest*'),
metadata.origin.eq('USER_DEFINED')); omitted entirely when unset. A capped drain is
flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and handles it exceptionally well. It discloses offset pagination, default page size 25, automatic draining, the {data, totalCount} response shape, manual page control via offset/limit, upstream passthrough of the filter parameter, and the incomplete flag for capped drains. This goes far beyond typical descriptions.
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 dense but every sentence earns its place: purpose, parameter formats, pagination behavior, and filter semantics. There is no filler or restating of the tool name. The most important scoping statement is front-loaded.
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?
An output schema exists, so return-value details do not need restatement. All invocation-critical information is present: required identifiers, optional pagination controls, filter syntax and passthrough, and the incomplete-drain signal. Nothing an agent needs to call this tool correctly is missing.
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 0%, so the description must define all parameters, and it does. Host and site get concrete accepted-format explanations (console name/ID, composite ID; site name/ID). Filter is explained with real examples and the 'forwarded unchanged' behavior. Offset and limit are tied to the manual-pagination path, making their semantic role clear.
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 opens with a specific verb and resource: 'List all networks/VLANs for a site.' This clearly identifies the operation as a site-scoped bulk listing, distinguishing it from siblings like get_network (single record) and list_port_profiles (different entity). An agent can select this tool without ambiguity.
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 clear context for when to use this tool: listing all networks for a specific site, with host/site identifiers explained. It also explains the default drain-all-pages behavior versus passing offset/limit for a manual page. However, it does not explicitly name alternatives or say 'use get_network for a single network,' so exclusions are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_devicesA
List devices pending adoption on a console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'List' implies a read-only operation, and the description defines the resource scope. However, with no annotations, the description does not explicitly confirm non-mutating behavior, pagination, or error cases, leaving some transparency burden unmet.
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 sentences with no redundant wording. The main purpose is front-loaded, and the parameter explanation is separated cleanly.
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 one-parameter list tool with an output schema, the description covers the essential purpose and host input format. It could add context about expected results when no devices are pending or how this feeds into approve/reject workflows, but these are minor gaps.
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 0%, but the description compensates by explaining that host can be a console name, ID, or composite ID in MAC:numericId format. This adds meaningful detail beyond the schema's bare string type.
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 states a specific verb and resource: 'List devices pending adoption on a console.' This clearly differentiates the tool from siblings like list_devices or list_all_devices, and the 'pending adoption' scope distinguishes it from approval/rejection 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?
The purpose implies use when you need to see devices awaiting adoption, but the description does not explicitly state when to use this tool versus alternatives such as list_devices or approve_pending_device. There is no when-not guidance or mention of alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_port_forwardsB
List all port forwarding rules for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. The verb 'List' and phrase 'List all' make clear this is a read-only enumeration operation and implies completeness of the returned set. Still, it does not mention pagination, ordering, authorization requirements, or any special behavior beyond the basic listing.
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 short and front-loaded: the core action appears first, followed by terse parameter explanations. Every sentence serves a purpose, and there is no fluff. It could be slightly more structured, but it is appropriately concise.
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 two-parameter list operation with an output schema, the parameter formats are covered. However, the relationship between 'host' and 'site' is not explained, and there is no overarching context about when to use this tool. It is adequate but lacks the richness needed for an agent to fully understand the operation's role.
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 0%, so the description meaningfully compensates by defining host as 'console name, ID, or composite ID (MAC:numericId format)' and site as 'site name or ID.' This adds practical identifier format detail beyond the raw string type in the schema, though it does not explain preferred identifier resolution.
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 states a clear verb and resource: 'List all port forwarding rules for a site.' It is distinct from the sibling mutation tools (create/update/delete_port_forward). However, the main sentence mentions 'site' but not 'host', leaving slight ambiguity about whether the listing is scoped to a host or a site until reading the parameter notes.
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?
There is no guidance on when to use this tool versus alternatives. The description only explains parameter formats; it does not mention sibling tools like create_port_forward, update_port_forward, or delete_port_forward, nor does it provide any when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_port_profilesB
List switch port profiles (speed, VLAN, PoE config) for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It only says 'List' and describes parameter formats; it does not mention return format, pagination, ordering, or any read-only caveats beyond the verb itself.
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 with no wasted text. The purpose is front-loaded, and the parameter explanations are compact and useful.
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 two-parameter list tool, the parameter formats are covered, and the parenthetical 'speed, VLAN, PoE config' hints at the returned data. However, with no output schema, the description does not state the return shape, pagination, or ordering, leaving a modest gap.
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 0%, so the description must clarify parameters. It does so well by defining host as 'console name, ID, or composite ID (MAC:numericId format)' and site as 'site name or ID'. This adds significant meaning beyond the bare string types.
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 states a specific verb ('List'), resource ('switch port profiles'), and scope ('for a site'), with example fields. It is clear, though it does not explicitly differentiate from the sibling get_port_profile beyond the plural 'list'.
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 no explicit when-to-use or when-not-to-use guidance, nor does it name alternatives like get_port_profile or update_port_profile. 'For a site' provides minimal context but no decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_protect_eventsA
Query historical Protect events (motion, smart-detect, sensor open/close, etc.).
This uses the private /proxy/protect/api/events REST path — the ONLY source of historical events. The official Protect Integration API exposes events solely over WebSocket (/v1/subscribe/events) with no REST query endpoint, so do not expect the integration path to answer this.
REQUIRED: host, start, and end. start/end are epoch SECONDS as INTEGERS (e.g.
1690000000 for 2023-07-22T06:13:20Z), NOT milliseconds and NOT an ISO 8601 string:
a millisecond-magnitude value is rejected up front, and a string fails schema
validation. This differs on purpose from query_isp_metrics, whose start_time/end_time
are ISO 8601 STRINGS — do not carry a format across the two tools.
host: console name, ID, or composite ID (MAC:numericId format). start/end: REQUIRED. Epoch SECONDS (UTC) as integers, converted to milliseconds internally. Ranges are inclusive on both ends. History depth is bounded by the NVR's retention. (Contrast query_isp_metrics, which wants ISO 8601 strings.) types: filter by event TYPE; single value or a list. Verified-present values: motion, smartDetectZone, smartAudioDetect, sensorOpened, sensorClosed, access. NOTE: person/face/animal/alrmSpeak are NOT event types — they are smart-detect subtypes and belong in smart_detect_types, not here. An unrecognised value returns zero events. smart_detect_types: filter by the smart-detect SUBTYPE — person, vehicle, animal, package, face, licensePlate (on smartDetectZone events) and the audio alarms alrmSpeak, alrmSiren, alrmBark, alrmCarHorn (on smartAudioDetect events). This is a distinct upstream parameter from types. The API only honours it when types is also set to the relevant event type(s); passing smart_detect_types alone is a silent no-op upstream, so this tool rejects that with a clear error. Example: types="smartDetectZone", smart_detect_types="person" for just person detections; types="smartAudioDetect", smart_detect_types="alrmSpeak" to isolate the dominant audio-alarm noise. cameras: filter by camera NAME or ID; single value or list. Names resolve to IDs (case-insensitive) — an unknown name errors rather than silently matching nothing. categories: filter by event category; single value or list. Verified values: motion, smart, iot, admin. Unknown values are silently ignored by the upstream API. without_descriptions: when true, ask the API to omit each event's description block (~16% smaller payload). Opt-in only — full-fidelity records are the default and descriptions are never dropped automatically. limit/offset: offset-based pagination (not cursor-based). By default (neither given) every page is drained and the complete event set for the window is returned — a wide window can hold tens of thousands of events, so expect all of them, not just the first page. Pass offset or limit to fetch a single manual page instead; a capped drain is flagged incomplete rather than truncating. order_direction: "ASC" (default, oldest-first) or "DESC" (newest-first).
Sensor events set the top-level sensor field to null; the sensor reference at
metadata.sensorId.text is promoted to that field so you can filter/join on it.
Events are passed through verbatim, including identifiers (MAC/IP/hostname/name) and
the metadata.name object carrying camera / recognised-person / license-plate text; the
recognised-person name on face events is at metadata.detectedThumbnails[].matchedName.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| host | Yes | ||
| limit | No | ||
| start | Yes | ||
| types | No | ||
| offset | No | ||
| cameras | No | ||
| categories | No | ||
| order_direction | No | ASC | |
| smart_detect_types | No | ||
| without_descriptions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so thoroughly. It discloses internal behaviors: epoch seconds converted to milliseconds internally, inclusive ranges, retention-bounded history, pagination behavior (default drains all pages, capped drain flagged incomplete), sensor field promotion, and verbatim passthrough of identifiers. It also reveals silent no-op upstream behavior for smart_detect_types alone and unknown-type handling. These are critical behavioral traits not visible in the schema, and they are described clearly.
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 long but every sentence earns its place. It is organized logically: summary first, then the rare API-path constraint, then required parameters with format warnings, then optional filters, then pagination, then ordering, then return-value caveats. The prose is dense yet readable, and no redundant or filler sentences exist. The length is justified by the tool's complexity and the zero-coverage schema.
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 an 11-parameter tool with no annotations and 0% schema coverage, the description is remarkably complete. It covers all parameters, edge cases, error conditions, upstream quirks, pagination behavior, and return-field semantics. With an output schema present, the description did not need to list return fields, but it still adds meaningful detail about passthrough and field promotion. Nothing an agent needs to correctly invoke the tool is missing.
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 0%, so the description must explain every parameter, and it does. Each of the 11 parameters gets a dedicated explanation: host formats, start/end unit constraints, types enumerated with verified values and note about subtypes, smart_detect_types with dependency on types, cameras with case-insensitive resolution, categories with verified values and unknown-value behavior, without_descriptions purpose, limit/offset pagination semantics, and order_direction allowed values. This far exceeds what the bare schema 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 opens with a clear verb-resource combination ('Query historical Protect events') and enumerates event types. It explicitly distinguishes itself from sibling tools by naming the private REST path and contrasting with the official WebSocket-only integration API, and later contrasts parameter formats with query_isp_metrics. This leaves no ambiguity about what the tool does or how it differs from related 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?
The description provides explicit when-to-use guidance: it states the private path is the ONLY source of historical events, warns that the integration API cannot answer this, and tells agents to not expect the integration path. It also gives clear conditional rules (e.g., smart_detect_types is honored only when types is set, otherwise the tool rejects it with a clear error), and contrasts with query_isp_metrics for parameter formats. Examples are provided for common use cases, making usage boundaries explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_protect_filesA
List Protect device asset files of a given type.
host: console name, ID, or composite ID (MAC:numericId format). file_type: Protect asset category. 'sounds' and 'images' are the known categories. The GET endpoint does NOT validate this value — an unrecognised category returns HTTP 200 with an empty list rather than an error, so a wrong value is indistinguishable from a genuinely empty category. Pass a known category exactly.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| file_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it explicitly identifies the operation as a GET and discloses that the endpoint does not validate file_type, returning HTTP 200 with an empty list for unknown values. This warning is critical for an agent to interpret empty results correctly.
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 compact and front-loads the core action, then delivers parameter details and the critical validation caveat in a logical order. Every sentence adds distinct information, and the warning is placed directly with the parameter it affects.
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 two simple required parameters and an output schema, nothing needed to invoke this tool correctly is missing: host formatting, valid file_type values, failure behavior, and the exactness requirement. The description is self-sufficient for an agent.
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 0%, and the description fully compensates: host is explained as console name, ID, or MAC:numericId, and file_type is documented with the only two known values ('sounds' and 'images'). It also explains the consequence of passing an unrecognized value, which the bare schema could never convey.
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?
States a specific verb ('List'), resource ('Protect device asset files'), and dimension ('of a given type'), making the operation unambiguous. This clearly distinguishes it from sibling tools like upload_protect_file and list_protect_events without needing to inspect the schema.
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 purpose implies when to use this tool, but the description never names sibling alternatives or says when not to use it. It does provide operational guidance for the file_type parameter ('Pass a known category exactly'), which is useful but not alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_protect_usersA
List Protect users (GET /v1/users via Fabric proxy). Read-only in the Integration API.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of disclosing behavior. It states 'Read-only in the Integration API,' which is a useful safety signal, and mentions the Fabric proxy endpoint. However, it does not disclose pagination, result limits, permission requirements, or any error/failure behavior, leaving only partial 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 concise and well-structured: it front-loads the action and resource, then gives the endpoint and read-only status, and finishes with a clear parameter explanation. Every line adds information without redundancy or repetition of the schema.
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 single-parameter list operation, the description is nearly complete: it states the action, endpoint, read-only nature, and host parameter format, and an output schema exists to document return values. The only missing piece is guidance on when this is the right tool compared to sibling user-listing tools, which is already reflected in the usage_guidelines score.
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 input schema provides no description for the required host parameter (0% coverage), but the description fully compensates by explaining that host accepts a console name, ID, or composite ID in MAC:numericId format. For the single required parameter, this gives an agent concrete and actionable 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 a specific verb and resource, 'List Protect users', and augments this with the underlying endpoint 'GET /v1/users via Fabric proxy'. While this makes the primary action obvious, it does not explicitly differentiate this tool from sibling tools such as list_ulp_users or list_users, nor does it define what makes a user a 'Protect user'.
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 given about when to use this tool versus alternatives like get_protect_user, list_ulp_users, or list_users. The additional line about host describes the parameter, not the selection context. An agent is left to infer the right circumstances from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_radius_profilesA
List RADIUS profiles for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. RADIUS profiles are offset-paginated (native default page size 25); by default every page is drained and the complete list is returned as {data, totalCount}. Pass offset or limit for a single manual page. A capped drain is flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses pagination mechanics (native default page size 25, drain all pages), return format ({data, totalCount}), manual page override semantics, and the 'capped drain' incomplete flag. This is thorough and goes well beyond what a schema would convey.
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?
Compact yet information-dense. Each sentence serves a purpose: first defines scope, second explains parameter formats, third and fourth detail pagination behavior and manual overrides. No filler or repetition.
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 list operation with no annotations, the description covers necessary context: target resource, required identifiers, pagination, return structure, and incomplete-drain signaling. Output schema exists, so return details don't need duplication. Everything an agent needs to correctly invoke and interpret results is present.
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 has 0% description coverage, but the description compensates by explaining host formats (console name, ID, composite ID) and site formats (name or ID), plus the behavioral meaning of offset/limit. All four parameters are effectively documented.
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?
States a specific verb ('List') and resource ('RADIUS profiles') scoped to a site, clearly distinguishing it from sibling tools like get_radius_profile (single-profile fetch) and create_radius_profile (write operation). The resource and scope are unambiguous.
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 explicit guidance on pagination behavior and how to request a single manual page (pass offset or limit). It explains the default drain behavior and return shape. However, it does not explicitly contrast with alternative sibling tools (e.g., when to use list vs get), but the scope is clear enough that the intended use is well understood.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recognition_detectionsA
List a recognition group's detections (individual sightings) on a Protect console.
REQUIRED: both type and group_id. group_id identifies which enrolled subject to
list sightings for — obtain a valid one from list_recognition_groups (its id field,
e.g. face_90); there is no "all groups" mode. Calling without group_id fails schema
validation, and passing an id that does not exist on the console returns HTTP 404.
Each detection carries id, eventId (joinable against list_protect_events), thumbnailId (fetch the crop with get_thumbnail), detectedAt (epoch ms), cameraId, and matchedGroupConfidence (0-100).
Response shape: {"detections": [...], "count": N} (plus "nextPage" / "incomplete" when paging manually). The array key is "detections", NOT "data" — unlike the offset-proxy tools that return {"data": [...], "totalCount": N}; read the list from result["detections"].
host: console name, ID, or composite ID (MAC:numericId format).
type: recognition type. Use 'face' or 'vehicle' (singular -- plural forms
return HTTP 400 from upstream). Forwarded to the API as-is.
group_id: REQUIRED. The group's stable id, e.g. face_90 — take it from a
list_recognition_groups result (the id field). Not optional; not guessable.
page_size: API page size; also the drain page size. Defaults to 200.
start/end: optional time window in epoch SECONDS (UTC), converted to milliseconds
internally. Verified live: the endpoint filters detections server-side by detectedAt
against this window, so an arbitrary range (e.g. the last hour, 30 days, or 90 days)
can be requested directly. Omit both for all detections.
page: fetch a single page (1-based) instead of draining. The response pages via a
links.next envelope; by default every page is drained so the complete detection set
for the group (and window, if given) is returned. Pass page to fetch one page
manually — nextPage is then surfaced.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| host | Yes | ||
| page | No | ||
| type | Yes | ||
| start | No | ||
| group_id | Yes | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses HTTP 404 for nonexistent IDs, HTTP 400 for plural types, server-side time-window filtering, epoch-millisecond conversion, response key naming ('detections' not 'data'), default page size, and default full draining behavior.
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 long but every sentence adds operational value, and it is logically organized: overview, response shape, paging expectations, then parameter-by-parameter details. The structure makes the length justified rather than bloated.
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 description fully compensates for the lack of annotations and 0% schema coverage. It covers response format, parameter semantics, failure modes, pagination behavior, and relationships to sibling tools (list_recognition_groups, list_protect_events, get_thumbnail), leaving no critical gap for an agent to call this tool 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 description coverage is 0%, so the description must explain every parameter, and it does. Each parameter gets concrete semantics: host formats, type value constraints, group_id provenance, page_size default, start/end units and conversion, and page behavior.
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 ('List'), names the exact resource ('a recognition group's detections'), and clarifies it is about 'individual sightings' on a Protect console. It differentiates this from sibling tools like list_recognition_groups by focusing on detections rather than groups.
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 states required parameters, the prerequisite of obtaining group_id from list_recognition_groups, and the absence of an 'all groups' mode. It also warns against plural type values, explains the paging/draining behavior, and notes the distinction from offset-proxy tools, giving clear selection and invocation guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recognition_groupsA
List recognition groups (enrolled faces / vehicles) on a Protect console.
Uses the private /proxy/protect/api/recognition/{type}/groups REST path (not the Protect Integration API, which has no recognition surface). Each group is a recognised subject with a stable, monotonic id (face_1, face_90, …), a name / matchedName label, a detectionsCount, and createdAt/firstDetectedAt/lastDetectedAt timestamps usable as sync and change-detection keys. This is a faithful pass-through: the name label is returned as-is and nothing is redacted.
Response shape: {"groups": [...], "count": N} (plus "nextPage" / "incomplete" when paging manually). The array key is "groups", NOT "data" — unlike the offset-proxy tools that return {"data": [...], "totalCount": N}; read the list from result["groups"].
host: console name, ID, or composite ID (MAC:numericId format). type: recognition type. Use 'face' or 'vehicle' (singular). Plural forms ('faces', 'vehicles') are NOT valid and return HTTP 400 from upstream — two separate agents have guessed plural and hit this error. The value is forwarded as-is, so any other type the console accepts also works, and any it rejects is answered by the API's own error. has_name: when true, return only named groups (unnamed groups are filtered out). page_size: API page size; also the drain page size. Defaults to 200. order_by / order_direction: server-side sort. order_direction is 'asc' or 'desc', case-insensitive ('ASC'/'DESC' behave identically); an unrecognised value is rejected upstream with HTTP 400. It only takes effect together with order_by (e.g. order_by='name') — with order_by set but order_direction omitted the API defaults to descending. order_by accepts name, createdAt, lastDetectedAt, or detectionsCount. page: fetch a single page (1-based) instead of draining. The response pages via a links.next envelope; by default every page is drained and the complete group set is returned. Pass page to fetch one page manually — nextPage is then surfaced.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| page | No | ||
| type | Yes | ||
| has_name | No | ||
| order_by | No | ||
| page_size | No | ||
| order_direction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description fully carries the burden and does so thoroughly: it discloses pass-through behavior ('name label is returned as-is and nothing is redacted'), the exact response envelope, default draining/paging behavior, the effect of page, and upstream error behavior for invalid values. This goes well beyond a generic list description.
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 long but tightly organized: purpose first, then response shape, then one clearly labeled line per parameter. Every sentence adds operational value, including the anti-error anecdotes about plural guesses and the response-key warning, with no filler.
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 7-parameter tool with no annotations and no enum constraints in the schema, the description supplies everything needed to invoke it correctly: valid type values, sortable fields, paging semantics, defaults, required host format, and a full response-shape warning. Nothing that an agent needs to make a correct call is missing.
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 0%, so every parameter description must come from the tool description, and it does. For all seven parameters it gives meaning, accepted values, defaults, and interactions (e.g., order_direction only works with order_by, page_size is also the drain page size, page disables draining). The warning about singular vs plural type values is especially valuable.
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 opens with a specific verb and resource: 'List recognition groups (enrolled faces / vehicles) on a Protect console.' It further pins the scope by naming the exact REST path and by contrasting its 'groups' response key with the unrelated offset-proxy tools, so an agent cannot confuse it with list_recognition_detections or count 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?
The description clearly states when to use the tool and gives explicit exclusions: it uses the private /proxy/protect/api/recognition/{type}/groups path, not the Protect Integration API, and warns that plural type values are invalid and cause HTTP 400. However, it does not explicitly name a sibling tool (e.g., get_recognition_group_counts or list_recognition_detections) for cases where the agent needs counts or detections instead of groups, so it falls just short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_relaysA
List relays on a Protect console (GET /v1/relays via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description itself must disclose behavior. It does reveal that the operation is a GET via Fabric proxy, which implies a read-only network call. However, it does not mention authentication requirements, pagination, or any other behavioral traits that could affect invocation.
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 with no filler: the first states the purpose and endpoint, the second defines the parameter format. Information is front-loaded and 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?
With a single required parameter, no annotations, and the presence of an output schema, the description is largely complete. It supplies the endpoint, proxy context, and host semantics. What is missing is minor—such as explicit read-only or pagination notes—but the output schema covers return 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?
The schema only defines 'host' as a plain string with 0% description coverage. The description compensates well by explaining that host can be a console name, ID, or composite ID (MAC:numericId format), giving the agent actionable semantics for the only 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 the action ('List relays') and scope ('on a Protect console'), and further specifies the endpoint (GET /v1/relays via Fabric proxy). The use of 'list' plus the plural 'relays' distinguishes it from sibling tools like get_relay or update_relay.
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 clear context: this tool lists relays on a Protect console using a Fabric proxy. It does not explicitly name alternatives or exclusion criteria, but the list vs. get/update semantics among siblings make the usage context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rogue_apsA
List neighboring APs detected by the site's radios.
Returns ALL neighboring APs (most will have is_rogue=false and are benign neighbors). Only a small subset with is_rogue=true are confirmed rogue APs. Set rogue_only=true to filter to confirmed rogues only.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns entries with BSSID, SSID, channel, signal strength, is_rogue flag, and detection time.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| rogue_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses a key behavioral nuance: the tool returns ALL APs by default, not just rogues, and that is_rogue distinguishes them. It also lists the returned fields (BSSID, SSID, channel, signal strength, is_rogue, detection time), making the operation predictable. It doesn't mention auth or rate limits, but the list verb implies a read operation.
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 efficiently organized: purpose statement first, then behavioral explanation, then parameter details and return fields. Each sentence adds necessary information with no redundancy. It is detailed but not bloated.
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 description covers scope, parameter formats, default behavior, the filter option, and the return fields, which is sufficient for a list operation with no output schema. Minor details like pagination or exact response container are absent, but they are not critical for the core invocation.
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 0%, and the description compensates thoroughly. It explains host as 'console name, ID, or composite ID (MAC:numericId format)' and site as 'name or ID', adding valuable format detail beyond the plain string schema. It also explains the effect of rogue_only, clarifying the default behavior and how to filter to confirmed rogues only.
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 opens with a clear and specific verb-resource pair: 'List neighboring APs detected by the site's radios.' It explicitly states the tool returns ALL neighboring APs, highlights that most are benign, and explains the is_rogue flag. This differentiates it from sibling list tools targeting other resources (e.g., list_clients, get_site_inventory).
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 clear usage context: by default the tool returns all neighboring APs, and setting rogue_only=true filters to confirmed rogues. It directly tells the user how to achieve the likely use case of listing only rogues. It does not explicitly name alternative tools, but the unique resource scope makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_routing_entriesB
List static routing table entries for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the full burden. It implies a read-only operation via 'List' but does not disclose potential side effects, authentication requirements, pagination behavior, or response structure, adding little beyond the tool's name.
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: the first states the tool's purpose, and the second defines the parameters. It is concise, front-loaded, and contains no redundant wording.
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 two-parameter list operation, the parameter semantics are well covered. However, with no output schema or annotations, the description omits return value shape, pagination, and prerequisites, which are relevant for an agent invoking the tool.
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 description explicitly explains both required parameters: host accepts console name, ID, or composite ID (MAC:numericId format), and site accepts site name or ID. This is highly valuable given the schema provides no parameter descriptions and coverage is 0%.
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 the resource 'static routing table entries', with scope 'for a site'. It is distinguishable from sibling list tools by the resource type, though it does not explicitly name a sibling alternative, making the purpose clear but not fully differentiated.
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?
There is no guidance on when to use this tool versus alternatives such as list_traffic_routes or list_firewall_rules. It only states the operation and parameter formats, leaving the agent to infer the appropriate context without any explicit selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduled_tasksA
List scheduled tasks (firmware upgrade schedules, speed tests) for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. 'List' communicates a read-only intent and the examples clarify what items are returned, but it does not disclose response shape, pagination, or permission requirements. It adds some useful context without being fully transparent.
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 sentences with no filler. It front-loads the purpose and examples, then defines the two parameters. Every sentence 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 list operation with only two required string parameters, the description provides sufficient invocation context: site scoping and accepted identifier formats. It omits response details, but given the absence of an output schema and the straightforward nature of the operation, this is a minor rather than critical gap.
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 provides bare string properties with 0% description coverage, so the description must compensate. It does so effectively: host is explained as accepting console name, ID, or composite ID (MAC:numericId format), and site as accepting name or ID. This is exactly the detail an agent needs to construct valid calls.
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 and resource: 'List scheduled tasks' and gives concrete examples of task types (firmware upgrade schedules, speed tests). It also scopes the operation to a site, but it does not explicitly differentiate this from the sibling get_scheduled_task, so it falls short of a 5.
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?
There is no guidance on when to use this tool versus alternatives such as get_scheduled_task or search_across_sites. The description only states the scope and parameters, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sdwan_configsA
List Site Magic (SD-WAN) VPN mesh configurations.
By default every page is drained and the complete config list is returned. Pass page_token to fetch a single page manually (the response then carries a nextToken cursor to continue). A capped drain returns the configs gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses non-obvious behavior: default drains all pages, capped drain returns incomplete=true rather than truncating silently. This is valuable beyond what the input schema shows. It doesn't explain response structure or rate limits, but the output schema handles return format, so this is adequate.
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 three short paragraphs, front-loaded with a clear statement of purpose, then precise pagination behavior. Every sentence earns its place; no filler or redundancy.
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 a simple one-parameter tool with no annotations but an output schema, the description covers the resource, default behavior, and pagination semantics. It doesn't mention required permissions or limitations, but the tool is a read-only list with one optional parameter, so the description is complete enough for an agent to invoke it 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 description coverage is 0%, so the description must compensate. The description explains page_token's role: passing it fetches a single page manually, and the response carries a nextToken cursor. This adds meaning beyond the schema's raw type definition.
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 states a specific verb and resource: 'List Site Magic (SD-WAN) VPN mesh configurations.' It distinguishes from sibling list tools by focusing on SD-WAN configs and mentions pagination behavior. The title is null, but the description makes the purpose 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?
It explicitly explains when to use the default behavior (every page drained, complete list returned) and when to pass page_token to fetch a single page manually. The nextToken cursor behavior is described, which guides the agent on iterative pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sensorsA
List all sensors on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of behavioral disclosure. It does state that the operation lists all sensors on a Protect console and explains accepted host formats, but it does not mention pagination, authorization needs, or whether the result set is limited. 'List' does imply a read-only operation, so this is adequate but not detailed.
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 tight sentences: the first states the action and scope, the second documents the only parameter's format. There is no filler, redundancy, or unnecessary background.
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 one-parameter listing tool, the description plus output schema cover the essential calling requirements: the resource, the scope, and the host format. The only notable gap is the lack of explicit sibling routing, but the tool is still usable without it.
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 only declares host as a required string and provides 0% description coverage. The description compensates fully by explaining that host can be a console name, ID, or composite ID in MAC:numericId format, giving the agent concrete guidance for constructing the argument.
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 opens with a specific verb and resource: 'List all sensors on a Protect console.' It clearly identifies the action, the object, and the scope, and it is easy to distinguish from the sibling get_sensor and update_sensor tools because it explicitly says 'all sensors.'
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 intended use is implied by the verb 'List' and the resource scope, but the description does not explicitly contrast this with get_sensor, update_sensor, or other Protect-related list tools. It gives no 'when to use' versus alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_settingsA
List all controller setting groups for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns a list of setting objects grouped by key (mgmt, super_smtp, guest_access, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the return format (list of setting objects grouped by key) and parameter formats, but does not disclose potential side effects, permissions required, or error behavior. 'List' implies read-only, yet this is not explicitly stated, leaving some ambiguity.
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 and well-structured: the first sentence states the core function, the second provides parameter details and return structure. No redundant words or filler. Every sentence contributes useful 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?
For a list tool without output schema, the description gives the return shape (object list grouped by key) and parameter formats, which covers most informational needs. Missing details like pagination or permission requirements are minor, but a fully complete description could mention whether any filtering or ordering is supported. Overall, the essential context is provided.
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 has 0% description coverage, but the description thoroughly explains both parameters: host is described as console name, ID, or composite ID (with format), and site as name or ID. This adds significant semantic value beyond the bare string type declarations.
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 states a specific verb ('List') and resource ('controller setting groups') with a clear scope ('for a site'), and differentiates from sibling tools like get_setting or update_setting by indicating it returns all groups rather than a single setting. The mention of grouping by keys (mgmt, super_smtp, guest_access) further clarifies what is being listed.
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 to retrieve all setting groups for a site, but it does not explicitly state when to use this tool over alternatives such as get_setting. There are no exclusions or explicit comparison with siblings, so the guidance is mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sirensA
List sirens on a Protect console (GET /v1/sirens via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full transparency burden. It explicitly discloses the HTTP method GET, signaling a read-only operation, and mentions the Fabric proxy path. It does not detail pagination, auth requirements, or error behavior, but for this simple list operation the disclosed method and scope are meaningful.
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 short sentences with no filler. The action and endpoint are front-loaded, and the only parameter explanation is compact and directly attached to the relevant field.
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 has one required parameter, an output schema, and no complex nested behavior. The description supplies the endpoint, the host identifier options, and the scope of the listing, which is sufficient for correct invocation.
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 only defines host as a string, but the description adds essential semantics: host may be a console name, ID, or composite ID in MAC:numericId format. This fully compensates for the 0% schema description coverage.
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 opens with a specific verb and resource: 'List sirens on a Protect console', and reinforces it with the exact endpoint 'GET /v1/sirens'. This clearly distinguishes it from singular/action siblings like get_siren or siren_play.
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?
It states the clear context for when to use this tool: to enumerate all sirens on a particular Protect console, identified by the required host parameter. It does not explicitly mention alternatives or exclusions, so it falls short of a 5, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_site_devicesA
List all adopted devices for a site via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
By default every page is drained and the complete device list is returned.
offset/limit: fetch a single page manually (the API's totalCount is
surfaced so you can advance). filter: optional Network Integration API
filter expression, forwarded unchanged as the upstream filter query
parameter for server-side filtering (e.g. state.eq('ONLINE'),
model.eq('U6 Pro')); omitted entirely when unset. A capped drain returns
the devices gathered so far with incomplete=true rather than truncating
silently.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the default full-drain behavior, manual pagination with offset/limit, surfaced totalCount, upstream filter passthrough, and the incomplete=true cap behavior. This goes well beyond a simple 'list' and prepares the agent for edge cases, though it doesn't mention potential errors or authentication requirements.
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?
Packed with essential detail in a compact block. Each sentence adds value; the parameter explanations are structured with colon-separated keys. Slightly dense but not bloated.
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 pagination, filtering, and partial-result signaling, which are the tricky parts of this tool. Output shape is left to the output schema, so no gap there. The only nuance not addressed is what a 'capped drain' cap actually is, and no mention of authentication or permissions, but for a list operation that's acceptable. A strong, self-sufficient description.
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 has zero property descriptions, so the description must compensate. It does: explains host formats (console name, ID, composite ID), site name or ID, offset/limit manual paging semantics, filter expression with concrete examples and the fact it is omitted when unset. Excellent param coverage.
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?
States a clear action and resource: 'List all adopted devices for a site via connector proxy.' It distinguishes itself from fleet-level lists by mentioning 'for a site' and 'via connector proxy,' though it doesn't explicitly contrast with sibling tools like list_devices or list_all_devices.
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 about when to choose this tool over siblings. It doesn't mention alternatives, exclusions, or prerequisites (e.g., 'use list_all_devices for fleet-wide'). The behavioral notes about paging are useful but don't address selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesA
List all sites with device/client counts and ISP info.
The siteId in the response is the Site Manager Fabric ObjectId
(from the /v1/sites list) — it is NOT the same as the proxy-path UUID used by per-site tools.
You do not need either ID:
pass site names (e.g., "Default") to all tools and the server resolves the correct
ID internally.
By default every page is drained and the complete site list is returned. Pass page_token to fetch a single page manually (the response then carries a nextToken cursor to continue). A capped drain returns the sites gathered so far with incomplete=true rather than truncating silently.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so thoroughly. It explains the siteId semantics (Fabric ObjectId vs proxy-path UUID), the default full-page drain, manual pagination with nextToken, and the incomplete=true flag for capped drains. This goes well beyond a basic list operation.
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 summary sentence is front-loaded and precise, followed by compact, high-value notes on ID semantics and pagination. Every sentence earns its place without unnecessary filler.
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 that the tool has only one optional parameter and an output schema exists, the description covers all essential context: what is returned, the unusual ID meaning, how to reference sites, and pagination behavior. It is complete enough for an agent to call the tool 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?
Despite 0% schema description coverage, the description fully compensates by explaining how page_token works: default drains all pages, passing it fetches one page manually, and the response provides a nextToken cursor. This adds clear meaning beyond the raw string/null type in the schema.
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 states a specific action and scope: 'List all sites with device/client counts and ISP info.' This clearly identifies the resource and payload. However, it does not explicitly distinguish this tool from siblings like list_local_sites or list_all_sites_aggregated.
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 useful context about how to use the tool, such as passing site names and the page_token behavior. It implies that this tool is for listing all sites, but it does not explicitly state when to use it versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_site_to_site_tunnelsA
List site-to-site VPN tunnels for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. 'List' implies a read-only operation and site scoping is stated, but there is no explicit statement that no changes are made, nor any mention of caveats such as permissions or pagination. It is not misleading, but it is 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?
The description is two front-loaded sentences: the first states the action and resource, the second lists parameter formats. Every sentence earns its place, with no filler or repetition.
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 two-parameter read-only list operation with an output schema, the description covers the essentials: both parameters are explained and the return shape is presumably covered by the output schema. The only noticeable gap is the absence of explicit behavioral or alternative-tool guidance.
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 0%, so the prose must explain the parameters—and it does. It defines host as 'console name, ID, or composite ID (MAC:numericId format)' and site as 'site name or ID,' giving an agent concrete selection guidance beyond the bare string types in the schema.
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 and resource: 'List site-to-site VPN tunnels for a site.' It is clear about what the tool does, though it does not explicitly distinguish itself from related siblings like list_vpn_servers or create/update/delete_site_to_site_tunnel.
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 phrase 'for a site' implies a scoped use case, but the description gives no explicit guidance about when to choose this tool over alternatives. It does not mention exclusions or direct agents to sibling tools for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_speakersA
List speakers on a Protect console (GET /v1/speakers via Fabric proxy).
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral transparency burden. It does not explicitly state that the operation is read-only, nor does it mention pagination, authentication, or error behavior. The provided host format details are parameter semantics rather than tool behavior.
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 extremely concise yet informative: one sentence for the operation and one for the parameter. Every word adds value, and the essential host detail is front-loaded without unnecessary filler.
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 simplicity and the presence of an output schema, the description covers the essential parameter and action. However, it lacks any usage guidance or notes on behavior (e.g., read-only nature, proxy constraints) that would help an agent decide when to invoke it, leaving minor gaps in 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?
The schema only defines host as a string, but the description meaningfully expands it by explaining the accepted formats (console name, ID, or composite ID in MAC:numericId format). This is essential for correct invocation and fully compensates for the 0% schema description coverage.
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 ('List speakers on a Protect console') and includes the specific API endpoint (GET /v1/speakers via Fabric proxy), making the tool's purpose unambiguous and distinct from sibling tools like get_speaker or update_speaker.
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 the required host parameter format but does not give any guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. It is implied that the tool is for enumerating speakers, but no explicit usage context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_switch_stacksA
List switch stacks on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Drains all pages by default; pass offset/limit for a single manual page. A capped drain is flagged incomplete rather than truncated silently. filter: optional UniFi Integration API filter expression.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| filter | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It reveals a significant non-obvious behavior: the tool automatically drains all pages by default, and that a capped drain is explicitly flagged as incomplete rather than silently truncated. This gives the agent important expectations about pagination and result completeness. It also clarifies accepted host formats and the optional filter, adding value beyond what the schema conveys.
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 well-structured and efficient: a single-purpose first sentence, followed by parameter clarifications, then behavioral paging details, and finally filter explanation. Every sentence contributes useful information; there is no fluff. The format is compact and front-loaded, making it easy for an agent to parse quickly.
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 that an output schema exists, return values are documented separately. The description covers all key aspects needed to invoke the tool correctly: scope, required parameters, optional filter, and paging semantics. It also clarifies edge-case behavior (incomplete drain flag). For a list operation, this is complete and sufficient context.
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 0%, so the description must compensate. It explains the required host and site parameters (including accepted formats for host), and explains the meaning of offset/limit through the paging behavior. The filter is described as an optional UniFi Integration API filter expression, which gives the agent enough to understand its purpose. It does not detail constraints for limit/offset (e.g., maximum values), but the paging explanation covers their functional role.
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 begins with a clear, specific verb and resource: 'List switch stacks on a site.' It clearly identifies the scope (site) and distinguishes itself from sibling get_switch_stack by the plural 'stacks'. The parameter definitions further clarify what the tool operates on, so an agent can easily understand its 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?
The description gives clear context for when to use this tool: to list switch stacks on a specific site, with host and site parameters. It explains paging behavior ('Drains all pages by default; pass offset/limit for a single manual page') and the filter parameter, which guides usage. However, it does not explicitly contrast with alternatives like get_switch_stack, though the name and description make the distinction obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_traffic_matching_listsA
List all traffic matching lists for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden itself. 'List' clearly conveys a read-only enumeration operation, and the site-scoping is stated. However, it does not mention pagination, ordering, permissions, or response quirks, so the behavioral picture is partial.
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 terse sentences: one states operation and scope, the other provides parameter detail. There is no redundancy with the tool name or schema types, and every clause contributes useful 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?
For a simple two-parameter list operation with an output schema, the core is covered: operation, scope, and parameter formats. It is less complete as a standalone guide because it lacks usage exclusions, alternatives, and behavioral caveats, which matters more given the absence of annotations.
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 provides only 'type: string' for both host and site, so the description adds real value by explaining that host can be a console name, ID, or composite ID in MAC:numericId format, and site can be a name or ID. Both parameters are covered, though ambiguity between name and ID is not resolved further.
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 states a clear verb and resource: 'List all traffic matching lists for a site.' It identifies the operation (list all), the resource (traffic matching lists), and the scope (per site). It is distinguishable from get/create/update/delete_traffic_matching_list siblings by the 'list all' wording, but it does not explicitly compare itself to those 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?
The use case is implied: use this when you need all traffic matching lists for a specific site. However, it provides no explicit when-to-use or when-not-to-use guidance and names no alternatives, such as get_traffic_matching_list for a single list or list_traffic_rules for a different resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_traffic_routesB
List static/policy traffic routes for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure burden. It only says 'List' (implying a read operation) and explains parameter formats, but does not disclose return structure, pagination, permissions, or any side effects. For a tool with no annotations, this is a significant gap.
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 short and front-loaded: the first sentence states the purpose, and the second provides parameter details. No filler. It loses one point only because it omits any usage guidance or alternative routing, which would have made it fully effective.
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 list operation with two parameters, the parameter explanations are adequate. However, with no output schema and no annotations, the description does not mention what the response contains, how results are ordered/paginated, or how this tool differs from list_traffic_rules. It is minimally sufficient but incomplete.
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 0%, so the description must compensate. It does add meaningful semantics beyond the bare string types by explaining that host accepts a console name, ID, or composite ID (MAC:numericId), and site accepts a name or ID. This is useful and directly helps the agent construct correct 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?
The description clearly states the action ('List') and resource ('static/policy traffic routes') scoped to a site. It is a clear list operation, but it does not distinguish itself from the similar sibling tool list_traffic_rules, so a small ambiguity remains.
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. With siblings like list_traffic_rules and get_traffic_route, the description does not explain why one would choose this tool or when a different one would be more appropriate. Usage context is entirely absent beyond the trivial 'for a site'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_traffic_rulesB
List traffic matching rules (QoS, application, IP group matching).
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'List' implying a read operation, but does not explicitly disclose side effects (none expected), permission needs, or response behavior. No pagination or error context is given, which is a gap for a list operation.
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 concise sentences: the first states the function, the second covers parameter formats. No filler. It is efficiently front-loaded and easy to parse, though it could potentially include a usage note without becoming bloated.
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 an output schema present, the return shape is covered. However, given the large sibling list and no annotations, the description misses usage context and does not hint at related resources (e.g., create/update/delete traffic rules). It is minimally sufficient but lacks the context needed to confidently choose this tool in complex workflows.
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 input schema only contains generic string types with 0% coverage. The description compensates by explaining accepted formats for 'host' (name, ID, or composite MAC:numericId) and 'site' (name or ID), giving the agent critical value that the schema lacks.
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 states a specific verb ('List') and resource ('traffic matching rules'), and clarifies the rule categories (QoS, application, IP group matching). This clearly distinguishes it from sibling tools like list_traffic_matching_lists, which are about matching lists rather than rules.
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 parameter value formats but gives no guidance on when to use this tool versus alternatives. It does not mention exclusions or prerequisites, leaving usage context entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ulp_usersA
List ULP (UniFi account) users (GET /v1/ulp-users). Read-only.
Distinct from list_protect_users (/v1/users): these are UI-account identities.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the operation is read-only and provides the HTTP method, which is useful. However, it does not mention authentication needs, error behavior, pagination, or what the response contains—though an output schema exists and helps mitigate some of this.
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 compact and front-loads the core purpose. Every sentence adds value: the endpoint, the read-only nature, the sibling distinction, and the host format. No filler or redundant content.
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 operation with one parameter and an output schema, the description is complete. It covers what the tool does, how it differs from the main sibling, and exactly what values `host` accepts. An agent has enough to call this tool correctly without further research.
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?
Despite schema description coverage being 0%, the description thoroughly explains the required `host` parameter: it can be a console name, ID, or composite ID in MAC:numericId format. This adds essential meaning beyond the bare 'string' type in the schema, enabling correct invocation.
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 opens with a specific verb and resource: 'List ULP (UniFi account) users' and includes the endpoint. It also distinguishes itself from `list_protect_users` by clarifying these are UI-account identities, so an agent can differentiate sibling tools immediately.
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 calls out that this is distinct from `list_protect_users` and clarifies the domain ('UI-account identities'), giving clear context for when this tool is the right choice. It does not phrase it as an explicit conditional ('use this when...'), but the contrast with the sibling provides strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersA
List DHCP fixed-IP reservations and client aliases for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returns entries with fields: name, note, fixed_ip, use_fixedip, network_id.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral burden. It compensates well by stating the returned fields and the accepted host formats, including the MAC:numericId composite form. It does not mention pagination or rate limits, but for a read-only list operation the key behavioral details are present.
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?
Three concise sentences: purpose, parameter semantics, and return fields. Everything earns its place, and the most important disambiguation is front-loaded.
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 no output schema and no annotations, the description covers the essentials: what is listed, how to specify host/site, and what fields come back. It is complete enough for a simple two-parameter list operation, aside from minor omissions like pagination or result limits.
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 0%, but the description fully documents both parameters. 'host' gets a precise list of accepted formats, and 'site' is described as site name or ID. This adds substantial meaning beyond the bare schema.
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 opens with a specific verb and resource: 'List DHCP fixed-IP reservations and client aliases for a site.' This clearly distinguishes it from generic client/account listing siblings and explains what 'users' means in this context.
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 scope is implied by the resource wording, but the description never explicitly tells the agent when to use this tool versus sibling list tools like list_clients, list_known_clients, or list_accounts. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewersA
List all viewers on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full responsibility for behavioral disclosure. It only states the basic list action and parameter format; it does not mention pagination, permissions, error behavior, or what happens if the host is invalid. This is a minimal description for a tool with no annotation safety net.
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 exceptionally concise, with a single-sentence functional summary followed by a direct parameter explanation. Every sentence adds value, and the core action is front-loaded.
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 simplicity (one parameter, list operation) and the presence of an output schema, the description covers the essentials. However, it lacks any usage context or warning about when not to use it, and the absence of behavioral details makes it less complete than ideal. It is adequate but minimal.
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 only specifies 'host' as a string with no description (0% coverage). The description compensates fully by explaining the accepted formats: console name, ID, or composite ID (MAC:numericId format). This gives the agent the exact syntax needed to invoke the tool correctly.
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 states a clear verb ('List') and resource ('all viewers on a Protect console'), which precisely identifies the operation. It is immediately distinguishable from sibling tools like get_viewer (single viewer) and update_viewer (modifying a viewer).
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 no guidance on when to use this tool versus alternatives such as get_viewer or list_liveviews. While the name implies a listing operation, there is no explicit context, exclusions, or alternative suggestions, leaving the agent without routing cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vpn_serversA
List VPN servers for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. VPN servers are offset-paginated (native default page size 25); by default every page is drained and the complete list is returned as {data, totalCount}. Pass offset or limit for a single manual page. A capped drain is flagged incomplete.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It fully explains the pagination mechanics: offset-paginated, default page size 25, auto-drain all pages, return shape {data, totalCount}, manual page override, and incomplete flag for capped drains. This is rich, precise behavioral information that goes well beyond the schema and 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 compact and front-loaded. The first sentence states the purpose, the second clarifies parameter formats, and the third explains pagination behavior. Every sentence earns its place; no filler or redundancy. The structure is logical 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?
For a list operation with an output schema, the description covers all essentials: parameters, default behavior, manual override, return shape, and edge case (capped drain). It is self-contained and gives an agent everything needed to invoke the tool correctly without additional lookup. The presence of an output schema further supports completeness, though the description already mentions the return 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 description coverage is 0%, so the description must compensate entirely. It does so effectively: host is explained as 'console name, ID, or composite ID (MAC:numericId format)' and site as 'site name or ID'. Offset and limit semantics are conveyed through the pagination explanation ('Pass offset or limit for a single manual page'). This gives an agent enough understanding to select and populate parameters correctly.
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 opens with a clear verb and resource: 'List VPN servers for a site.' It specifies the scope (site) and differentiates from sibling tools like get_vpn_server and create_vpn_server by making the list action and target explicit. No ambiguity about what operation is performed.
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 clear context on pagination behavior: default drains all pages, manual page with offset/limit, and a flagged incomplete drain. It does not explicitly name alternatives or when-not-to-use conditions, but the scope is unambiguous and the pagination guidance is directly actionable. The absence of explicit sibling comparisons is a minor gap, so a 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wan_interfacesA
List WAN interfaces for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. 'List' clearly signals a read-only operation, and the output schema covers the return shape. However, no additional behavior is disclosed, such as whether host and site must correspond or what happens for invalid inputs.
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 short, front-loaded with the operation, and separates the parameter guidance cleanly. Every sentence 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 two-parameter list operation with an output schema, the description provides the essential resource, scope, and parameter formats. The main remaining gap is explaining why both host and site are required together.
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 0%, so the description compensates by documenting both parameters: host accepts a console name, ID, or composite ID, and site accepts a name or ID. This adds real meaning beyond the bare string type, though examples or a clearer relationship between the two would make it stronger.
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 names an exact verb and resource: 'List WAN interfaces for a site.' This is specific enough to be told apart from siblings such as list_site_devices or update_wan_interface without inspecting the schema.
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 intended use is implied by the phrase 'for a site,' but no explicit guidance is given about when to choose this tool over related list/read tools or when not to use it. Parameter meanings are supplied, but not usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wifi_broadcastsA
List all WiFi broadcast SSIDs for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
filter: optional Network Integration API filter expression, forwarded unchanged as
the upstream filter query parameter for server-side filtering (e.g.
enabled.eq(true), name.like('*Guest*')); omitted entirely when unset.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that the filter is forwarded unchanged as the upstream `filter` query parameter and is omitted entirely when unset. It does not discuss pagination or output size, but for a list tool with an output schema this is a minor gap.
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 compact and front-loaded, with the core purpose stated first. The parameter block is dense but every clause adds practical value, especially the filter passthrough note.
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 three-parameter list tool, all invocation-relevant information is present. The output schema covers return values, and the description covers parameter semantics, optionality, and upstream filter behavior without leaving material gaps.
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 0%, and the description fully compensates. It defines the accepted host formats, describes site as name or ID, and explains the filter expression with concrete examples and omission behavior.
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 opens with a specific verb-resource pair: 'List all WiFi broadcast SSIDs for a site.' The word 'all' and the site scoping clearly distinguish this from the singular get_wifi_broadcast and from create/update/delete variants among the siblings.
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 phrase 'List all ... for a site' provides clear context for when to use this tool over a single-item getter. It does not explicitly name the alternative or list exclusions, but the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wlan_configsA
List per-SSID WLAN configurations (security, band steering, rate limits) for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. Returned verbatim, including plaintext x_passphrase credential fields.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond basic functionality by warning that results are 'Returned verbatim, including plaintext x_passphrase credential fields,' which alerts to sensitive data exposure. Since no annotations are present, this disclosure carries full weight, though it does not explicitly state read-only behavior or pagination.
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 plus parameter definitions, no filler. The primary purpose is front-loaded, followed by parameter formats and then the critical credential exposure note.
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 tool with only two required string parameters and no output schema, the description covers all essentials: what is listed, how to specify the target, and notable return characteristics. Nothing critical is missing for a correct invocation.
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 input schema only declares 'host' and 'site' as strings with no descriptions. The description compensates fully by defining 'host' as 'console name, ID, or composite ID (MAC:numericId format)' and 'site' as 'site name or ID,' so an agent knows exactly what values are acceptable.
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 states a specific action: 'List per-SSID WLAN configurations... for a site.' It names the resource (WLAN configurations), the granularity (per-SSID), and the fields (security, band steering, rate limits). The plural 'configs' in the tool name and the 'List' verb distinguish it from the sibling get_wlan_config.
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 clear context that this tool is for retrieving WLAN configuration lists scoped to a site, and it explains how to format the host and site parameters. However, it does not explicitly state when to prefer this tool over siblings like get_wlan_config or update_wlan_config, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wlan_groupsB
List WLAN groups for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'List WLAN groups' and defines parameters; it does not mention read-only behavior, pagination, output shape, failure conditions, or permissions needed.
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 compact and front-loaded with the purpose, followed by two concise parameter clarifications. No filler exists, though it could be slightly better structured by explicitly labeling the parameter lines as a definition block.
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 operation with two required string parameters and no output schema, the description covers the essential invocation details. It lacks sibling differentiation and any return-value or behavior notes, but it is adequate for a minimal list tool.
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 0%, so the description must compensate for the bare string-typed schema. It does so by clarifying that host accepts a console name, ID, or composite ID (MAC:numericId format), and site accepts a name or ID, which is valuable disambiguation.
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 states a specific verb and resource ('List WLAN groups for a site'), making the tool's core purpose clear. It does not explicitly distinguish itself from similar siblings like list_wlan_configs or get_wlan_group, so it stops short of a 5.
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 about when to use this tool versus alternatives such as list_wlan_configs or get_wlan_group. The description explains what the parameters are but does not state under what circumstances an agent should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
locate_deviceA
Toggle the locate LED on an adopted device.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
enabled: True to enable locate LED, False to disable.
device_id: REQUIRED. Obtain it from list_devices (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| enabled | No | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the operation (toggling the locate LED) and explains the enabled parameter's effect. However, it does not mention permissions, side effects beyond LED state, or any rate limits. Given the simple nature of the operation, the core behavior is disclosed, but richer context (like reversibility or long-running effects) is absent.
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 compact and well-structured. The first sentence states the action, followed by a per-parameter breakdown. No filler or redundant repetition of schema types. Every line provides practical 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?
The tool is a simple, single-action command with 4 parameters, all documented. An output schema exists, so return value explanation is not required. The description covers the necessary inputs and where to obtain the key identifier. It lacks explicit error-case handling or prerequisites, but given the tool's simplicity, the description is nearly 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?
Schema description coverage is 0%, so the description must compensate. It does: host is described as console name, ID, or composite ID; site as name or ID; enabled as True/False toggling; device_id as REQUIRED and sourced from list_devices. Every parameter receives meaningful semantic explanation beyond the bare schema.
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 starts with a specific verb+resource: 'Toggle the locate LED on an adopted device.' This clearly identifies the tool's function and distinguishes it from siblings like get_device or restart_device. The resource (locate LED) is unique and unambiguous.
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 explains how to obtain device_id from list_devices and provides format details for host and site, which is helpful usage guidance. However, it does not explicitly state when to use this tool versus alternatives or any exclusion conditions. Usage context is implied by the tool's purpose but not explicitly contrasted with similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
patch_firewall_policyB
Partially update a firewall policy by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
fields: fields to update on the policy.
policy_id: REQUIRED. The policy's id; obtain it from list_firewall_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| fields | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the operation is a partial update, implying PATCH semantics, but says nothing about side effects, merge/replace behavior, idempotency, permissions, or error conditions. This is a significant gap for a mutation tool.
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 succinct and well-organized: a one-sentence action followed by a compact parameter list. It earns each sentence's place and avoids redundancy with the schema except for the 'REQUIRED' marker on `policy_id`, which is acceptable emphasis.
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 description covers all four parameters with helpful format details, and an output schema exists so return-value documentation is not needed. However, it omits guidance on when to choose this partial-update tool over `update_firewall_policy`, and it does not describe what `fields` should contain beyond 'fields to update on the policy.'
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 0%, so the description must compensate. It does so by explaining `host` formats (name, ID, or MAC:numericId), `site` as name or ID, `policy_id` as obtainable from `list_firewall_policies`, and `fields` as the fields to update. The `fields` parameter remains vague about possible keys, preventing a 5.
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 opens with a specific verb and resource: 'Partially update a firewall policy by ID.' This clearly identifies what the tool does. However, it does not explicitly distinguish itself from the sibling `update_firewall_policy`, so it lacks sibling differentiation required for a 5.
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 useful context about parameter formats and where to obtain `policy_id` from `list_firewall_policies`. However, it provides no guidance on when to use this partial-update tool versus the full `update_firewall_policy` sibling, and it does not mention any exclusions or alternative selection conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pos_ingest_transactionA
Ingest a POS transaction overlay onto camera footage.
Route: POST /v1/pos/cameras/{id}/transactions (Fabric proxy).
WARNING: creates a footage overlay event with no documented rollback. This has its own
confirmation boundary and an idempotency guard; the POS write is never auto-retried.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
transaction: REQUIRED posTransactionRequest object. Must include type
('sale'|'refund'), externalId (per-camera unique idempotency/dedup key), and
amount; optional currency/lineItems/location/paymentTypes/timestamp pass through.
confirm: must be true to execute. Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No | ||
| camera_id | Yes | ||
| transaction | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden and does so well. It warns that the operation 'creates a footage overlay event with no documented rollback,' explains the confirmation boundary, calls out the idempotency guard, and states the POS write is never auto-retried. This is precisely the kind of safety-critical behavioral disclosure an agent needs.
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 dense but efficient: purpose, route, warning, and parameter semantics each occupy a short line. It front-loads the most important safety caveat and then progresses naturally through parameters. No sentence is filler.
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 mutation tool with no annotations, the description covers the essential context: what happens, how to invoke it, prerequisite lookup, required object shape, confirmation flag, idempotency, and irreversibility. Although the output schema exists, the tool's invocation and risk profile are fully explained, so no critical operational detail is missing.
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 0%, so the description must supply parameter meaning, and it does thoroughly. It explains host formats, tells the agent to source camera_id from list_cameras, enumerates the required transaction fields (type, externalId, amount), lists optional pass-through fields, and clarifies that confirm must be true. This far exceeds the bare schema.
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 opens with a specific verb and resource: 'Ingest a POS transaction overlay onto camera footage.' The route and Fabric proxy context further clarify the mechanism. It does not explicitly call out sibling alternatives, so it stops short of full 5, but there is no ambiguity about what the tool does.
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 clear operational context: camera_id must be obtained from list_cameras, confirm must be true to execute, and behavior is governed by UNIFI_PROTECT_MUTATIONS_ENABLED. It does not explicitly state when to prefer this tool over a sibling alternative, but it provides strong usage preconditions and no misleading exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptz_goto_presetA
Move a PTZ camera to a preset position slot.
host: console name, ID, or composite ID (MAC:numericId format).
slot: preset slot number to move to.
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| slot | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly conveys that the tool performs a physical move action and adds useful behavioral context such as the host format and that camera_id is required and sourced from list_cameras. It does not mention side effects like whether the preset must exist or the camera must be online, but the core mutating action is evident.
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 compact and well-structured: one purpose sentence followed by a concise parameter breakdown. Every line earns its place, and the required camera_id is highlighted prominently.
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 simple three-parameter tool and the presence of an output schema, the description is fairly complete. It covers all parameter semantics and even tells the agent where to obtain camera_id. Minor gaps include not stating that the preset must exist or the camera must be online, but these are reasonable assumptions for a PTZ move action.
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 0%, so the description must compensate. It fully does: host is explained as console name, ID, or composite ID (MAC:numericId format), slot is described as the preset slot number, and camera_id is marked as REQUIRED with a pointer to list_cameras. This provides essential meaning beyond the raw schema types.
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 starts with a specific verb and resource: 'Move a PTZ camera to a preset position slot.' This clearly states what the tool does and is easily distinguishable from sibling PTZ tools like ptz_patrol_start and ptz_patrol_stop.
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 clear parameter context (host format, slot meaning, camera_id source) but does not explicitly say when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites beyond obtaining camera_id. The usage is implied from the purpose but not directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptz_patrol_startB
Start a PTZ patrol on a preset slot.
host: console name, ID, or composite ID (MAC:numericId format).
slot: patrol preset slot number.
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| slot | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action and parameter meanings; it does not mention side effects, whether an existing patrol is stopped or replaced, camera requirements, or error conditions.
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 terse and front-loaded with the primary action, followed by three concise parameter notes. Every line adds value without unnecessary elaboration.
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?
An output schema exists, so return-value documentation is unnecessary. The parameter semantics are covered well, but as a mutating control action with no annotations, the description omits behavioral context such as prerequisites, side effects, and failure modes, leaving the agent with an incomplete operational picture.
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 input schema provides only bare types with 0% description coverage, and the description compensates by explaining all three parameters: host formats, slot meaning, and how to obtain camera_id from list_cameras. This is meaningful semantic value beyond the schema.
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: 'Start a PTZ patrol on a preset slot.' This identifies the specific verb, resource, and target action. It does not explicitly differentiate from sibling tools like ptz_goto_preset or ptz_patrol_stop, but the purpose is unambiguous.
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 such as ptz_goto_preset or ptz_patrol_stop. The only contextual note is that camera_id should come from list_cameras, which is a prerequisite hint rather than usage-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ptz_patrol_stopB
Stop the current PTZ patrol on a camera.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It names the core stop action but does not disclose side effects, idempotency, behavior when no patrol is active, or prerequisites such as PTZ capability.
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 compact and front-loaded with the primary purpose. The parameter notes are relevant and non-redundant, adding acquisition instructions without unnecessary prose.
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 an output schema present and both parameters clearly explained, the tool is callable. However, it lacks guidance on preconditions, such as whether a patrol must be active or whether the camera must support PTZ, leaving some edge-case ambiguity.
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 0%, so the description must compensate, and it does. It explains that host accepts a console name, ID, or composite MAC:numericId format, and tells the agent exactly how to obtain camera_id via list_cameras.
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 ('Stop') and the resource ('current PTZ patrol on a camera'), with a specific verb and object. It is differentiated from ptz_patrol_start by the opposite action, though it does not explicitly name that sibling.
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 phrase 'current PTZ patrol' implies this tool should be used when a patrol is already running, and the source for camera_id is provided. However, there is no explicit when-to-use vs. alternative guidance, such as noting this pairs with ptz_patrol_start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_isp_metricsA
Query filtered ISP metrics with optional site/time range filters.
This is the filtered variant of get_isp_metrics: pass host/site to scope the query and
start_time/end_time to bound the window. For a quick unscoped read, use get_isp_metrics.
interval: time bucket for metrics aggregation — '5m' or '1h'. host: console name, ID, or composite ID (MAC:numericId format) — resolves to hostId. site: site name or ID — resolves to siteId automatically. sites: advanced use — list of raw {hostId, siteId} dicts; use host/site params instead for human-readable names. start_time/end_time: ISO 8601 UTC timestamp STRINGS, e.g. "2026-07-23T00:00:00Z". These are strings, NOT epoch numbers — passing an epoch integer (seconds or milliseconds) is rejected by schema validation with 'Input should be a valid string [type=string_type]'. (Note the deliberate inconsistency with the epoch-based history tools: list_protect_events, list_client_sessions and get_historical_stats take epoch SECONDS as integers, whereas this Site Manager tool takes ISO 8601 strings.) An epoch supplied AS a string (e.g. "1690000000000") is also rejected, with the expected format, rather than being forwarded to the API as a meaningless window.
| Name | Required | Description | Default |
|---|---|---|---|
| host | No | ||
| site | No | ||
| sites | No | ||
| end_time | No | ||
| interval | Yes | ||
| start_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility, and it excels: it reveals that host/site are resolved to IDs, that start_time/end_time must be ISO 8601 strings, that epoch integers are rejected with a specific validation error, and even highlights a deliberate inconsistency with related history tools. This goes far beyond generic filtering semantics.
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 long but highly structured: an opening summary, then a per-parameter breakdown, and a detailed time-format note. Every sentence earns its place by conveying critical, non-obvious information. The front-loaded summary gives immediate purpose clarity before diving into details.
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 complexity (6 params, one required, unusual time formats) and the presence of an output schema, the description covers all invocation concerns. The only omitted aspect is return shapes, which the output schema already provides. An agent can call this tool correctly with high confidence.
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 0%, so the description fully compensates. It explains interval values, the meaning of host and site, the advanced 'sites' parameter, and the exact accepted format for start_time/end_time, including edge cases and failure modes. Every parameter is meaningfully documented.
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 opens with 'Query filtered ISP metrics with optional site/time range filters', which names a specific verb, resource, and scope. It explicitly positions itself as the filtered variant of `get_isp_metrics`, distinguishing it from the sibling tool without ambiguity.
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?
It explicitly states when to use this tool versus the alternative: 'For a quick unscoped read, use get_isp_metrics'. It also clarifies the intended use of host/site versus the advanced 'sites' parameter, giving an agent clear situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconnect_clientA
Force a client to reconnect on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
client_id: REQUIRED. Obtain it from list_clients (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It says 'Force' which implies a disruptive action, but it does not state whether the disconnect interrupts active traffic, requires special permissions, or has lasting effects. This is minimal behavioral information, not a serious omission, but still thin for a mutation-style tool.
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 compact and front-loaded: the action is stated first, followed by short, scannable parameter explanations. There is no wasted prose or redundant restating of the schema. Every sentence 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 three-parameter action with an output schema present, the description covers the tool's purpose and every parameter's format and source. It does not mention error conditions or side effects, but those are partially covered by the behavioral transparency gap rather than a missing parameter detail. Overall it is sufficiently complete for correct invocation.
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 input schema provides only bare string types with no descriptions, and schema coverage is 0%. The description compensates fully by explaining host formats (name, ID, or MAC:numericId), site name/ID, and the requirement that client_id come from the id field of list_clients. This is exactly the kind of semantic addition the schema lacks.
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: 'Force a client to reconnect on a site.' This is specific and actionable, though it does not explicitly differentiate from generic sibling actions like execute_client_action or block_client. The purpose is unambiguous even without explicit sibling contrast.
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 useful parameter sourcing guidance by pointing to list_clients for client_id, but it never explains when to choose this tool over alternatives or when not to use it. There is no comparison with related tools such as execute_client_action, block_client, or get_client_link_diagnostics, leaving the selection rationale to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_pending_deviceB
Reject a pending device, preventing it from joining the site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: device ID from list_pending_devices to reject.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the effect (preventing joining the site), but does not disclose whether rejection is reversible, destructive, requires special permissions, or affects related approvals.
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 short, front-loads the purpose, and follows with necessary parameter semantics. It has no fluff, though the parameter explanations could be more compactly integrated.
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 description covers the core operation and all parameters, and an output schema exists, so return-value documentation is unnecessary. However, without annotations, missing details about reversibility, permissions, and the relationship to approve_pending_device leave the description merely adequate rather than 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?
Schema description coverage is 0%, but the description compensates well: host is explained as console name, ID, or composite ID with the MAC:numericId format; site as name or ID; and device_id is tied to list_pending_devices. This adds meaning beyond the bare string types.
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 states a specific action and outcome: 'Reject a pending device, preventing it from joining the site.' It clearly identifies the operation on a pending device, though it does not explicitly differentiate itself from the sibling approve_pending_device.
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 no when-to-use guidance or contrasts with approve_pending_device, which is the obvious alternative. It only implies a workflow by referencing list_pending_devices for the device_id source.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relay_activate_outputA
Switch a relay output (POST /v1/relays/{id}/outputs/{outputId}/activate).
WARNING: physically switches hardware.
host: console name, ID, or composite ID (MAC:numericId format).
relay_id: REQUIRED. Obtain it from list_relays (its id field).
output_id: REQUIRED output identifier on that relay.
confirm: must be true to execute. state: 'on'|'off' (omit to toggle).
pulse_duration: auto-off ms (only when state='on'). Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| state | No | ||
| confirm | No | ||
| relay_id | Yes | ||
| output_id | Yes | ||
| pulse_duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the critical side effect: 'WARNING: physically switches hardware.' It also explains the toggling behavior of state, the conditional nature of pulse_duration (only when state='on'), and the confirm safety gate. The reference to UNIFI_PROTECT_MUTATIONS_ENABLED adds constraint context beyond the schema.
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 information-dense with no fluff, front-loading the purpose and warning. However, the formatting is slightly inconsistent: the bullet-like lines for state and pulse_duration are not evenly aligned, and the line break before 'UNIFI_PROTECT_MUTATIONS_ENABLED' interrupts flow. It is concise but not perfectly structured.
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?
Despite having 6 parameters and a physical side effect, the description covers all essentials: purpose, endpoint, parameter semantics, prerequisites, safety confirmation, and a feature-flag constraint. An output schema exists, so omitting return-value details is acceptable. An agent has everything needed to invoke this tool 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 description coverage is 0%, so the description must and does explain every parameter: host (console name/ID/composite ID), relay_id (required, sourced from list_relays), output_id (required), confirm (must be true), state (on/off, omit to toggle), and pulse_duration (auto-off ms, only when state='on'). This fully compensates for the schema's lack of descriptions.
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 opens with 'Switch a relay output,' a specific verb and resource, and reinforces it with the exact HTTP endpoint (POST /v1/relays/{id}/outputs/{outputId}/activate). This clearly distinguishes it from sibling tools like list_relays, get_relay, and update_relay, which serve different purposes.
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 explicit prerequisites: relay_id is required and must be obtained from list_relays; confirm must be true to execute; state can be omitted to toggle. It also warns about physical hardware switching and mentions the feature flag UNIFI_PROTECT_MUTATIONS_ENABLED. It does not explicitly name alternatives or when-not-to-use conditions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_deviceA
Restart an adopted device.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
device_id: REQUIRED. Obtain it from list_devices (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility for behavioral disclosure. It merely restates the operation and parameter formats; it does not disclose that a restart will reboot the device, cause temporary downtime, or potentially disrupt active connections. The agent must infer operational impact from the tool name.
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 compact and front-loaded: the purpose line comes first, followed by a tight parameter legend. There is no filler or repetition; every line adds information and is easy to scan.
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 action, the description covers purpose and all parameters well, and the output schema exists, so return-value documentation is not essential. However, it omits behavioral caveats such as expected downtime or asynchronous execution, and it does not differentiate from related device actions. It is minimally viable but not fully risk-aware.
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?
With zero schema description coverage, the description fully compensates by explaining each parameter: host accepts console name/ID/composite ID in MAC:numericId format, site accepts name or ID, and device_id is sourced from list_devices. It also highlights device_id as required with a concrete retrieval instruction.
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 opening sentence states a specific verb ('Restart') and a precise resource ('an adopted device'), making the operation unambiguous. It clearly distinguishes this from the many sibling device tools that perform different actions.
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 no guidance on when to choose restart over alternatives like execute_device_action, upgrade_device, or locate_device, nor when not to use it. The only contextual hint is 'adopted device,' which is insufficient routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_carrier_subscriberA
Resume a suspended subscriber's service (POST .../subscribers/{id}/resume). Guarded.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Guarded: read-before, no-op when not currently suspended, confirm=true, write kill-switch, read-after.
subscriber_id: the subscriber UUID from list_carrier_subscribers. confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does so thoroughly. It discloses that the tool is not testable against live hardware, lists the full guard sequence (read-before, no-op condition, confirm=true, write kill-switch, read-after), and explains the confirm and key_label behaviors. This is far beyond the minimum required.
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 well-structured: a one-line purpose with endpoint, a caveat about testing, a compact guarded list, and parameter explanations. Each sentence earns its place, and the key information is front-loaded. No fluff or repetition beyond the intentional 'Guarded.' as a header.
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 that an output schema exists and annotations are absent, the description is complete for correct invocation. It covers all parameters, the required confirm flag, the no-op state, and operational guardrails. The only omission—auth requirements—is not expected to be in a tool description and is mitigated by the listed guards.
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 input schema has 0% description coverage, but the description compensates fully: subscriber_id is defined as 'the subscriber UUID from list_carrier_subscribers', confirm is explained as 'must be true to apply the change', and key_label is described as 'optional configured API-key label to route on a specific key'. This adds significant meaning beyond raw types and defaults.
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 opens with 'Resume a suspended subscriber's service', a specific verb-resource pair, and reinforces it with the endpoint 'POST .../subscribers/{id}/resume'. It also adds the state condition 'no-op when not currently suspended', which distinguishes it from suspend and clarifies its exact scope.
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?
Usage context is explicit: it applies to suspended subscribers, and the description notes it is a no-op otherwise. It tells the agent where to obtain subscriber_id (from list_carrier_subscribers), that confirm must be true to apply, and that key_label is optional. Although it doesn't name an alternative like suspend_carrier_subscriber, the inverse relationship is clear from the verb and the suspended-state condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_across_sitesA
Search for devices or clients matching a query across all sites.
query: search term matched against name, MAC address, IP, or model.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the search scope and match fields, which is useful. However, it does not mention whether results are merged across devices and clients, pagination limits, or permission requirements. Basic behavior is clear but richer context is absent.
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 with no filler. The main action is front-loaded, and the parameter explanation is immediately useful. 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?
Given the simple single-parameter design and the presence of an output schema, the description is almost complete. It lacks a clear differentiation from similar search tools (e.g., search_device_fleet) but otherwise provides enough for a competent agent to invoke 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 description coverage is 0%, but the description explicitly explains the sole 'query' parameter: 'search term matched against name, MAC address, IP, or model.' This fully compensates for the schema's lack of semantic detail and tells the agent exactly what to pass.
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 states a specific verb 'Search', resource 'devices or clients', and scope 'across all sites'. It also lists the matched fields (name, MAC, IP, model), distinguishing it from list-style siblings like list_all_devices or list_all_clients. No ambiguity.
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. There is no mention of search_device_fleet or other search-like tools, and no condition for selecting this one. The description only explains what it does, not when to prefer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_device_fleetA
Search for a device by name, MAC address, or model across the entire fleet.
Returns all matching devices from all consoles. key_label: scope search to consoles visible to a specific API key. query: REQUIRED. Search string matched against device name, model, and MAC across the fleet.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| key_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses that it returns all matching devices from all consoles and that key_label scopes the search, which is useful. It does not mention pagination, limits, read-only status, or response details, but for a search tool this may be acceptable. Overall, it adds some transparency but not rich detail.
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 and well-structured, front-loading the core purpose, then adding a one-line scope statement and parameter clarifications. Every sentence adds value, with no redundancy or filler.
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 two-parameter search tool with an output schema, the description is quite complete. It covers the search behavior, scope, and parameter semantics. It could optionally mention matching semantics (case sensitivity, partial match) but such details are not critical for correct invocation.
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 has no parameter descriptions (0% coverage), so the description fully compensates. It clearly explains that query is required and matched against name, model, and MAC, and that key_label scopes to consoles visible to a specific API key. Both parameters are given practical meaning beyond raw schema definitions.
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 states a clear verb and resource: 'Search for a device by name, MAC address, or model across the entire fleet.' It also clarifies scope by noting 'all consoles,' which differentiates it from more targeted device searches. However, it does not explicitly contrast with the similarly named sibling search_across_sites, so it stops short of a 5.
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 when to use it (fleet-wide search) but does not explicitly state when to choose this over alternatives like list_devices or search_across_sites. It does provide parameter-level guidance for key_label, which helps an agent decide how to scope the search. This is adequate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_acl_rule_orderingB
Set the ordering of ACL rules for a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. ordering: ACL rule ordering configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| ordering | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states that ordering is 'set' and describes parameters; it does not reveal whether existing ordering is fully replaced, whether validation occurs, or whether the operation is reversible or destructive. This is a meaningful gap for a mutation tool.
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 compact and front-loaded with the purpose before parameter details. The parameter lines are mostly useful, though the 'ordering' line adds little information. Overall, there is no fluff, but the redundant ordering description keeps it from being a perfect 5.
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 mutating tool with a nested, unstructured 'ordering' object, the description is incomplete. It does not explain the expected shape of ordering, and no annotations or schema details compensate. Even though an output schema exists, the agent may not be able to construct a correct request without external examples.
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 0%, so the description must compensate. It adds useful meaning for host and site (formats like 'MAC:numericId', name or ID), but the key parameter 'ordering' is only described tautologically as 'ACL rule ordering configuration', leaving the actual object structure unexplained.
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 states a specific verb ('Set'), a precise resource ('ordering of ACL rules'), and the scope ('for a site'). This clearly distinguishes it from siblings like get_acl_rule_ordering, update_acl_rule, and the analogous set_firewall_policy_ordering.
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 purpose statement implies this tool is for assigning ACL rule ordering rather than reading it, but it never explicitly mentions alternatives or when not to use it. The agent must infer usage context from the verb and resource rather than being given direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_firewall_policy_orderingA
Set the ordering of firewall policies within one source/destination zone pair.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. source_zone_id: UUID of the source firewall zone. REQUIRED by the API and sent as a query parameter (NOT read from the ordering body); omitting it returns HTTP 400. destination_zone_id: UUID of the destination firewall zone. Same requirement as source_zone_id. Use the same zone pair you read with get_firewall_policy_ordering. ordering: policy ordering configuration (the ordered policy list for that zone pair).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| ordering | Yes | ||
| source_zone_id | Yes | ||
| destination_zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses critical API behavior: zone IDs are required query parameters, are NOT read from the ordering body, and omitting them returns HTTP 400. It also clarifies that the operation applies to a single zone pair, which prevents misuse. It does not discuss permissions or reversibility, but the core mutation semantics are clearly communicated.
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 front-loaded with the core action and then organized into a clear parameter-by-parameter breakdown. Every sentence conveys necessary operational information, with no filler or repetition beyond the purposeful 'Same requirement' shorthand.
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 description covers all five required parameters, the API-specific query parameter requirement, error behavior, and the relationship to get_firewall_policy_ordering. The exact internal structure of the ordering object is left somewhat open, but the reference to reading the same zone pair gives the agent a practical path to discover the expected shape. Given the output schema exists, return-value documentation is not needed.
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 input schema has 0% description coverage and only provides types. The description fully compensates by explaining exactly what each parameter means: host and site formats, UUIDs for zone IDs, the required query-parameter behavior, and what the ordering object represents.
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 first sentence, 'Set the ordering of firewall policies within one source/destination zone pair,' names a specific verb, resource, and scope. It clearly distinguishes this tool from get_firewall_policy_ordering and set_acl_rule_ordering without ambiguity.
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 instructs the agent to use the same source/destination zone pair read via get_firewall_policy_ordering, which establishes a clear precondition and pairs this setter with its getter. It does not explicitly list when not to use the tool, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
siren_playA
Sound a siren (POST /v1/sirens/{id}/play). WARNING: physical alarm sound.
host: console name, ID, or composite ID (MAC:numericId format).
siren_id: REQUIRED. Obtain it from list_sirens (its id field).
confirm: must be true to execute. duration: seconds (5/10/20/30; defaults to 5
upstream). Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No | ||
| duration | No | ||
| siren_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It prominently warns 'physical alarm sound' and notes that execution is controlled by UNIFI_PROTECT_MUTATIONS_ENABLED and requires confirm=true. This conveys meaningful safety and mutation context beyond the schema.
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 dense and efficient: a warning, endpoint, and four one-line parameter explanations. No filler or redundant content exists, and the safety warning is front-loaded.
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?
All required invocation details are present: how to get siren_id, how to confirm, duration options, and the mutation gate. Since an output schema exists, return-value details are not the description's responsibility. The description is complete for a safety-relevant action.
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 0%, so the description must explain every parameter, and it does: host format, siren_id source, confirm requirement, and duration choices with upstream default. This fully compensates for the empty schema descriptions.
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 begins with a specific action, 'Sound a siren (POST /v1/sirens/{id}/play),' making the tool's purpose unambiguous. It clearly distinguishes this tool from siblings like siren_stop or siren_test_sound by naming a distinct verb and endpoint.
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 practical usage instructions: siren_id must come from list_sirens, confirm must be true, and duration options are listed. It does not explicitly compare against sibling tools like siren_stop or siren_test_sound, but the context of when to use it is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
siren_stopA
Stop a sounding siren (POST /v1/sirens/{id}/stop). WARNING: physical action.
host: console name, ID, or composite ID (MAC:numericId format).
siren_id: REQUIRED. Obtain it from list_sirens (its id field).
confirm: must be true to execute. Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No | ||
| siren_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly warns 'WARNING: physical action', states that confirm must be true, and mentions the governing environment variable UNIFI_PROTECT_MUTATIONS_ENABLED. This discloses the mutating physical nature and safety gating beyond the bare schema.
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?
Three compact lines: purpose with warning, endpoint, then parameter notes. Every line earns its place, and the critical warning is front-loaded.
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 3-parameter mutation tool with an output schema present, the description covers the warning, execution prerequisite, param sourcing, and safety gating. No essential operational detail is missing.
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 0%, so the description must explain parameters itself. It does so well: host format (console name, ID, or composite ID MAC:numericId), siren_id source and requirement, and the confirm boolean's role and gating. This adds meaning the schema does not provide.
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 opens with a specific verb-resource pair, 'Stop a sounding siren', and gives the exact REST endpoint. It clearly distinguishes this from siblings like siren_play and siren_test_sound by stating the action is stopping an active siren.
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?
It tells the agent how to obtain siren_id from list_sirens and that confirm must be true, which is actionable guidance. It does not explicitly list when not to use this tool versus update_siren or siren_test_sound, but the purpose is clear enough that an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
siren_test_soundA
Test a siren's sound (POST /v1/sirens/{id}/test-sound). WARNING: physical sound.
host: console name, ID, or composite ID (MAC:numericId format).
siren_id: REQUIRED. Obtain it from list_sirens (its id field).
confirm: must be true to execute. volume: 1-100 (defaults to device volume upstream).
Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| volume | No | ||
| confirm | No | ||
| siren_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It warns about physical sound, notes that confirm must be true to execute, and mentions the UNIFI_PROTECT_MUTATIONS_ENABLED gate. It does not describe the exact side effects beyond sound, but it covers the most important safety-relevant behavior.
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 compact and well-structured: purpose and warning first, then parameter bullets. Every sentence carries useful information with no filler or repetition.
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 annotations and four parameters, the description covers the essential context: physical side effect, host/siren_id sourcing, confirmation gating, and volume limits. It does not explicitly mention alternatives like siren_play, but the output schema covers return values, so nothing critical is missing.
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 0%, so the description must compensate, and it does. It explains the host format, marks siren_id as required with a source, explains confirm must be true, and gives volume a range plus a fallback default. Every parameter receives meaningful semantic context beyond the raw schema.
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 a specific verb and resource: 'Test a siren's sound' with the exact endpoint. It is easy to understand what the tool does, though it does not explicitly differentiate itself from similar siblings like siren_play or speaker_test_sound.
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 strong operational guidance: where to obtain siren_id, the host format, the confirm requirement, and the volume range. It does not explicitly say when to prefer this tool over siren_play or speaker_test_sound, but the context for correct invocation is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
speaker_test_soundA
Test a speaker's sound (POST /v1/speakers/{id}/test-sound). WARNING: physical sound.
host: console name, ID, or composite ID (MAC:numericId format).
speaker_id: REQUIRED. Obtain it from list_speakers (its id field).
confirm: must be true to execute. volume: 0-100 (defaults to device volume upstream).
Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| volume | No | ||
| confirm | No | ||
| speaker_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It prominently warns about physical sound, requires confirmation, and mentions the UNIFI_PROTECT_MUTATIONS_ENABLED gate. This meaningfully discloses side effects and execution safeguards, though it does not detail return behavior or errors.
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 well-structured and front-loaded with the warning and endpoint. It is mostly economical, though the 'REQUIRED' marker for speaker_id partially duplicates the schema's required list. Overall, each line adds practical value.
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 side-effecting test action with an output schema, the description covers the key invocation details: identifier sourcing, confirmation, volume, and environment gating. It could be more complete with an explicit comparison to siren_test_sound or notes on failure conditions, but it is sufficient for correct invocation.
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 input schema has 0% description coverage, so the description fully compensates. It explains host format, where to obtain speaker_id, the confirm requirement, and the volume range/default. This is essential semantic information an agent could not derive from the schema alone.
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 ('Test a speaker's sound') and the exact resource/endpoint (POST /v1/speakers/{id}/test-sound). The resource is explicit enough to distinguish from the sibling siren_test_sound tool.
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 clear operational context: speaker_id must come from list_speakers, confirm must be true, volume is a 0-100 range, and there is a physical sound warning. It does not explicitly compare against siren_test_sound, but the usage conditions are concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_talkback_sessionA
Start a talkback audio session on a Protect camera.
host: console name, ID, or composite ID (MAC:numericId format).
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action and parameter sourcing; it does not disclose side effects (e.g., a persistent two-way audio stream, potential privacy implications, or whether a session must be ended manually). This is a significant gap for a mutating action.
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 compact, front-loaded with the action, and includes only necessary parameter guidance without redundant phrasing.
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 has an output schema and only two parameters, but the description omits important operational context such as how the session is terminated, prerequisites for the camera, and whether talkback requires any special permissions. For an action with no explicit stop sibling, this leaves an agent without a complete picture.
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 description adds meaningful parameter documentation beyond the raw string schema: it defines host as 'console name, ID, or composite ID (MAC:numericId format)' and instructs the agent to get camera_id from list_cameras. This compensates for the 0% schema description coverage.
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 opens with a specific verb ('Start') and resource ('talkback audio session on a Protect camera'). It accurately names the action and distinguishes from all sibling tools by identifying a unique camera capability.
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?
It gives clear context by explaining that camera_id must be obtained from list_cameras, and defines acceptable host formats. It does not explicitly contrast with alternatives, but no direct alternative for talkback exists among siblings, so the guidance is sufficient for selecting the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suspend_carrier_subscriberA
Suspend a subscriber's service (POST .../subscribers/{id}/suspend). Guarded write.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Guarded: read-before, no-op when already suspended, confirm=true, write kill-switch, read-after. An optional reason is recorded on the subscriber.
subscriber_id: the subscriber UUID from list_carrier_subscribers. reason: optional free-text suspension reason. confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | ||
| confirm | No | ||
| key_label | No | ||
| subscriber_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden of behavioral disclosure. It details the guarded-write sequence (read-before, no-op when already suspended, confirm=true, write kill-switch, read-after), states that the tool is not testable against live hardware, and mentions that an optional reason is recorded on the subscriber. This goes well beyond a simple mutating action and gives the agent a realistic model of side effects and safety mechanisms.
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 fairly long but every sentence earns its place: the action and endpoint are front-loaded, the guarded-write explanation is dense, and parameter guidance follows. The only minor redundancy is repeating the guarded-write pattern in slightly different phrasing, but overall it is well organized and avoids fluff.
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 four parameters, one required, and an output schema present, the description covers the essential inputs and behavioral guardrails. It does not describe return values or error cases, but the output schema can handle that. The warnings about hermetic testing and no-op behavior add necessary context for a state-changing tool. Minor gaps: no mention of idempotency for the confirm parameter or expected response codes, but the overall context is sufficient.
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 0%, but the description fully documents each parameter: subscriber_id is sourced from list_carrier_subscribers, reason is optional free-text, confirm must be true to apply the change, and key_label is an optional API-key label for routing. This adds meaningful operational context far beyond the raw schema types and defaults, and even explains the source of the ID.
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 opens with a specific verb and resource: "Suspend a subscriber's service," which clearly identifies the action. It also includes the endpoint path and names the key parameters, making the purpose unambiguous. However, it does not explicitly contrast with sibling tools like resume_carrier_subscriber, though the action itself is self-explanatory.
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 rich context about the guarded-write procedure (read-before, no-op when already suspended, confirm=true, write kill-switch, read-after) and notes that it is only hermetic/spec-conformance tested. However, it does not explicitly state when to use this tool versus alternatives (e.g., resume_carrier_subscriber) or when not to use it. The usage context is implied by the action name and the guarded-write safety remarks rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_alarm_webhookA
Trigger an alarm manager webhook by ID. WARNING: triggers physical alarm hardware. Verify webhook ID is correct before confirming.
host: console name, ID, or composite ID (MAC:numericId format). webhook_id: alarm webhook ID to trigger. confirm: must be True to execute. Prevents accidental triggers on live infrastructure.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| confirm | No | ||
| webhook_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns that the tool triggers physical alarm hardware, explains that confirm prevents accidental triggers, and states that confirm must be True. This is highly transparent for a potentially dangerous operation.
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 compact and front-loads the critical warning before parameter details. Every sentence serves a purpose, and the parameter list is structured for quick agent parsing without unnecessary fluff.
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 dangerous but simple trigger tool, the description covers the operation, the required confirmation, parameter formats, and the safety rationale. With an output schema present, return-value documentation is not required. Nothing essential for invoking the tool correctly is missing.
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 0%, so the description must compensate for all parameters. It does: host is explained with accepted formats, webhook_id is identified as the alarm webhook ID, and confirm is given its boolean requirement and safety purpose. This goes well beyond the raw schema.
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 ('trigger'), the resource ('alarm manager webhook'), and the means ('by ID'). It does not explicitly name or differentiate from sibling tools, but 'alarm manager webhook' is specific enough to avoid obvious confusion with most siblings.
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 clear operational guidance: verify the webhook ID and set confirm to True before execution. It does not explicitly compare against alternatives or state when not to use the tool, but the warning and confirmation requirement make the intended use context unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unadopt_deviceC
Unadopt (remove) a device from a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. device_id: unique identifier of the device to remove.
Example: unadopt_device(host="main-office", site="HQ", device_id="device-uuid-here")
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It indicates a destructive/unadoption action but does not reveal consequences such as whether the device is fully removed, whether it becomes unmanaged, whether the action is reversible, or any permission requirements. This is a significant gap for a destructive operation.
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 and well-structured: purpose is front-loaded, followed by parameter clarifications, and ending with an example. No wasted words, but it could be slightly more scannable with bullet points.
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 this is a destructive operation with no annotations and no output schema details, the description omits important contextual information such as preconditions (device must be in the site), effects on device lifecycle, and return value. An agent would not know whether the operation succeeds silently or returns a status. The example is helpful but not sufficient for full contextual 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 description coverage is 0%, so the description must compensate. It does explain each parameter: host as console name/ID/composite ID, site as name/ID, and device_id as unique identifier. It also provides a concrete example. This adds value beyond the bare schema, though it lacks details about how to obtain device_id or format constraints beyond the MAC:numericId hint for host.
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 states a clear verb and resource: 'Unadopt (remove) a device from a site.' It distinguishes this from sibling adopt_device by using the 'unadopt' term and explicitly defining it as removal. However, it could be more explicit about the operational difference between 'unadopted' and 'removed' states.
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 no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. It only describes what the tool does, not when an agent should invoke it or when it should not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unblock_clientA
Unblock a previously blocked client on a site.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
client_id: REQUIRED. Obtain it from list_clients (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| client_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It clearly states the action and the precondition ('previously blocked'), but it does not mention reversibility, permissions, idempotency, or side effects beyond the core unblock operation.
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 three short lines with no filler. The purpose is front-loaded, and parameter guidance is compact and directly actionable.
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 description covers the main precondition and fully documents parameter semantics, and the output schema handles return details. It could add guidance on edge cases like unblocking a client that isn't currently blocked, but this is minor for a simple targeted action.
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 0%, but the description compensates fully: it explains accepted forms for host and site and gives an exact source and field for client_id. Every parameter is given meaningful guidance beyond the raw schema.
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 ('Unblock') and resource ('previously blocked client'), and scopes it to a site. This clearly distinguishes it from the sibling block_client and other client-action 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?
It provides useful procedural guidance—client_id must come from list_clients—and marks it as REQUIRED. However, it does not explicitly state when to choose this tool over related actions like execute_client_action or block_client, nor how to handle an already-unblocked client.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_acl_ruleA
Update an existing ACL rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
rule: full ACL rule configuration to replace with.
rule_id: REQUIRED. The rule's id; obtain it from list_acl_rules (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| rule | Yes | ||
| site | Yes | ||
| rule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure. It notes that the rule is replaced with a 'full ACL rule configuration', indicating a full-overwrite behavior. However, it omits any mention of required permissions, reversibility, or potential side effects on related resources.
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 and front-loaded with the primary action. It efficiently covers key parameter details in a compact four-line format without extraneous text. Minor improvement could be explicit bullet formatting for readability, but current structure meets needs.
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 that an output schema exists, return values are covered. The description provides essential parameter context but does not mention any operational constraints (e.g., host and site must exist, rule_id must be valid, or that the rule is replaced entirely). These are relevant for a mutation tool, so some completeness is missing.
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 provides zero descriptions, so the description fully compensates by explaining all four parameters: host (with accepted formats), site, rule (full configuration), and rule_id (required, with source). The only gap is the internal structure of the 'rule' object, which is left as an open schema.
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 ('Update an existing ACL rule') and the resource ('ACL rule'), and specifies identification by ID. It is distinct from create or delete operations, though it doesn't explicitly name sibling alternatives like 'create_acl_rule' or 'delete_acl_rule'.
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 instructs where to obtain the rule_id ('obtain it from list_acl_rules'), which implies this tool is for modifying an existing rule. However, it does not explicitly state when to use this tool versus creating or deleting a rule, nor does it mention any prerequisites like the rule must exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alarm_hubA
Update alarm-hub settings (PATCH /v1/alarm-hubs/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
alarm_hub_id: REQUIRED. Obtain it from list_alarm_hubs (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| alarm_hub_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes full responsibility for behavioral disclosure. It reveals a read-before/no-op/read-after pattern and states that no write occurs when all fields match, plus the governing environment variable UNIFI_PROTECT_MUTATIONS_ENABLED. This gives agents a realistic model of the tool's side effects, though it lacks explicit permission or rollback details.
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 compact and front-loaded with the operation and pattern, then breaks into a tight parameter list. No wasted words; all sentences contribute essential information for correct invocation.
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 mutating tool with no annotations and an output schema, the definition covers the essential operational context (parameters, behavior, guarded by env var). It could add notes on permissions or side effects, but the read-before/no-op pattern already mitigates the main risks, making it sufficient for safe usage.
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 0%, but the description compensates fully by explaining each parameter: host formats (name, ID, composite ID), alarm_hub_id provenance via list_alarm_hubs, and settings as fields to change. This transforms an opaque schema into actionable 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?
Description clearly states 'Update alarm-hub settings' with the specific HTTP method, naming the resource and operation. It distinguishes itself from sibling tools like list_alarm_hubs and get_alarm_hub by implying a mutation action on an existing alarm hub.
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 clear guidance on how to obtain required parameters (alarm_hub_id from list_alarm_hubs) and explains the update behavior (fields to change, no-op when matching). However, it does not explicitly state when not to use this tool or mention alternatives, though the resource-specific nature makes that less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_arm_profileA
Update an arm profile (PATCH /v1/arm-profiles/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
arm_profile_id: REQUIRED. Obtain it from list_arm_profiles (its id field).
settings: fields to change. If all already match, no write is sent (status=noop).
Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| arm_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. It discloses the read-before/no-op/read-after pattern, explicitly states that no write is sent when all settings already match, and reveals that the write is governed by UNIFI_PROTECT_MUTATIONS_ENABLED. It stops short of describing auth requirements, side effects, or reversibility, but the core behavioral traits are well covered.
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 compact and front-loaded, with the core action and endpoint in the first sentence followed by a clean parameter break-down. Minor redundancy exists: `read-before/no-op/read-after` is restated in the `settings` line, and `REQUIRED` repeats the schema's required list, but the overall structure is easy to scan.
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?
An output schema exists, so return-value documentation is not needed. The description covers the essential behavioral and parameter context well. However, given the sibling `update_arm_profile_settings` and the lack of any differentiation, an agent could pick the wrong tool. It also omits any mention of authentication or permission requirements for this mutation.
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 0%, so the description must fully compensate, and it does. Each of the three parameters gets meaningful guidance: `host` format, `arm_profile_id` provenance, and `settings` semantics including the no-op behavior. This adds substantial value beyond the bare JSON schema.
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 ('Update'), the resource ('an arm profile'), and the HTTP method (PATCH). It adds the specific endpoint path, so an agent knows exactly what operation is performed. However, it does not distinguish this tool from the sibling `update_arm_profile_settings`, which appears to overlap in 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?
The description gives useful prerequisites, such as how to obtain `arm_profile_id` from `list_arm_profiles` and the host formats accepted. It also implies usage through the parameter guidance and notes the no-op condition. But it does not explicitly say when to use this tool versus the similar-sounding `update_arm_profile_settings`, and no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_arm_profile_settingsA
Select the active arm profile (PATCH /v1/arm-profiles/settings).
host: console name, ID, or composite ID (MAC:numericId format).
arm_profile_id: REQUIRED. Obtain it from list_arm_profiles (its id field); this
becomes the console's selected arm profile. Reads the NVR armMode before/after
(no-op if already selected). Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| arm_profile_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses a side effect (becomes the selected arm profile), an important idempotency trait (no-op if already selected), and a governance gate (UNIFI_PROTECT_MUTATIONS_ENABLED). It could add more about failure modes, but it gives meaningful behavioral context beyond the schema.
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 compact, starts with the core action, and integrates parameter guidance and behavioral notes in a few lines. No filler or redundant restating of the schema is present.
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 two-parameter tool with an output schema, the description is largely complete: it covers parameter semantics, the selection side effect, idempotency, and the mutation gate. The only small gap is that 'Governed by UNIFI_PROTECT_MUTATIONS_ENABLED' is terse and does not state what happens when the flag is disabled, which an agent might need to know.
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 0%, so the description fully compensates. It explains that host accepts a console name, ID, or composite MAC:numericId format, and it tells the agent exactly how to obtain arm_profile_id from list_arm_profiles. This is precisely the kind of semantic detail an agent needs.
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 opens with a specific action and resource: 'Select the active arm profile'. It also provides the exact endpoint, which makes the operation unambiguous. It is clearly distinguished from sibling tools like update_arm_profile, which implies editing profile details rather than setting the active selection.
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 clear context: this changes which profile is the console's selected active arm profile and says it is a no-op if the profile is already selected. It does not explicitly name alternatives or say 'use this instead of X', but the scoping is strong enough to guide correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_bridgeA
Update bridge settings (PATCH /v1/bridges/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
bridge_id: REQUIRED. Obtain it from list_bridges (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| bridge_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses a read-before/no-op/read-after pattern, states 'No write when all match', and mentions the UNIFI_PROTECT_MUTATIONS_ENABLED governance. This goes beyond a generic 'update' and gives meaningful behavioral expectations.
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 compact and well-structured, using line breaks per parameter. Every sentence adds value: endpoint, parameter explanations, id acquisition, and mutation governance are all included without fluff.
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?
All three parameters are meaningfully explained, and the output schema exists so return values need not be described. The main gaps are minor: behavior when UNIFI_PROTECT_MUTATIONS_ENABLED is false and error handling are not specified, but the tool is still fully invokable.
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 0%, so the description must fully document parameters. It explains host as 'console name, ID, or composite ID (MAC:numericId format)', bridge_id as REQUIRED and obtainable from list_bridges, and settings as 'fields to change' with idempotence behavior. This is comprehensive parameter guidance.
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 'Update bridge settings' and gives the exact endpoint PATCH /v1/bridges/{id}, making the operation unambiguous. It distinguishes this tool from sibling getters and other update_* tools by naming 'bridge' 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?
It provides useful context: obtain bridge_id from list_bridges, and notes that writes are governed by UNIFI_PROTECT_MUTATIONS_ENABLED. It does not explicitly mention alternatives or exclusions, but the context is clear enough for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cameraA
Update settings for a Protect camera (name, recording mode, etc.).
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of camera settings to update.
camera_id: REQUIRED. Obtain it from list_cameras (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| camera_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of disclosing behavior. It says 'Update settings' but does not mention mutation side effects, permissions, reversibility, or what happens to the camera when settings change. The parameter notes describe inputs, not behavioral impact.
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 compact, front-loaded with the core action, and each parameter has a short purpose-specific line. No sentence is wasted or redundant.
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 description covers required parameters and the prerequisite lookup, and an output schema exists so return values need not be explained. However, the freeform settings object with additionalProperties true leaves allowed keys and update side effects under-specified, which an agent needs to call this tool confidently.
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 has 0% description coverage, and the description compensates well: host is clarified as 'console name, ID, or composite ID (MAC:numericId format)', and camera_id is tied to list_cameras. 'settings' is described only as 'key-value pairs of camera settings to update,' which is adequate but not exhaustive about valid keys.
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 names a specific action and resource: 'Update settings for a Protect camera,' and it gives concrete examples ('name, recording mode, etc.'). This clearly distinguishes it from sibling camera tools like get_camera, get_camera_snapshot, or disable_camera_mic_permanently.
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 clear operating context by stating that camera_id is REQUIRED and must be obtained from list_cameras, which is a useful prerequisite. It does not explicitly discuss when to prefer this over alternatives or call out exclusions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_carrier_subscriberA
Update a Carrier / ISP Fabric subscriber (PATCH .../subscribers/{id}). Guarded write.
Not testable against the maintainer's live hardware; hermetic/spec-conformance tested only. Documented partial update: only the fields you pass are sent; omitted fields are left unchanged; pass at least one. subscriber_number is 1-32 chars when provided. Guarded: read-before, no-op when all provided fields already match, confirm=true, write kill-switch, read-after. NOTE: unlike the module function, omitting a field here (None) leaves it unchanged — MCP cannot express an explicit-null "clear" through this wrapper.
subscriber_id: the subscriber UUID from list_carrier_subscribers. subscriber_number/name/email/notes/service_address/plan_id/metadata: optional new values. confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| No | |||
| notes | No | ||
| confirm | No | ||
| plan_id | No | ||
| metadata | No | ||
| key_label | No | ||
| subscriber_id | Yes | ||
| service_address | No | ||
| subscriber_number | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the guarded-write behavior: read-before, no-op when fields match, confirm flag, write kill-switch, read-after. It also notes the testing limitation and clarifies the None/omit semantics, which is critical for an MCP wrapper.
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 dense but well-organized: it leads with the operation, then lists behavioral constraints, then parameter details. Every sentence earns its place, including the NOTE that clarifies a common pitfall. No fluff or repetition.
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 complex guarded update with 10 parameters and no annotations, the description covers the operation flow, parameter roles, validation constraints, and confirmation requirement. The presence of an output schema means return-value details are not needed. The description is sufficiently complete for an agent to call the tool 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 description coverage is 0%, so the description must explain parameters. It does: subscriber_id sourced from list_carrier_subscribers, confirm must be true, optional fields listed, key_label semantics explained. It also highlights the 1-32 char constraint on subscriber_number, adding value beyond the schema.
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 opens with a clear verb and resource: 'Update a Carrier / ISP Fabric subscriber (PATCH .../subscribers/{id})'. This unambiguously states the operation and target, and the resource name distinguishes it from sibling tools like create_carrier_subscriber or suspend_carrier_subscriber.
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 clear usage context: it is a guarded write, requires confirm=true, and mandates at least one provided field. It does not explicitly state when NOT to use it or name alternative tools, but the update semantics and prerequisites are well conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_chimeA
Update settings for a Protect chime (volume, ringtone, etc.).
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of chime settings to update.
chime_id: REQUIRED. Obtain it from list_chimes (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| chime_id | Yes | ||
| settings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral disclosure burden, but it only states 'Update settings' without describing mutation effects, permission requirements, whether settings are merged or replaced, reversibility, or failure behavior. The examples hint at what changes but not their implications.
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 compact and well-ordered: one clear purpose sentence followed by concise parameter notes. Every line adds useful information, and the required-parameter sourcing hint is placed where it is easy to act on.
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?
All three required parameters are explained, the resource is clear, and the output schema exists so return-value documentation is not needed. The main gap is the lack of behavioral detail (e.g., whether updates are partial or full) and no enumeration of valid settings keys, but for a simple update operation the description gives an agent enough to make a correct call.
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 0%, so the description compensates meaningfully: it explains that host accepts a console name, ID, or composite ID (MAC:numericId), that settings is a key-value map, and that chime_id must come from list_chimes. It does not enumerate all valid setting keys, but it provides concrete examples and format guidance beyond the bare schema.
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 names the exact action ('Update settings') and the specific resource ('a Protect chime'), with concrete examples ('volume, ringtone, etc.'). This clearly distinguishes it from read-only chime tools like list_chimes/get_chime and from update tools for other device types.
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 clear context: it is for updating Protect chime settings. It also tells the agent how to source the required chime_id from list_chimes, which is practical usage guidance, though it does not explicitly discuss when not to use this tool or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_device_tagA
Update a device tag by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tag_id: device tag ID to update. tag: fields to update (name, color, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| host | Yes | ||
| site | Yes | ||
| tag_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description suggests partial-update behavior through 'tag: fields to update', which is useful behavioral context. However, with no annotations provided, it does not disclose side effects, whether unspecified tag fields are preserved or overwritten, required permissions, or any mutation caveats.
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 four short lines: the action is front-loaded, and each parameter gets one concise line. There is no filler, repetition, or unnecessary detail for a four-parameter tool.
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 description covers the core purpose and all parameter semantics, and an output schema exists to document return values. It is incomplete in usage guidance and mutation transparency, leaving an agent to infer when to update rather than create/delete and what happens to existing tag fields.
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 0%, so the description must carry the parameter semantics, and it does for all four required params: host formats, site name/ID, tag_id's role, and tag contents examples. The full set of allowed tag fields is left unspecified, but the schema itself leaves the object open via additionalProperties.
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 opening line states a specific action ('Update') and a specific resource ('device tag') with the criterion 'by ID', which clearly distinguishes it from create_device_tag, delete_device_tag, and list_device_tags. No schema inspection is needed to understand what this tool does.
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?
There is no explicit guidance about when to use this tool versus create_device_tag, delete_device_tag, or list_device_tags. The only signal is the verb 'update' and the 'by ID' phrasing, which implies an existing tag but never states the condition or names alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_policyA
Update a DNS policy by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy: full DNS policy configuration to replace with.
policy_id: REQUIRED. The policy's id; obtain it from list_dns_policies (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the behavioral disclosure burden. It clearly states that policy is the 'full DNS policy configuration to replace with,' signaling complete replacement semantics rather than a partial update. It does not cover permissions or failure modes, but the replacement behavior is a meaningful and non-obvious disclosure.
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 opens with a one-sentence purpose statement, then provides compact per-parameter guidance. There is no filler or redundant restatement; every line contributes useful 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?
The description covers the essential invocation details and the presence of an output schema reduces the need to document return values. However, the nested policy object is the tool's core payload and its expected structure is not described or referenced, leaving a material gap for an agent trying to construct a valid call.
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 input schema has 0% description coverage, so the description is the only source of parameter meaning. It explains host's name/ID/composite formats, site name/ID, the role of policy as a full replacement, and where to get policy_id. The inner structure of the policy object is left unspecified, which prevents a higher score.
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?
States a specific verb and resource: 'Update a DNS policy by ID.' It clearly sets this apart from sibling tools like create_dns_policy, get_dns_policy, and delete_dns_policy by emphasizing the existence of an ID and a full replacement config.
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?
It provides helpful context, such as obtaining policy_id from list_dns_policies and treating policy as the full replacement configuration, which implies the target policy already exists. However, it never explicitly says when to use update_dns_policy instead of create_dns_policy, nor does it mention exclusions or alternative approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dynamic_dnsB
Update a Dynamic DNS configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
payload: DDNS configuration fields to update.
ddns_id: REQUIRED. Obtain it from list_dynamic_dns (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| ddns_id | Yes | ||
| payload | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It only states the parameters and the fact that ddns_id is required. It does not mention side effects, irreversibility, permission requirements, or what the response contains. For a mutation operation, this is a significant transparency gap.
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 compact and efficient. It front-loads the action and resource, then provides parameter explanations in short bullet-like lines. Every sentence adds useful information without redundancy.
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 there is no output schema and no annotations, the description supplies essential parameter semantics but omits behavioral or situational context. For an update operation, an agent would benefit from knowing about idempotency, partial update behavior, or likely error conditions. The description is adequate for basic invocation but not fully 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 has 0% description coverage, but the description compensates well by explaining each parameter: host formats, site identity, payload purpose, and how to obtain ddns_id. It adds value beyond the bare schema types, especially for the host composite ID and the payload 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 ('Update') and the resource ('Dynamic DNS configuration by ID'). It distinguishes itself from sibling tools like list_dynamic_dns and get_dynamic_dns by focusing on updating a specific configuration identified by ddns_id. However, it doesn't explicitly contrast with get_dynamic_dns or update variants in other domains, so it stops short of full differentiation.
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 explains how to obtain ddns_id from list_dynamic_dns, which is useful operational guidance. It does not explicitly state when to choose this tool over alternatives or mention any prerequisites (e.g., required permissions or whether the DDNS must exist first). The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_firewall_policyA
Full-replace a firewall policy by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
policy: full firewall policy configuration to replace with.
policy_id: REQUIRED. The policy's id; obtain it from list_firewall_policies (its id field).
trafficFilter (optional; may appear on source and/or destination) narrows the match
beyond the zone pair. Set trafficFilter.type plus the ONE matching nested object:
IP_ADDRESS -> ipAddressFilter.items[] (IP addresses / CIDRs)
NETWORK -> networkFilter.networkIds[] (network UUIDs)
PORT -> portFilter.items[] (ports / port ranges)
MAC_ADDRESS -> macAddressFilter.macAddresses[] (client MAC addresses) The controller may also support further types (e.g. region/identity-based); list_firewall_policies only reveals the types already in use on a site, so an unlisted type is not evidence it is unsupported. PORT-FILTER PLACEMENT FOOTGUN: a portFilter under source.trafficFilter filters SOURCE ports, which for outbound flows are ephemeral (random high ports) -> the rule silently matches nothing. A destination-port rule MUST use destination.trafficFilter with type PORT, never a source portFilter. (create/update_firewall_policy log a runtime warning when a source PORT filter is combined with an any-destination ALLOW.)
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| policy | Yes | ||
| policy_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it delivers. It explicitly says 'full-replace', which conveys potentially destructive behavior. It discloses the trafficFilter matching semantics and prominently warns about the port-filter placement footgun, including the silent no-match outcome and the runtime warning behavior. This is far more transparent than a generic 'update' description.
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?
Although somewhat long, every sentence is operational and earns its place. The description is front-loaded with the core purpose, then logically structured into parameter definitions, trafficFilter alternatives, and a highlighted footgun warning. Formatting with lists and all-caps warning aids scanning. There is no filler or repetition.
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 complexity (nested objects, required policy object, zero schema descriptions), the description covers all essential aspects: operation type, parameter formats, how to source the ID, and the critical port-filter trap. The existence of an output schema means return value details need not be included. An agent has enough to invoke the tool correctly, and the pointer to list_firewall_policies helps with the ID.
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 descriptions are completely absent (0% coverage), so the description is the sole source of parameter meaning. It explains host/site formats, that policy is the full configuration, and exactly how to obtain policy_id from list_firewall_policies. It also details the nested trafficFilter structure, type-by-type with field mappings, fully compensating for the schema's silence.
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 opens with 'Full-replace a firewall policy by ID', which clearly identifies the verb, resource, and scope. It explicitly contrasts with patch-style updates by emphasizing 'full-replace', making it distinguishable from the sibling patch_firewall_policy. The key parameters are also named, so an agent immediately knows what the tool does.
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 phrase 'Full-replace' provides implicit guidance that this tool is for complete replacement, implying that a partial update would use patch_firewall_policy. It also gives practical instructions for obtaining policy_id. However, it does not explicitly name alternative tools or state precise conditions for when to choose this over create or patch, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_firewall_zone_proxyA
Update a firewall zone by ID via connector proxy.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
zone: full firewall zone configuration to replace with.
zone_id: REQUIRED. Obtain it from list_firewall_zones_proxy (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| zone | Yes | ||
| zone_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explicitly says 'full firewall zone configuration to replace with,' revealing that the operation is a full replacement (PUT-like) rather than a merge. It also discloses the composite ID format for host and the required zone_id source. It does not discuss side effects or permissions, but the key replacement semantics are clear.
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 compact and front-loaded, stating the core operation first, followed by a terse but useful parameter legend. There is no fluff or repetition; each sentence 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?
The description covers purpose, parameter semantics, and a critical prerequisite (obtaining zone_id). It does not specify the internal structure of the 'zone' object, but the phrase 'full firewall zone configuration' directs the agent to use an existing config object. Since an output schema exists, return-value details are unnecessary. Overall, it is sufficient for correct invocation in most cases.
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 0%, so the description must compensate fully. It does: host explains accepted formats (console name, ID, or MAC:numericId), site is name or ID, zone is a full replacement configuration, and zone_id is marked REQUIRED with a retrieval source. This adds substantial meaning beyond the bare string/object type declarations.
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 states a specific action ('Update a firewall zone by ID') and names the resource, while 'via connector proxy' differentiates it from any non-proxy variant. It clearly distinguishes this from sibling firewall zone tools (list/create/get/delete).
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 clear context: this tool updates an existing firewall zone, and it tells the agent exactly how to obtain the required zone_id (from list_firewall_zones_proxy). It does not explicitly list alternatives or exclusion criteria, but the context is strong enough to guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_fobA
Update fob settings (PATCH /v1/fobs/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
fob_id: REQUIRED. Obtain it from list_fobs (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| fob_id | Yes | ||
| settings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses non-obvious behaviors: read-before/no-op/read-after semantics, the no-write-on-match condition, and the UNIFI_PROTECT_MUTATIONS_ENABLED gate. Since no annotations are present, the description carries the full burden, and it does so well, though it could mention return values or permission requirements.
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 compact and front-loads the core purpose and endpoint before breaking down parameters. Every sentence adds value, with no fluff or repetition.
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 mutation tool with three parameters and nested objects, the description covers all needed context: parameter formats, where to get required IDs, behavioral quirks, and a safety gate. An output schema exists to cover return values, so nothing essential is missing.
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 has 0% description coverage, but the description fully compensates by explaining each parameter: host formats (name, ID, or composite MAC:numericId), fob_id source, and settings behavior. This adds significant meaning beyond the bare schema types.
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?
States the specific verb 'Update' and resource 'fob settings', and even includes the REST endpoint (PATCH /v1/fobs/{id}). This clearly distinguishes the tool from siblings like list_fobs and get_fob, which are read operations.
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 concrete usage context: how to obtain fob_id (from list_fobs), the meaning of settings, and the no-op condition ('No write when all match'). It also mentions the environment variable governing mutations. It lacks explicit exclusions or alternative tool comparisons, so it misses a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_hotspot_operatorA
Update a hotspot operator by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. operator_id: hotspot operator ID. fields: fields to update (name, x_password, note, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| fields | Yes | ||
| operator_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It identifies host and site identifier formats, but does not mention whether the update is partial or full, what permissions are needed, what side effects occur, or how invalid field values are handled. For a mutation tool, this is a significant transparency gap.
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 compact and front-loaded with the core action. The parameter explanations are direct and contain useful format details without extraneous content.
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 description provides enough to attempt a call: target host, site, operator_id, and fields are explained. But because fields is an arbitrary object with only partial examples, and there is no guidance on update semantics, validation, or mutation consequences, the definition is not fully complete for an agent to use confidently.
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 0%, so the description must compensate. It does add useful meaning: host can be a console name, ID, or composite MAC:numericId; site can be a name or ID; operator_id is the operator identifier; fields is an object containing updatable fields like name, x_password, and note. However, the 'etc.' leaves the full set of accepted fields unspecified.
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 operation: 'Update a hotspot operator by ID.' This distinguishes it from sibling tools like create_hotspot_operator, delete_hotspot_operator, and list_hotspot_operators, and the resource and method are both explicit.
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 this tool is for modifying an existing hotspot operator, especially by referencing operator_id and updateable fields. However, it does not explicitly state when to choose this over create_hotspot_operator or delete_hotspot_operator, nor does it mention any prerequisites or preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_lightA
Update settings for a Protect light (brightness, sensitivity, etc.).
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of light settings to update.
light_id: REQUIRED. Obtain it from list_lights (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| light_id | Yes | ||
| settings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral disclosure burden. It only says 'Update settings' and describes settings as key-value pairs, but does not disclose whether the update is partial or full replacement, what side effects occur, whether permissions are required, or what the response contains.
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 compact and well-organized: a one-sentence purpose followed by three concise parameter bullets. Every sentence earns its place, and no redundant information is present.
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 description covers all required parameters and their sources, and an output schema exists so return values need not be described. However, because the tool performs a mutation and there are no annotations, some behavioral context—such as whether settings are merged or replaced—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?
With 0% schema description coverage, the description fully compensates by detailing each parameter: host formats (name, ID, or MAC:numericId composite), settings as key-value pairs, and the provenance of light_id from list_lights. This adds significant meaning beyond the bare schema types.
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's function: 'Update settings for a Protect light' with concrete examples like brightness and sensitivity. This distinguishes it from sibling update_* tools targeting other resources (e.g., update_camera, update_chime) by naming the specific device type.
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 clear context on how to invoke the tool, including that light_id is REQUIRED and should be obtained from list_lights. It does not explicitly mention alternatives or exclusions, but the resource-specific purpose and prerequisite guidance make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_link_stationA
Update link-station settings (PATCH /v1/link-stations/{id}) with read/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
link_station_id: REQUIRED. Obtain it from list_link_stations (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| link_station_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It adds meaningful behavior: 'read/no-op/read-after' signals a check-before-write flow, 'No write when all match' discloses idempotent behavior, and 'Governed by UNIFI_PROTECT_MUTATIONS_ENABLED' hints at environment-controlled mutation capability. It does not detail error cases or permission requirements, but it goes well beyond a bare 'update' statement.
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 terse and front-loads the core action, followed by parameter notes and behavioral caveats. Every line earns its place, with no filler. The phrase 'read/no-op/read-after' is slightly cryptic but compact, and the line-break structure aids scanning.
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 PATCH tool with an output schema, the description covers the required parameters, the mutation gate flag, and the no-op behavior. It does not explain the output structure, but that is less critical because an output schema exists. The main missing piece is clearer guidance on what happens when UNIFI_PROTECT_MUTATIONS_ENABLED is not set, but overall it is sufficiently complete for an agent to call it 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 description coverage is 0%, so the description must compensate. It explains host formats ('console name, ID, or composite ID (MAC:numericId format)'), tells the agent where to get link_station_id ('from list_link_stations'), and clarifies settings as 'fields to change'. This adds meaningful meaning beyond the raw schema, though actual field examples for settings would make it even stronger.
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 states a specific action and resource: 'Update link-station settings (PATCH /v1/link-stations/{id})'. This clearly identifies the tool's purpose and distinguishes it from the read-only siblings list_link_stations and get_link_station. It could be slightly stronger by explicitly contrasting with the sibling read tools, but the verb and endpoint make the purpose unambiguous.
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 useful invocation guidance: where to obtain link_station_id, what settings means, and the no-op condition. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusion conditions such as 'do not use when mutations are disabled'. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_liveviewB
Update a liveview on a Protect console.
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of liveview settings to update.
liveview_id: REQUIRED. Obtain it from list_liveviews (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| liveview_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'update' and describes parameters; it does not state whether the update is partial or full, whether it is reversible, what permissions are needed, or what side effects may occur. This is a significant gap for a mutation tool.
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 compact and front-loaded, with the purpose stated first followed by concise parameter clarifications. Every sentence earns its place; there is no filler or repetition of schema content.
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 description covers the basics and provides an output schema, but it lacks adequate guidance on valid settings keys, update semantics, and behavioral expectations. For a tool accepting an arbitrary nested settings object, the documentation is functional but not fully 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?
Schema description coverage is 0%, so the description must compensate. It adds useful meaning for host (console name, ID, or MAC:numericId composite), marks liveview_id as REQUIRED and tells the agent where to obtain it, and describes settings as key-value pairs. However, the allowed keys and value shapes for settings remain underspecified.
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 'Update a liveview on a Protect console', identifying the specific verb and resource. It is distinguishable from sibling tools like create_liveview, get_liveview, and list_liveviews, though it does not explicitly differentiate itself with a comparison statement.
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 workflow context by instructing that liveview_id must be obtained from list_liveviews, and it clarifies accepted host formats. However, it does not explicitly state when to use this tool over alternatives or provide exclusions, leaving usage largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mobility_device_nameA
Rename a UMR device (guarded write). WARNING: mutates live device config.
Sends the full documented body {"name": name} (1-32 chars). Read-before, no-op detection (returns status="no_op" when already named this), confirm=true guard (returns a current-vs-proposed preview otherwise), an environment kill-switch (UNIFI_ENABLE_MOBILITY_WRITE, gated OFF by default pending issue #186 semantics verification), and a read-after verification.
workspace_id: the workspace UUID from list_mobility_workspaces. device_id: the device UUID from list_mobility_devices. name: the new device name (1-32 characters). confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| confirm | No | ||
| device_id | Yes | ||
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility for behavioral disclosure. It excels by explaining the guarded write nature, the WARNING about mutating live config, no-op detection (status='no_op'), the confirm guard that returns a current-vs-proposed preview, the environment kill-switch (UNIFI_ENABLE_MOBILITY_WRITE, off by default), and read-after verification. These details go far beyond a typical 'update' description and directly inform the caller about safety and conditional behavior.
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 information-dense and every sentence adds value, from the purpose to the safety mechanics to the parameter origins. It is somewhat long, but each clause earns its place given the guarded-write complexity. The structure could be slightly improved by separating the parameter explanations into a more formal list, but it is already well-organized and front-loaded with the most critical warning.
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 5 parameters, no annotations, and an output schema present, the description covers all necessary ground: it explains the source of IDs, the required confirmation flag, optional routing, the guarded-write behavior including the kill-switch, and the no-op/preview outcomes. Since an output schema exists, not detailing the full response structure is acceptable. The description is fully adequate for an agent to correctly invoke and interpret this tool.
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 0%, so the description must compensate for the schema's lack of parameter explanations. It does so comprehensively: workspace_id is tied to list_mobility_workspaces, device_id to list_mobility_devices, name is specified as 1-32 characters, confirm is explained as mandatory for applying, and key_label is described as an optional API-key routing label. Every parameter is given meaningful context beyond its type and default.
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 opens with a specific verb and resource: 'Rename a UMR device (guarded write)'. This clearly distinguishes it from sibling tools like update_mobility_device_network and update_mobility_device_wireless, which target other aspects of a mobility device. The warning 'mutates live device config' further clarifies the operation's intent.
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 clear prerequisites by specifying that workspace_id comes from list_mobility_workspaces and device_id from list_mobility_devices. It also explains that confirm must be true to apply the change, and mentions an optional key_label for routing. However, it does not explicitly state when to prefer this tool over alternatives like update_mobility_device_network or update_mobility_device_wireless, leaving that to inference from the tool name and stated purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mobility_device_networkA
Update a UMR device's LAN / DHCP settings (guarded write). Mutates live config.
DOCUMENTED partial update: only provided fields are applied (WAN/IPv6/ InternetSource are not configurable here). At least one field is required. WARNING: docs conflict on full-replacement vs partial-merge PUT semantics, so writes are gated OFF by default pending live verification (issue #186). dhcp_mode is 'dhcp' (enabled) or 'none' (disabled); IPs must be IPv4; dhcp_lease_time is seconds (0 = infinite). Read-before, no-op detection on the observable host_address, confirm=true guard, kill-switch, read-after.
workspace_id: the workspace UUID from list_mobility_workspaces. device_id: the device UUID from list_mobility_devices. host_address: optional new LAN gateway IPv4. dhcp_mode: optional 'dhcp' or 'none'. dhcp_range_start: optional DHCP pool start IPv4. dhcp_range_stop: optional DHCP pool end IPv4. dhcp_lease_time: optional DHCP lease seconds (>=0; 0 = infinite). confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| device_id | Yes | ||
| dhcp_mode | No | ||
| key_label | No | ||
| host_address | No | ||
| workspace_id | Yes | ||
| dhcp_lease_time | No | ||
| dhcp_range_stop | No | ||
| dhcp_range_start | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations provided, the description carries the full disclosure burden and exceeds it. It warns that writes are gated OFF by default pending live verification (issue #186), discloses the conflicting PUT semantics docs, and details the confirm=true guard, read-before/no-op detection, kill-switch, and read-after behaviors. This is exemplary for a dangerous mutation tool.
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 long but every sentence earns its place given the tool's danger profile. It is front-loaded with the core action, followed by critical safety warnings, then per-parameter details. Minor redundancy exists (confirm guard appears twice), but the structured line breaks keep it scannable.
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 9-parameter guarded mutation with known documentation conflicts and zero annotations, this description is remarkably complete. It covers purpose, scope exclusions, parameter semantics, safety gating, and required guards. An output schema exists so return-value details are covered by structured data, not the description.
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 0%, so the description fully compensates by documenting all 9 parameters: value constraints (dhcp_mode 'dhcp'/'none', IPv4 format, dhcp_lease_time >=0 with 0=infinite), provenance (workspace UUID from list_mobility_workspaces, device UUID from list_mobility_devices), and the confirm=true requirement. No parameter is left undocumented.
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 opens with a specific verb+resource+scope pair: 'Update a UMR device's LAN / DHCP settings' and immediately flags it as a 'guarded write'. This cleanly distinguishes it from the sibling tools update_mobility_device_name and update_mobility_device_wireless, and the explicit exclusion of WAN/IPv6/InternetSource narrows the boundary further.
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 clear usage context: it documents partial-update behavior, states that at least one field is required, and names the source tools for the required identifiers (list_mobility_workspaces and list_mobility_devices). It explicitly lists what is not configurable here (WAN/IPv6/InternetSource), though it stops short of naming which sibling tool would handle those cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mobility_device_wirelessA
Update a UMR device's WiFi SSID + password (guarded write). Mutates live config.
Both fields are required by the API (channel/TX power/security protocol are not configurable here). ssid is 1-32 chars; password is a WPA2-PSK secret of 8-63 chars. Read-before, confirm=true guard, kill-switch, read-after. There is no no-op short-circuit (the password is not observable, so an unchanged config cannot be proven). The supplied password is not echoed back in the result.
workspace_id: the workspace UUID from list_mobility_workspaces. device_id: the device UUID from list_mobility_devices. ssid: the new WiFi SSID (1-32 characters). password: the new WPA2-PSK password (8-63 characters). confirm: must be true to apply the change. key_label: optional configured API-key label to route on a specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| ssid | Yes | ||
| confirm | No | ||
| password | Yes | ||
| device_id | Yes | ||
| key_label | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly covers the guarded write nature, live config mutation, read-before/read-after behavior, confirm guard, kill-switch, the lack of a no-op short-circuit, and the fact that the password is not echoed back. This is exemplary 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 front-loaded with the core purpose, followed by scope constraints and detailed parameter semantics. Every sentence contributes operational information, and there is no filler or redundancy. The structure makes it easy to parse quickly.
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 description is operationally complete: it explains what is mutated, what is and is not configurable, parameter sources and formats, the confirm guard, and important response behavior. Since an output schema exists, there is no need to spell out return values. This is enough for an agent to call the tool 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?
The schema has 0% description coverage, but the description fully compensates. It documents every parameter, including where workspace_id and device_id come from, length constraints for ssid and password, the confirm requirement, and the optional key_label behavior. No parameter is left unexplained.
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 and resource: 'Update a UMR device's WiFi SSID + password (guarded write).' It also says 'Mutates live config,' which sets expectations. The focus on wireless credentials distinguishes it from siblings like update_mobility_device_name and update_mobility_device_network.
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 clearly indicates this tool is for updating WiFi SSID and password, and explicitly states that channel/TX power/security protocol are not configurable here. It does not explicitly name sibling alternatives like update_mobility_device_network, so some routing still depends on tool naming conventions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_networkA
Update an existing network/VLAN.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
network_config: full network configuration to replace with.
network_id: REQUIRED. Obtain it from list_networks (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| network_id | Yes | ||
| network_config | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose a key trait: network_config replaces the entire network configuration rather than patching it. However, it lacks details on permissions, reversibility, or side effects on connected devices, leaving notable gaps for a mutating tool.
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 compact and front-loaded with the primary purpose, followed by concise parameter guidance. Every line earns its place, and there is no filler or repetition of schema data.
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 four-parameter mutating tool with an output schema and a nested object, the description covers requiredness, identifier sources, and full-replacement semantics. It could still guide the agent on constructing or fetching the full network_config, but the essentials for calling the tool correctly are present.
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 0%, but the description compensates by explaining the allowed identifier formats for host, site, and the provenance of network_id. network_config is only described as 'full network configuration to replace with,' so the internal structure of that object remains underspecified.
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 opens with 'Update an existing network/VLAN,' which states a specific verb and resource and clearly distinguishes the tool from list_networks, get_network, create_network, and delete_network. It reinforces the update semantics by requiring network_id to reference an existing network obtained via list_networks.
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?
It explicitly marks network_id as REQUIRED and tells the agent to obtain it from list_networks's id field. It also clarifies that network_config is a full replacement, implying the agent should fetch the current configuration first if any modification is intended. It does not explicitly rule out create/delete alternatives, but the update-focused context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_port_forwardA
Update a port forwarding rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. forward_id: port forward rule ID. payload: fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| forward_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It does not disclose whether the update is a merge or a full replacement, whether it disrupts traffic, what permissions are required, or how errors are handled. The phrase 'fields to update' hints at partial update semantics, but it is not explicitly framed as a behavioral trait.
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 compact and front-loaded: a single purpose sentence followed by a concise parameter list. Every line adds necessary information, with no filler or redundancy. The structure makes it easy to scan.
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 an output schema present and four parameters all explained, the description covers most operational essentials. It does not explicitly state that the payload represents a partial update (PATCH-style) or whether host/site are required for scoping the rule globally, but these are inferable from the parameter names and sibling tools. Minor gaps prevent a perfect score.
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 0%, and the description fully compensates by explaining every parameter. Host is defined as 'console name, ID, or composite ID (MAC:numericId format),' site as 'site name or ID,' forward_id as the rule ID, and payload as 'fields to update.' This gives the agent concrete, actionable meaning beyond the bare schema types.
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 opens with 'Update a port forwarding rule by ID,' which clearly states the action (update), the resource (port forwarding rule), and the identifier method (by ID). This differentiates it from sibling tools like create_port_forward, delete_port_forward, and list_port_forwards, all of which are distinct operations.
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 through the word 'update' and the presence of a forward_id parameter, indicating that an existing rule is modified. However, there is no explicit guidance on when to use this tool versus creating or deleting a rule, nor any mention of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_port_profileA
Update a switch port profile by ID.
WARNING -- SHARED PROFILE, WIDE BLAST RADIUS: this edits a shared Ethernet Port Profile (Classic REST /rest/portconf), NOT one switch or one port. A single write changes STP/PoE/storm-control/VLAN/etc. for EVERY port on EVERY switch that has this profile assigned. It is NOT a per-device or per-port writer and must never be presented or used as a per-port/per-device STP-priority or PoE-mode writer -- for that, no confirmed per-port config route exists via this API. Read the profile's assignments and confirm the intended blast radius before writing.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. profile_id: port profile ID. payload: fields to update (e.g. speed, native_networkconf_id, op_mode, poe_mode). Applies to every port using this profile, not a single port.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| profile_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden, and it does so excellently. It discloses the shared-profile blast radius, states that one write affects every port on every switch using the profile, names the underlying API endpoint, and warns about the destructive scope. This goes well beyond the tool name and schema.
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 longer than average, but the length is largely justified by the destructive potential of the operation. The safety warning is front-loaded, and parameter explanations are compact. There is minor redundancy in repeating that changes apply to every port using the profile, but it reinforces a critical constraint.
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 complex mutation tool with no annotations and no output schema, the description is remarkably complete. It covers the operation's true scope, the destructive consequences, required parameters, and safe invocation steps. The only minor omission is expected return behavior, but that is not necessary to prevent misuse or to call the tool 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 description coverage is 0%, so the description must explain the parameters itself. It does: host accepts a console name, ID, or composite MAC:numericId; site accepts a name or ID; profile_id is the port profile ID; payload is a freeform object with example fields like speed, native_networkconf_id, op_mode, and poe_mode. This is substantial added meaning beyond the raw schema types.
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 states the precise action ('update a switch port profile by ID') and immediately distinguishes it from a per-port or per-device writer by explaining it edits a shared Ethernet Port Profile. This makes its scope unambiguous and differentiates it from sibling read tools like get_port_profile and list_port_profiles.
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 explicit when-not-to-use guidance: it must never be used as a per-device/per-port STP-priority or PoE-mode writer, and it notes that no confirmed per-port config route exists via this API. It also instructs the agent to read profile assignments and confirm blast radius before writing. Naming the specific sibling read tool would have made it slightly stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_relayA
Update relay settings (PATCH /v1/relays/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
relay_id: REQUIRED. Obtain it from list_relays (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| relay_id | Yes | ||
| settings | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full disclosure burden. It reveals the PATCH method, the read-before/no-op/read-after behavior, the no-write-when-all-match rule, and the UNIFI_PROTECT_MUTATIONS_ENABLED guard. It stops short of describing failure behavior, but this is meaningful operational detail beyond the schema.
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 compact and well-structured: the operation and endpoint come first, followed by a concise parameter breakdown. Every sentence adds useful information with no repetition or filler.
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 mutation tool with no annotations and a minimal schema, the description provides endpoint, parameter semantics, no-op behavior, and the mutation-enabled guard. It does not enumerate valid settings fields or explain the exact error behavior when mutations are disabled, but the output schema exists and the guidance is sufficient for correct invocation.
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?
With 0% schema description coverage, the description is the sole source of parameter meaning and compensates fully. It documents host formats including composite MAC:numericId, explains that relay_id must come from list_relays, and clarifies that settings are the fields to change with a no-write condition when all values already match.
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 opens with a specific verb and resource—'Update relay settings'—and includes the exact endpoint (PATCH /v1/relays/{id}), which clearly separates it from sibling tools such as list_relays, get_relay, and relay_activate_output without needing schema inspection.
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?
It clearly establishes the tool's purpose for changing relay settings and gives practical guidance, such as obtaining relay_id from list_relays and using the correct host format. It does not explicitly name alternatives like relay_activate_output or state when not to use this tool, so it lacks exclusionary guidance but still provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sensorB
Update settings for a Protect sensor.
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of sensor settings to update.
sensor_id: REQUIRED. Obtain it from list_sensors (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| sensor_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavioral traits. It only says 'update settings,' which implies a mutation but does not explain side effects, partial update behavior, validation requirements, permission needs, or what happens on failure. It also does not clarify whether missing settings fields are left unchanged or reset. This is a significant gap for a mutating tool.
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 compact and structured as a short lead sentence followed by parameter bullets. Every line adds useful information. The only minor issue is that the second bullet could be more specific about settings structure, but overall it is well organized 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?
Despite having an output schema, the tool is a mutation with no annotations and no behavioral details. The description lacks critical context: which settings can be updated, whether the update is partial or full, whether there are prerequisites, and what the response indicates. An agent cannot confidently invoke this tool without seeking additional information.
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 has 0% description coverage, so the description compensates well. It explains host formats ('console name, ID, or composite ID (MAC:numericId format)'), describes settings as 'key-value pairs,' and specifies that sensor_id is required and how to obtain it. However, it does not enumerate valid setting keys or expected value types, leaving some ambiguity for the settings object.
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 states a specific verb and resource: 'Update settings for a Protect sensor.' It clearly identifies the object being modified (a Protect sensor) and the operation (update settings). While it doesn't explicitly contrast with sibling update tools (e.g., update_camera, update_light), the resource name is enough to distinguish it from most siblings.
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 implicit guidance by explaining required parameters and telling the user to obtain sensor_id from list_sensors, but it does not state when to use this tool versus alternatives like get_sensor or other update_* tools. There is no mention of prerequisites, when updates are appropriate, or exclusions. This leaves the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_settingA
Update a controller setting group by key.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. setting_key: setting group identifier (e.g. 'mgmt', 'super_smtp', 'guest_access'). payload: setting fields to update.
Discover the schema first by calling get_setting(setting_key): it returns every settable field and its current (valid) value. The controller silently drops any unrecognised field or enum value (HTTP 200, value unchanged), so a guessed value fails invisibly; this tool detects that no-op and raises an error naming the rejected field and pointing you back at get_setting.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| setting_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently. It discloses the silent-drop behavior (HTTP 200, value unchanged), explains that the tool detects the resulting no-op, and describes the error behavior that names the rejected field and points back to get_setting.
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 dense but well structured: purpose first, then parameter semantics, then the required discovery step, then the failure mode. Every sentence earns its place and there is no fluff or duplication of the schema.
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 an update tool with no annotations, no output schema, a nested payload, and fully required parameters, this description covers the critical operational details: how to format identifiers, how to discover valid payload fields, and what happens when invalid values are submitted. Nothing needed to call it correctly is missing.
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 has no property descriptions, so this description fully compensates. It explains host formats including the composite MAC:numericId form, site as name or ID, setting_key with example identifiers, and payload as the setting fields to update with a clear path to get valid values via get_setting.
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?
States a specific verb and resource: 'Update a controller setting group by key.' It also clarifies what setting_key identifies with concrete examples and distinguishes this from read-only siblings like get_setting and list_settings.
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?
Gives explicit workflow guidance: discover the schema first by calling get_setting(setting_key), and warns against guessing values because they fail invisibly. It does not explicitly state when not to use this tool, such as 'use get_setting for read-only lookups', so the when-not side is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sirenA
Update siren settings (PATCH /v1/sirens/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
siren_id: REQUIRED. Obtain it from list_sirens (its id field).
settings: fields to change (name, volume 1-100, ledSettings). No write when all match.
Governed by UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| siren_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well by disclosing the read-before/no-op/read-after pattern, the no-op on matching settings, and the UNIFI_PROTECT_MUTATIONS_ENABLED gate. It does not detail permissions or error behavior, but the core mutation behavior is transparent.
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?
Compact and front-loaded: the first sentence states the operation and endpoint, and the parameter notes are dense but each earns its place. No redundant filler or repetition of schema fields.
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 all three required parameters with sourcing and format details, plus key behavioral context and mutation gating. It does not explicitly state that settings should be non-empty or describe behavior when UNIFI_PROTECT_MUTATIONS_ENABLED is false, leaving minor gaps for a mutating tool with no annotations.
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 0%, so the description fully compensates: it defines host as console name, ID, or composite MAC:numericId format; marks siren_id as required and tells the agent where to obtain it; and narrows settings to name, volume 1-100, and ledSettings. This is far more useful than the bare string schemas.
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?
States a specific action ('Update siren settings') with the exact HTTP method and path (PATCH /v1/sirens/{id}), making the resource and operation unambiguous. It also distinguishes this configuration tool from siren control siblings like siren_play, siren_stop, and siren_test_sound.
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 useful context such as obtaining siren_id from list_sirens and the no-write-when-all-match optimization, but does not explicitly state when to prefer this tool over alternatives or when not to use it. The usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_site_to_site_tunnelB
Update a site-to-site VPN tunnel by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. tunnel_id: tunnel ID to update. tunnel: fields to update (remoteIp, psk, networks, enabled, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| tunnel | Yes | ||
| tunnel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It usefully indicates that 'tunnel' contains fields to update and lists examples like remoteIp, psk, networks, and enabled, suggesting partial-update semantics. However, it does not explicitly state whether the update is partial or full replacement, nor does it mention permissions, side effects, or failure behavior.
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 compact and well-structured: a clear one-sentence purpose followed by per-parameter notes. There is no filler or redundant information, and the most important scoping details are front-loaded.
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 output schema covers return-value expectations, and the description gives useful identifier formats and editable fields. However, with no annotations and no explicit update semantics, prerequisites, or guidance on discovering tunnel IDs, the operational context is only partially complete for an update tool.
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 0%, so the description must compensate. It explains all four parameters, with particularly useful detail for host ('console name, ID, or composite ID (MAC:numericId format)'), site ('site name or ID'), and tunnel ('fields to update...'). It falls slightly short of a 5 because the full structure of the tunnel object is not specified beyond a few examples.
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 opens with a clear verb and resource: 'Update a site-to-site VPN tunnel by ID.' This precisely identifies the operation and target, distinguishing it from sibling tools like create_site_to_site_tunnel, delete_site_to_site_tunnel, and list_site_to_site_tunnels, though it does not explicitly contrast itself with 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?
The description provides no explicit when-to-use guidance, prerequisites, or exclusions. It does not mention that list_site_to_site_tunnels should be used to find a tunnel_id, or that create_site_to_site_tunnel is for new tunnels. The intended usage is only implied by the verb 'Update.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_speakerA
Update speaker settings (PATCH /v1/speakers/{id}) with read-before/no-op/read-after.
host: console name, ID, or composite ID (MAC:numericId format).
speaker_id: REQUIRED. Obtain it from list_speakers (its id field).
settings: fields to change. No write when all match. Governed by
UNIFI_PROTECT_MUTATIONS_ENABLED.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| speaker_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It mentions read-before/no-op/read-after behavior and the UNIFI_PROTECT_MUTATIONS_ENABLED gate, which are useful. It does not disclose permission requirements, side effects, or error behavior, so it is only partially transparent.
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 compact and information-dense. The initial summary line is followed by a clear parameter breakdown. No redundant sentences, though the 'read-before/no-op/read-after' phrase is terse and might be clearer.
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?
An output schema exists, so return values need not be explained. However, as an update operation with no annotations, the description omits authentication requirements, failure modes, and the exact shape of 'settings', leaving some gaps for correct invocation.
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?
Despite 0% schema description coverage, the description adds meaning for all three parameters: host formats, speaker_id source/requirement, and settings semantics including idempotent behavior. This compensates well for the empty schema descriptions.
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 'Update speaker settings' with an explicit PATCH endpoint, identifying the resource and action. It differentiates from siblings like get_speaker and list_speakers by the verb 'update', though it does not explicitly name an alternative.
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?
It explains how to obtain required parameters (speaker_id from list_speakers) and notes that no write occurs when settings already match, which implies a conditional use. However, it does not explicitly state when to prefer this tool over alternatives or list exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_traffic_matching_listA
Update a traffic matching list by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
traffic_list: full traffic matching list configuration to replace with.
list_id: REQUIRED. Obtain it from list_traffic_matching_lists (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| list_id | Yes | ||
| traffic_list | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explicitly states that traffic_list is the full configuration to replace with, revealing an overwrite-not-patch behavior that is not visible in the schema. It does not discuss permissions or failure modes, but the core mutation semantics are clearly disclosed.
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 compact and front-loaded: the main action appears first, followed by concise parameter explanations. There is no filler or redundancy, and every sentence contributes needed 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?
The definition covers all required parameters, explains the full-replacement behavior, and points to the list endpoint for obtaining list_id. Since an output schema exists, return-value details are not necessary. The main gap is the undocumented internal structure of traffic_list, but the phrase 'full traffic matching list configuration' is a reasonable pointer for this replace-style operation.
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 0%, so the description must compensate. It defines host formats including composite ID, site as name or ID, list_id as required with provenance, and traffic_list as the full replacement configuration. It stops short of describing traffic_list's internal object shape, so it is not a perfect 5.
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 opens with 'Update a traffic matching list by ID', which names a specific verb, resource, and identity qualifier. It also clarifies the replacement semantics, distinguishing it clearly from sibling create/get/delete/list 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?
It gives clear context by stating list_id is REQUIRED and telling the agent to obtain it from list_traffic_matching_lists. It does not explicitly name alternative tools or when-not conditions, but the update-by-ID and replace semantics make the intended use apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_traffic_routeA
Update a traffic route by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
payload: full traffic route configuration to replace with.
route_id: REQUIRED. Obtain it from list_traffic_routes (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| route_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose the key behavioral trait that the payload is a full replacement configuration, implying overwrite semantics. However, it does not mention permissions, side effects, reversibility, or what happens to unspecified fields, which are relevant for a mutation tool.
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 compact and well-structured: a one-sentence purpose followed by concise parameter clarifications. Every line adds value, and the most critical operational detail (how to get route_id) is explicitly included.
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 description covers the key invocation details for all four parameters and identifies where to obtain route_id. Still, because there is no output schema, no annotations, and 0% schema description coverage, the lack of payload structure or any indication of return behavior leaves meaningful gaps for an agent attempting a full replacement update.
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 0%, and the description compensates well by explaining host formats (console name, ID, composite ID), site as name or ID, payload as full replacement configuration, and how to obtain route_id. However, it does not detail the structure of the payload object, which is a notable limitation given the nested object.
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 ('Update a traffic route by ID') with a specific verb and resource. It is unambiguous, but it does not explicitly distinguish itself from sibling tools like create_traffic_route or update_traffic_rule, so it falls short of full sibling differentiation.
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 helpful usage context by specifying that route_id should be obtained from list_traffic_routes, and clarifies that payload is the full replacement configuration. However, it does not state when to use this tool instead of alternatives like create_traffic_route or delete_traffic_route, leaving the choice mostly implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_traffic_ruleA
Update a traffic rule by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. rule_id: traffic rule ID. payload: fields to update.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| rule_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Update', implying mutation, but does not state whether permissions are required, whether updates are partial or full replacement, what happens on invalid rule_id, or what the response contains. The behavior is largely opaque beyond the fact that an update occurs.
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 compact and well-structured: a one-sentence operation summary followed by a bullet-like parameter list. Every sentence contributes information, and the parameter details are presented in a scannable format. There is no redundant filler.
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 description adequately covers parameter semantics but lacks guidance on usage context, behavior, and acceptable payload fields. Since payload is an open object (additionalProperties: true), the agent has no idea which fields are updatable. An output schema exists but its contents are not shown, so return value expectations are unclear. For a mutation tool with no annotations, more behavioral and usage context would be needed 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 description coverage is 0%, yet the description explicitly explains all four parameters: host (with format variants), site, rule_id, and payload (fields to update). This goes well beyond the input schema, which only lists names and types. The composite ID format for host is especially valuable and fully compensates for the empty schema descriptions.
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 states a specific action ('Update a traffic rule by ID') with a clear resource and identifier. It distinguishes itself from sibling tools like list_traffic_rules, create_traffic_rule, and delete_traffic_rule by the verb 'update' and the 'by ID' scope. There is no ambiguity about what this tool does.
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 parameter format details but gives no guidance on when to use this tool versus alternatives. It does not mention that an existing rule is required, nor does it differentiate from create_traffic_rule or list_traffic_rules. There is no explicit condition for selecting this tool, leaving the agent to infer usage from the name and basic action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_userA
Update a DHCP/client-alias entry by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
payload: fields to update (name, note, fixed_ip, use_fixedip, network_id).
user_id: REQUIRED. Obtain it from list_users (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It lists updatable fields but does not mention permissions, partial vs. full replacement semantics, side effects on existing settings, or failure modes. For a mutation tool, this is a significant transparency gap.
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 compact and efficient: one sentence states the operation, followed by concise parameter definitions. Every sentence adds distinct value with no redundancy or filler. The structure is easy to scan and understand.
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 sparse input schema, the description provides the essential context needed to call the tool: how to locate the target (host, site) and what payload fields are relevant. However, it lacks information about update behavior (partial vs. whole replacement), required permissions, and potential side effects, which are important contextual aspects for a mutation tool. It is usable but not fully 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 input schema provides only bare type information (e.g., 'string') with zero description coverage. The description compensates fully by defining each parameter: host accepts console name, ID, or composite MAC:numericId; site accepts name or ID; payload enumerates updatable fields; user_id is marked REQUIRED with a source. This makes parameter usage clear and actionable.
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 ('Update') and the specific resource ('DHCP/client-alias entry'), and emphasizes identification by ID. This distinguishes it from list/get/delete operations, though it doesn't explicitly differentiate from other update tools. The verb+resource+scope is specific and unambiguous.
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 a critical usage instruction: obtain user_id from `list_users`. It implies when to use the tool (when you need to update a DHCP/client-alias entry) but does not state any exclusions or alternative tools. The guidance is present but only implicit regarding context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_viewerB
Update settings for a Protect viewer (liveview assignment, etc.).
host: console name, ID, or composite ID (MAC:numericId format).
settings: key-value pairs of viewer settings to update.
viewer_id: REQUIRED. Obtain it from list_viewers (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| settings | Yes | ||
| viewer_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It conveys mutation via 'Update' and lists a sample setting, but it doesn't disclose whether settings are merged or replaced, what permissions are required, or what downstream effects may occur on the viewer or liveview assignment.
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 compact and well-structured: purpose first, then one clear line per parameter. Every line adds information and there is no filler or repetition.
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 three-parameter mutation tool with an output schema, the description covers all required parameters and explains how to source viewer_id. It is slightly incomplete because valid setting keys and merge-vs-replace semantics are not addressed, but it gives enough to invoke the tool correctly in most cases.
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 0%, so the description compensates meaningfully: it explains host's three accepted forms, settings as key-value pairs, and viewer_id as a required value sourced from list_viewers. It doesn't enumerate valid setting keys, but the schema's additionalProperties:true leaves that open.
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 and resource: 'Update settings for a Protect viewer', with a concrete example ('liveview assignment'). It clearly separates this from read-only viewer tools like list_viewers/get_viewer, though it doesn't explicitly differentiate it from update_liveview.
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?
There is no guidance on when to use this tool versus alternatives such as update_liveview or get_viewer. The only usage hint is that viewer_id should be obtained from list_viewers, which is a workflow prerequisite rather than a selection rule. No exclusions or alternative conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vpn_serverB
Update a VPN server configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. server_id: VPN server ID. fields: fields to update (name, type, subnet, enabled, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| fields | Yes | ||
| server_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It does not state whether the update is partial or full replacement, whether unspecified fields are preserved, what permissions are required, or whether active VPN sessions/tunnels are affected. The phrase 'fields to update' hints at partial updates but is not explicit.
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 compact and front-loaded with the primary purpose. Each parameter is given its own concise line, and there is no redundant or filler content.
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?
An update operation with a free-form nested fields object and no annotations needs more detail to be called correctly. The description lacks information about valid field names, whether the update is partial or full, how to obtain the server_id, and what side effects may occur. The presence of an output schema reduces but does not eliminate this gap.
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?
With 0% schema description coverage, the description compensates by explaining each parameter: host can be a console name, ID, or composite ID; site can be a name or ID; server_id is the VPN server ID; and fields examples are provided. However, the exact accepted field names and value constraints for the fields object remain vague and under-specified.
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 opens with a specific verb and resource: 'Update a VPN server configuration by ID.' This clearly distinguishes it from sibling tools like create_vpn_server, get_vpn_server, delete_vpn_server, and list_vpn_servers.
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 no explicit guidance on when to use this tool versus alternatives such as create_vpn_server or get_vpn_server. The update verb implies modification of an existing server, but no prerequisites, exclusions, or alternative selection criteria are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wan_interfaceC
Update a WAN interface configuration.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. wan_id: WAN interface ID to update. wan: fields to update (name, ip, gateway, dns, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| wan | Yes | ||
| host | Yes | ||
| site | Yes | ||
| wan_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only says 'Update' and lists updatable fields, without mentioning permissions, impact on connectivity, reversibility, or any side effects. This is insufficient for a mutating operation.
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 compact, using a concise sentence followed by a bullet-like list of parameters. Every sentence earns its place, with no redundant text. It is front-loaded with the core action.
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 description is sparse for a mutating tool with 4 required parameters and no annotations. It lacks information about when to use this tool, potential prerequisites (e.g., must the WAN interface exist?), impact on network connectivity, and error behavior. Although an output schema exists, it is not described here, so the agent has incomplete context for a successful invocation.
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 has 0% description coverage, so the description must compensate. It provides a brief explanation for each parameter: host, site, wan_id, and wan (fields to update). However, the 'wan' object's possible keys are only exemplified with 'etc.', leaving its true structure partially undefined. This adds value but does not fully clarify the parameter's full shape.
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 states a clear verb and resource: 'Update a WAN interface configuration.' It is specific to WAN interfaces, distinguishing it from more general update tools like update_network. However, it does not explicitly contrast itself with sibling tools, so it lacks explicit differentiation.
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 no guidance on when to use this tool versus alternatives. It does not mention prerequisites, typical scenarios, or exclusions. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wifi_broadcastA
Update an existing WiFi broadcast SSID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
broadcast: full WiFi broadcast configuration to replace with.
broadcast_id: REQUIRED. Obtain it from list_wifi_broadcasts (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| broadcast | Yes | ||
| broadcast_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It states that broadcast is the 'full WiFi broadcast configuration to replace with', which hints at a destructive overwrite, but does not mention whether changes are reversible, require special permissions, or affect connected clients. Given it is a write operation with no annotation support, this is a significant gap.
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 compact and front-loaded: the main purpose appears in the first clause, followed by concise per-parameter notes. No filler or repeated schema information. Every sentence provides value.
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 an output schema present, return-value details are not needed. The parameter explanations are solid, but the missing usage guidance and security/reversibility notes leave the contextual picture incomplete for a mutation tool. It is adequate for basic invocation but lacks deeper context that an agent might need to avoid unintended side effects.
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 0%, so the description must compensate. It does so by explaining every parameter: host format (console name, ID, or composite ID), site name/ID, broadcast as full replacement config, and broadcast_id with a source reference to list_wifi_broadcasts. The only weakness is that the structure of broadcast object is not elaborated, but the description adds significant meaning beyond bare schema.
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 starts with 'Update an existing WiFi broadcast SSID' – a specific verb and resource. It clearly distinguishes this as a modification operation on an existing resource, contrasting with sibling create_wifi_broadcast and delete_wifi_broadcast. The scope is unambiguous.
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 phrase 'Update an existing' implies this tool is for modifying already-created broadcasts, but no explicit when-to-use or when-not-to-use guidance is given. It does not mention alternatives like create_wifi_broadcast or delete_wifi_broadcast or state conditions that would select one over the other. Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_wlan_configC
Update a WLAN (SSID) configuration by ID.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID. wlan_id: WLAN config ID. payload: fields to update (e.g. x_passphrase, security, band, enabled).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| payload | Yes | ||
| wlan_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states what the tool does but does not disclose behavior such as whether the payload is merged or replaces the entire config, whether unknown fields are rejected, whether it validates passphrase/security combinations, or what happens on partial failure. It is not misleading, but it leaves important behavioral context unstated.
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 reasonably compact, leading with the core action and then providing parameter clarifications. The parameter explanations are embedded in a paragraph rather than structured, but each sentence serves a purpose. The 'payload: fields to update' line with examples adds value without bloating the description.
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 4-parameter mutation tool with no annotations and no output schema, the description is incomplete. It does not explain what the response will be, how to construct the payload reliably, whether the operation is reversible, or what field constraints apply. An agent could issue a call but would be guessing on payload structure and return handling.
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 0%, so the description must compensate. It does add brief meaning for all four parameters (host as console name/ID/composite ID, site as name/ID, wlan_id as config ID, payload as fields to update with examples). However, the payload semantics are under-specified—no format, no allowed values, no required vs optional sub-fields—leaving the agent to guess at the structure.
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 states a specific verb ('Update') and resource ('WLAN (SSID) configuration by ID'), which clearly identifies the operation. The parameter list further clarifies what is being updated. However, it does not differentiate from siblings like get_wlan_config or update_wifi_broadcast, though the distinct resource and verb make the core purpose unambiguous.
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 lists parameters but provides no guidance on when to use this tool vs alternatives, no prerequisites, and no exclusions. It does not mention that get_wlan_config might be needed first to obtain the wlan_id, nor does it address partially-update vs full-replace semantics that would distinguish it from other update tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_deviceA
Trigger a firmware upgrade on an adopted device.
host: console name, ID, or composite ID (MAC:numericId format). site: site name or ID.
device_id: REQUIRED. Obtain it from list_devices (its id field).
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| site | Yes | ||
| device_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states that a firmware upgrade is triggered, but does not disclose possible side effects (e.g., device reboot, downtime), permission requirements, or result details. This is a significant gap for a mutating operation.
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 concise sentences: the first states the action, the second describes parameters. No wasted words, and the most important parameter (device_id) is highlighted as REQUIRED. Excellent density.
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 3-parameter tool with no annotations and an output schema that is not described, the description provides enough to invoke it correctly: action, parameter meanings, and source for the required ID. Missing only side-effect warnings, which prevents a 5.
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 input schema has 0% description coverage, but the description compensates fully by explaining exactly what each parameter means: host formats, site name/ID, and the device_id source (list_devices). This goes beyond the bare schema and gives an agent all necessary parameter-level knowledge.
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 ('Trigger') and resource ('firmware upgrade on an adopted device'), clearly distinguishing it from related tools like adopt_device or restart_device. The action is unambiguous.
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 clear context for when to use the tool (upgrading firmware) and explicitly instructs how to obtain the required device_id from list_devices. It does not explicitly mention exclusions or alternatives, but the context is sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_protect_fileA
Upload a Protect device asset file. WARNING: Uploads asset file to NVR storage. Overwriting system files may not be reversible.
host: console name, ID, or composite ID (MAC:numericId format). file_type: Protect asset category. 'sounds' and 'images' are the known categories; the value selects the upload target path (/files/{file_type}). The category is not validated on read-back, so pass a known category exactly. filename: name of the file to upload (e.g. 'alert.mp3'). file_content_base64: base64-encoded file content.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| filename | Yes | ||
| file_type | Yes | ||
| file_content_base64 | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden, and it does so well: it warns that uploads go to NVR storage, notes that overwriting system files may not be reversible, and discloses that file_type is not validated on read-back. These are non-obvious behavioral traits that materially affect safe invocation.
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 warning is front-loaded, each parameter earns its place with concrete operational detail, and there is no filler. The structure makes the high-risk nature immediately visible before parameter details.
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 destructive, annotation-free write operation, the description covers the essential context: the effect, the irreversibility risk, exact parameter semantics, known valid categories, and path behavior. The output schema exists, so not restating return values is acceptable.
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 0%, so the description must fully explain the parameters, and it does. It defines host formats, enumerates the known file_type categories, clarifies the path-selection behavior, gives a filename example, and specifies base64 encoding for content.
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 names a specific action ('Upload'), a specific resource ('Protect device asset file'), and the destination ('NVR storage'), which clearly differentiates it from the large sibling set. The WARNING further pins the operational intent by emphasizing that this writes to NVR storage.
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 conveys when to use the tool by explaining that it uploads asset files and by giving known file_type categories, but it does not explicitly contrast it with alternatives such as list_protect_files or other Protect operations. Guidance is implied rather than stated as explicit when/when-not conditions.
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.
283 tool updates
v0.6.2- First observed
adopt_device - First observed
alarm_hub_trigger_output - First observed
allow_network_on_port_profile - First observed
approve_pending_device - First observed
assign_carrier_subscriber_plan - First observed
attach_carrier_subscriber_host - First observed
block_client - First observed
bulk_delete_hotspot_vouchers - First observed
compare_site_performance - First observed
create_acl_rule - First observed
create_arm_profile - First observed
create_carrier_subscriber - First observed
create_device_tag - First observed
create_dns_policy - First observed
create_firewall_policy - First observed
create_firewall_zone_proxy - First observed
create_hotspot_operator - First observed
create_hotspot_vouchers - First observed
create_liveview - First observed
create_network - First observed
create_port_forward - First observed
create_radius_profile - First observed
create_rtsps_stream - First observed
create_site_to_site_tunnel - First observed
create_traffic_matching_list - First observed
create_traffic_route - First observed
create_traffic_rule - First observed
create_vpn_server - First observed
create_wifi_broadcast - First observed
delete_acl_rule - First observed
delete_arm_profile - First observed
delete_device_tag - First observed
delete_dns_policy - First observed
delete_firewall_policy - First observed
delete_firewall_zone_proxy - First observed
delete_hotspot_operator - First observed
delete_hotspot_voucher - First observed
delete_network - First observed
delete_port_forward - First observed
delete_rtsps_stream - First observed
delete_site_to_site_tunnel - First observed
delete_traffic_matching_list - First observed
delete_traffic_route - First observed
delete_traffic_rule - First observed
delete_vpn_server - First observed
delete_wifi_broadcast - First observed
detach_carrier_subscriber_host - First observed
disable_arm - First observed
disable_camera_mic_permanently - First observed
enable_arm - First observed
exclude_network_on_port_profile - First observed
execute_client_action - First observed
execute_device_action - First observed
execute_port_action - First observed
fabric_connector_delete - First observed
fabric_connector_get - First observed
fabric_connector_patch - First observed
fabric_connector_post - First observed
fabric_connector_put - First observed
get_account - First observed
get_acl_rule - First observed
get_acl_rule_ordering - First observed
get_alarm_hub - First observed
get_arm_profile - First observed
get_bridge - First observed
get_camera - First observed
get_camera_snapshot - First observed
get_carrier_service_plan - First observed
get_carrier_subscriber - First observed
get_channel_plan - First observed
get_chime - First observed
get_client - First observed
get_client_link_diagnostics - First observed
get_device - First observed
get_device_port_state - First observed
get_device_statistics - First observed
get_device_stp_state - First observed
get_dns_policy - First observed
get_dynamic_dns - First observed
get_firewall_group - First observed
get_firewall_policy - First observed
get_firewall_policy_ordering - First observed
get_firewall_rule - First observed
get_firewall_zone_proxy - First observed
get_fleet_summary - First observed
get_fob - First observed
get_historical_stats - First observed
get_host - First observed
get_hotspot_package - First observed
get_hotspot_voucher - First observed
get_innerspace_asset - First observed
get_innerspace_project - First observed
get_innerspace_summary - First observed
get_isp_metrics - First observed
get_lag - First observed
get_light - First observed
get_link_station - First observed
get_liveview - First observed
get_mc_lag_domain - First observed
get_mobility_device - First observed
get_network - First observed
get_network_application_info - First observed
get_network_references - First observed
get_nvr - First observed
get_port_profile - First observed
get_protect_application_info - First observed
get_protect_user - First observed
get_radius_profile - First observed
get_recognition_group_counts - First observed
get_recognition_group_image - First observed
get_relay - First observed
get_rtsps_stream - First observed
get_scheduled_task - First observed
get_sdwan_config - First observed
get_sdwan_config_status - First observed
get_sensor - First observed
get_setting - First observed
get_siren - First observed
get_site_health_summary - First observed
get_site_inventory - First observed
get_site_statistics - First observed
get_speaker - First observed
get_switch_stack - First observed
get_system_info - First observed
get_thumbnail - First observed
get_traffic_matching_list - First observed
get_traffic_route - First observed
get_ulp_user - First observed
get_user - First observed
get_viewer - First observed
get_vpn_server - First observed
get_wifi_broadcast - First observed
get_wlan_config - First observed
get_wlan_group - First observed
list_accounts - First observed
list_acl_rules - First observed
list_active_clients_stats - First observed
list_alarm_hubs - First observed
list_all_clients - First observed
list_all_devices - First observed
list_all_sites_aggregated - First observed
list_arm_profiles - First observed
list_bridges - First observed
list_cameras - First observed
list_carrier_service_plans - First observed
list_carrier_subscribers - First observed
list_chimes - First observed
list_client_sessions - First observed
list_clients - First observed
list_configured_api_keys - First observed
list_countries - First observed
list_device_stats - First observed
list_device_tags - First observed
list_devices - First observed
list_dns_policies - First observed
list_dpi_applications - First observed
list_dpi_categories - First observed
list_dynamic_dns - First observed
list_firewall_groups - First observed
list_firewall_policies - First observed
list_firewall_rules - First observed
list_firewall_zones_proxy - First observed
list_fobs - First observed
list_hosts - First observed
list_hotspot_operators - First observed
list_hotspot_packages - First observed
list_hotspot_vouchers - First observed
list_innerspace_access_points - First observed
list_innerspace_devices - First observed
list_innerspace_floor_plans - First observed
list_innerspace_inventory - First observed
list_innerspace_switches - First observed
list_known_clients - First observed
list_lags - First observed
list_lights - First observed
list_link_stations - First observed
list_liveviews - First observed
list_local_sites - First observed
list_mc_lag_domains - First observed
list_mobility_admins - First observed
list_mobility_clients - First observed
list_mobility_devices - First observed
list_mobility_workspaces - First observed
list_networks - First observed
list_pending_devices - First observed
list_port_forwards - First observed
list_port_profiles - First observed
list_protect_events - First observed
list_protect_files - First observed
list_protect_users - First observed
list_radius_profiles - First observed
list_recognition_detections - First observed
list_recognition_groups - First observed
list_relays - First observed
list_rogue_aps - First observed
list_routing_entries - First observed
list_scheduled_tasks - First observed
list_sdwan_configs - First observed
list_sensors - First observed
list_settings - First observed
list_sirens - First observed
list_site_devices - First observed
list_site_to_site_tunnels - First observed
list_sites - First observed
list_speakers - First observed
list_switch_stacks - First observed
list_traffic_matching_lists - First observed
list_traffic_routes - First observed
list_traffic_rules - First observed
list_ulp_users - First observed
list_users - First observed
list_viewers - First observed
list_vpn_servers - First observed
list_wan_interfaces - First observed
list_wifi_broadcasts - First observed
list_wlan_configs - First observed
list_wlan_groups - First observed
locate_device - First observed
patch_firewall_policy - First observed
pos_ingest_transaction - First observed
ptz_goto_preset - First observed
ptz_patrol_start - First observed
ptz_patrol_stop - First observed
query_isp_metrics - First observed
reconnect_client - First observed
reject_pending_device - First observed
relay_activate_output - First observed
restart_device - First observed
resume_carrier_subscriber - First observed
search_across_sites - First observed
search_device_fleet - First observed
set_acl_rule_ordering - First observed
set_firewall_policy_ordering - First observed
siren_play - First observed
siren_stop - First observed
siren_test_sound - First observed
speaker_test_sound - First observed
start_talkback_session - First observed
suspend_carrier_subscriber - First observed
trigger_alarm_webhook - First observed
unadopt_device - First observed
unblock_client - First observed
update_acl_rule - First observed
update_alarm_hub - First observed
update_arm_profile - First observed
update_arm_profile_settings - First observed
update_bridge - First observed
update_camera - First observed
update_carrier_subscriber - First observed
update_chime - First observed
update_device_tag - First observed
update_dns_policy - First observed
update_dynamic_dns - First observed
update_firewall_policy - First observed
update_firewall_zone_proxy - First observed
update_fob - First observed
update_hotspot_operator - First observed
update_light - First observed
update_link_station - First observed
update_liveview - First observed
update_mobility_device_name - First observed
update_mobility_device_network - First observed
update_mobility_device_wireless - First observed
update_network - First observed
update_port_forward - First observed
update_port_profile - First observed
update_relay - First observed
update_sensor - First observed
update_setting - First observed
update_siren - First observed
update_site_to_site_tunnel - First observed
update_speaker - First observed
update_traffic_matching_list - First observed
update_traffic_route - First observed
update_traffic_rule - First observed
update_user - First observed
update_viewer - First observed
update_vpn_server - First observed
update_wan_interface - First observed
update_wifi_broadcast - First observed
update_wlan_config - First observed
upgrade_device - First observed
upload_protect_file
TDQS
There are numerous overlapping tools for similar resources: list_devices vs list_all_devices vs list_site_devices vs search_device_fleet, and list_clients vs list_all_clients vs list_active_clients_stats vs list_known_clients vs list_client_sessions. The existence of get_isp_metrics vs query_isp_metrics, plus execute_client_action alongside block_client/unblock_client/reconnect_client, blurs boundaries and can easily mislead an agent.
The vast majority of tools follow a predictable verb_noun pattern (list_, get_, create_, update_, delete_, execute_). Minor deviations exist (allow_network_on_port_profile, enable_arm, siren_play, query_isp_metrics vs get_isp_metrics), but they are still readable and do not break the overall convention.
283 tools is an extreme count for any MCP server. Even for a platform as broad as UniFi Fabric, this level of granularity overwhelms an agent's tool-selection space and adds massive navigation overhead. The server would benefit from consolidation into categories or fewer, more generic tools.
Core resources like networks, firewall policies, WiFi broadcasts, and VPN servers have full CRUD, but several families are read-only with no create/update/delete (firewall groups, RADIUS accounts, hotspot packages, scheduled tasks, LAGs, MC-LAG domains). Some gaps are likely due to upstream API limits, but the inconsistent depth across resource types creates workarounds and dead ends.
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
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
The cloud for agents. Tools for AI agents to register, build, and deploy other agents. Zero human required.
- ChamadeOAuthio.chamade
Voice and chat for AI agents — Discord, Teams, Meet, Slack, Zoom, Telegram, WhatsApp, NC Talk, SIP
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA server implementation that enables natural language interactions with UniFi network devices by wrapping the UniFi Network API for AI agents like Goose and Claude.10MIT
- 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 UniFi network infrastructure through 50+ tools covering devices, clients, networks, WiFi, firewall rules, and guest access using the official UniFi Network API.52565MIT
- 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/swkstudios/unifi-fabric-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server