Skip to main content
Glama

Safe Omada MCP

CI npm version License: MIT Node.js 24+

Security-focused MCP server for TP-Link Omada Open API workflows.

What this is

A merged, safety-first MCP server for TP-Link Omada controllers, built from a survey of 23 public Omada MCP projects (comparison, merge notes).

  • Base: gaspareduard/Omada-mcp ("safe-omada-mcp"), itself a hardened fork of MiguelTVMS/tplink-omada-mcp.

  • Added: 54 tools ported from realtydev, aljopro, Zesty0wl and daniel-k, each matched to a documented Open API operation (ported and skipped), and eight agent skills adapted from ChenyqThu/omada-skill and kaviththiranga/omada-mcp-server plus two new ones (skills).

  • Surface: 426 operations (337 read, 89 write) plus 4 discovery tools; 28 deprecated aliases are hidden by default.

  • Credits: every source and what was taken from it is listed in Credits and NOTICE.md.

Quick start (Claude Desktop / Claude Code)

npm ci && npm run build      # Node.js 24+

Claude Desktop (claude_desktop_config.json) or a Claude Code project .mcp.json (Claude Code expands ${VAR} from your shell, so the file holds no secrets):

{
  "mcpServers": {
    "safe-omada": {
      "command": "node",
      "args": ["/absolute/path/to/safe-omada-mcp/dist/index.js"],
      "env": {
        "OMADA_BASE_URL": "${OMADA_BASE_URL}",
        "OMADA_CLIENT_ID": "${OMADA_CLIENT_ID}",
        "OMADA_CLIENT_SECRET": "${OMADA_CLIENT_SECRET}",
        "OMADA_OMADAC_ID": "${OMADA_OMADAC_ID}",
        "OMADA_STRICT_SSL": "true",
        "OMADA_CAPABILITY_PROFILE": "safe-read"
      }
    }
  }
}

Claude Code one-liner:

claude mcp add safe-omada --scope user \
  -e OMADA_BASE_URL=https://<controller-host>:8043 -e OMADA_CLIENT_ID=<client-id> \
  -e OMADA_CLIENT_SECRET=<client-secret> -e OMADA_OMADAC_ID=<omadac-id> \
  -e OMADA_STRICT_SSL=true -e OMADA_CAPABILITY_PROFILE=safe-read \
  -- node /absolute/path/to/safe-omada-mcp/dist/index.js

Claude Desktop does not expand ${VAR}; put placeholder-replaced values there and protect the file. A Docker variant is in the Quick Start below.

Install for your AI agent

docs/INSTALL.md has exact configuration for Claude Code (claude mcp add and .mcp.json), Claude Desktop, Codex CLI (~/.codex/config.toml, [mcp_servers.omada]), Cursor (~/.cursor/mcp.json or .cursor/mcp.json), Gemini CLI, VS Code / GitHub Copilot (.vscode/mcp.json), Windsurf, Cline and OpenCode, plus a hardened Docker variant. It also explains how to create Open API credentials (Global View > Settings > Platform Integration > Open API, client mode, start with a viewer role), why OMADA_STRICT_SSL stays true (use OMADA_CA_FILE for self-signed controllers), and where the skills go for each agent (~/.claude/skills, AGENTS.md, .cursor/rules).

Capability profiles at a glance

Profile

What is registered

Typical use

safe-read (default)

Reads for dashboard, clients, client insights, devices, firewall ACL/traffic

First install, monitoring

safe-read + OMADA_TOOL_CATEGORIES=all:r

Every read tool, no write tool

Read-only skills (audit, triage, troubleshooting)

ops-write

Reads for dashboard, clients, client insights, devices, logs, WAN, threats, VPN; writes for clients and maintenance (backups)

Day-to-day operations

admin

All categories, read and write, except recovery

Planned configuration changes

recovery:rw (explicit only)

Restore tools; also need confirmDangerous: true

Operator-led disaster recovery

OMADA_TOOL_CATEGORIES replaces the profile defaults; grant the narrowest categories you need (for example all:r,wireless-radio:rw).

Safety guarantees

  • Read-only by default. Write tools are not even registered unless the profile or categories grant them.

  • Dry run by default. Every write returns a preview (planned) unless called with dryRun: false.

  • Read-back. Key writes verify the controller state afterwards and report verified, mismatch, unknown, unverifiable or partial; others report submitted and should be read back (see the omada-safe-change skill).

  • Recovery isolation. Restores need an explicit recovery:rw grant plus confirmDangerous: true; neither admin nor all:rw includes it.

  • No raw API tool, no private web API, no header-supplied credentials; credentials come only from the environment.

  • Redaction of secrets in logs and tool results; audit events for every mutation.

  • stdio first. HTTP is lab-only, loopback-only and needs two explicit opt-in variables. TLS verification is on by default.

These are server-side controls. They do not replace human approval: configure your agent to ask before running write tools.

Skills

Eight skills in skills/ teach an agent whole workflows with this server: omada-network-audit (read-only health and security review), omada-safe-change (dry-run -> review -> apply -> read-back), omada-wifi-troubleshoot, omada-roaming-dfs, omada-alert-triage, omada-support-assist, omada-bulk-site-onboard and omada-guest-portal-wizard. For Claude Code: cp -R skills/omada-* ~/.claude/skills/. Details: docs/SKILLS.md.

Documentation

Document

Contents

docs/INSTALL.md

Agent configuration, credentials, profiles, TLS

docs/SKILLS.md

Skill index and installation

docs/COMPARISON.md

The 23 surveyed repositories and verdicts

docs/MERGE-NOTES.md

What was merged, what was fixed, known limitations

docs/porting-skipped.md

Ported and skipped tools

docs/security-model.md

Security model

docs/operator-guide.md

Operator guide

docs/support-matrix.md

Controller and device support

CLAUDE.md

Contributor guide for AI coding agents

Related MCP server: tplink-omada-mcp

At a Glance

  • Production-safe baseline uses stdio

  • Omada credentials are environment-only

  • Capability profiles and category gating control what tools are exposed

  • HTTP remains in the codebase only as an explicitly unsafe, lab-only path

  • Uses documented Open API routes; controller/device validation is operation-specific (see support matrix)

0.19 release candidate

This branch prepares 0.19.0-rc.1. Write previews, compact discovery, diagnostics and reliability changes are described in the migration guide. Stable write-tool release awaits disposable-controller and hardware validation; latest remains the existing stable version.

Quick Start

Option 1: Use with Claude Desktop via Docker

  1. Pull or build an image:

    docker build -t omada-mcp:local .

    If you do not publish an image yet, build locally instead:

    npm run docker:build
  2. Edit your Claude Desktop MCP config:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  3. Add the server entry:

    {
      "mcpServers": {
        "safe-omada": {
          "command": "docker",
          "args": [
            "run",
            "-i",
            "--rm",
            "-e", "OMADA_BASE_URL=https://your-omada-controller.local",
            "-e", "OMADA_CLIENT_ID=your-client-id",
            "-e", "OMADA_CLIENT_SECRET=your-client-secret",
            "-e", "OMADA_OMADAC_ID=your-omadac-id",
            "-e", "OMADA_SITE_ID=your-site-id",
            "-e", "OMADA_STRICT_SSL=true",
            "omada-mcp:local"
          ]
        }
      }
    }
  4. Restart Claude Desktop and verify the server by listing sites or devices.

Option 2: Run the container directly

docker run --rm -it \
  --env-file .env \
  omada-mcp:local

Option 3: Run locally for development

npm install
npm run build
npm start

Configuration

The server reads configuration from environment variables. See .env.example for the complete reference.

Required Omada Variables

Variable

Required

Default

Description

OMADA_BASE_URL

Yes

-

Base URL of the Omada controller

OMADA_CLIENT_ID

Yes

-

OAuth client ID from Omada Platform Integration

OMADA_CLIENT_SECRET

Yes

-

OAuth client secret

OMADA_OMADAC_ID

Yes

-

Omada controller ID (omadacId)

OMADA_SITE_ID

No

-

Optional default site ID. When omitted and no tool-level site ID is supplied, a single available site is selected automatically; zero or multiple sites return an error.

OMADA_STRICT_SSL

No

true

Enforce TLS certificate validation

OMADA_CA_FILE

No

-

PEM private CA bundle path; retains hostname verification. Mount the file read-only in Docker.

OMADA_TIMEOUT

No

30000

HTTP timeout in milliseconds

Capability and Logging

Variable

Required

Default

Description

OMADA_CAPABILITY_PROFILE

No

safe-read

Built-in profile: safe-read, ops-write, admin, compatibility

OMADA_TOOL_CATEGORIES

No

profile default

Explicit category override; recovery requires recovery:rw

OMADA_CATALOG_MODE

No

standard

standard tools or compact discovery/dispatch

OMADA_INCLUDE_DEPRECATED

No

false

Include deprecated aliases

OMADA_ALLOW_TOOL_HEADERS

No

false

Expose only bounded X-Request-ID / X-Correlation-ID headers

MCP_SERVER_LOG_LEVEL

No

info

debug, info, warn, error

MCP_SERVER_LOG_FORMAT

No

plain

plain, json, or gcp-json

Capability Profiles

Profile

Intended use

safe-read

Default read-only operational visibility

ops-write

Client operations and maintenance writes, excluding recovery

admin

All implemented categories except recovery

compatibility

Deprecated alias for admin; no private API fallback

OMADA_TOOL_CATEGORIES replaces profile defaults. Restore tools require explicit recovery:rw; neither admin, compatibility, nor all:rw grants recovery.

Mutation previews and recovery

Writes default to dryRun: true. Review the preview and explicitly pass dryRun: false to apply. submitted means the controller accepted a request; only verified indicates a matching readback. See the 0.19 migration guide for verification limits and partial outcomes.

Restore tools also require confirmDangerous: true. This is an argument check, not enforced human approval or a stateful second-call protocol. Configure approvals in the MCP host and grant recovery:rw only when recovery is intended.

Optional HTTP Lab Mode

HTTP is not part of the supported production baseline.

It only starts when both of these are set:

  • MCP_SERVER_USE_HTTP=true

  • MCP_UNSAFE_ENABLE_HTTP=true

Use it only for local lab/debug scenarios.

Variable

Required

Default

Description

MCP_SERVER_USE_HTTP

No

false

Legacy lab-only switch

MCP_UNSAFE_ENABLE_HTTP

No

false

Explicit acknowledgement required

MCP_HTTP_PORT

No

3000

HTTP port

MCP_HTTP_BIND_ADDR

No

127.0.0.1

Loopback bind address only (127.0.0.1 or ::1)

MCP_HTTP_PATH

No

/mcp

MCP endpoint path

MCP_HTTP_ENABLE_HEALTHCHECK

No

true

Enable health check

MCP_HTTP_HEALTHCHECK_PATH

No

/healthz

Health check path

MCP_HTTP_ALLOW_CORS

No

true

Enable CORS

MCP_HTTP_ALLOWED_ORIGINS

No

127.0.0.1, localhost

Allowed origins

MCP_HTTP_NGROK_ENABLED

No

false

Legacy placeholder; disabled in safe baseline

MCP_HTTP_NGROK_AUTH_TOKEN

No

-

Legacy placeholder

Development and Validation

Common Commands

Task

Command

Run dev server

npm run dev

Build

npm run build

Lint + type-check

npm run check

Unit tests

npm test

Coverage gates

npm run test:coverage

Symlink integrity

npm run symlinks:check

README/tool sync

node scripts/check-readme-sync.mjs

Tool/test mapping

node scripts/check-tool-tests.mjs

Inspector

Use the MCP Inspector when you want to test the built server interactively:

npm run inspector
npm run inspector:build

Project Notes

  • The safe baseline is stdio first.

  • HTTP remains a legacy, explicitly unsafe lab path.

  • The repo includes docs/openapi/ as the implementation reference for Omada endpoints.

  • README tool tables below are kept in sync with the registered MCP tools.

Tools

0.19 workflows and discovery

Tool

Description

getWifiHealthSummary

Composes dashboard, channel, interference and retry evidence with timestamps, missing sections and bounded review heuristics. Read-only.

diagnoseLogs

Reads recent event, alert and audit pages plus log settings; distinguishes unavailable data from empty results and reports incomplete history.

diagnoseCameraConnectivity

Resolves a camera client and reads its detail/session evidence; reports missing data and network drilldowns without claiming to diagnose Frigate inference.

setApRadio

Previews or updates one supported AP band with advertised channel/width validation, preserved sibling settings and bounded readback verification.

updateSsid

Previews or updates SSID name, broadcast visibility, guest status or sharing policy while preserving required security fields. Broadcast visibility is not SSID enable/disable.

setSwitchPorts

Previews or updates name, status, PoE, profile or override for 1–32 explicit ports. Checks existence, guards known LAG disruption and reports per-port verification/partial completion.

searchOperations

Searches only enabled operations by name, description or category.

describeOperation

Returns an enabled operation's exact argument schema and permission.

getServerCapabilities

Reports version, effective catalog, profile and validation limits.

callOperation

Compact mode only: invokes an enabled operation through its existing schema and handler.

Each category below is collapsed by default. Click to expand and see the full tool list, split into read and write tools.


Ported operations

Tools ported from sibling MIT-licensed Omada MCP projects (see NOTICE.md). Every route was re-verified against the bundled OpenAPI snapshots in docs/openapi/; candidates without a documented route, duplicates of existing tools and private-API tools were skipped and are listed in docs/porting-skipped.md. All writes default to dryRun: true. Tools marked destructive carry destructiveHint and sit in categories that only the admin profile (or an explicit OMADA_TOOL_CATEGORIES grant) enables; ops-write only grants the non-destructive updateClient from this set.

Tool

Category

Risk

Description

getWlanExperienceIndex

wireless-radio

read

Gets the site WLAN experience index from recent WLAN optimization scans.

listRfPlanningHistory

wireless-radio

read

Lists RF planning (WLAN optimization) history entries for a site.

getRfPlanningHistoryDetail

wireless-radio

read

Gets one RF planning history entry, including the recommended and previous configuration.

listRebootSchedules

schedules

read

Lists device reboot schedules configured for a site.

getServerInfo

controller

read

Reports this MCP server package name/version and Node.js runtime. Local only; no controller request.

Tool

Category

Risk

Description

adoptDevice

devices-general

write

Starts adoption of a pending device; optional device credentials are never echoed.

startCableTest

devices-switch

destructive

Starts a cable test on explicit switch ports (may briefly interrupt link); read results with getCableTestFullResults.

startFirmwareUpgrade

devices-general

destructive

Starts an online firmware upgrade of one device (device reboots); preview shows current firmware info. Admin profile only.

setSwitchNetworks

devices-switch

destructive

Batch modifies switch VLAN interfaces with a preview of the current list. Admin profile only.

setGatewayWanConnect

devices-gateway

destructive

Connects or disconnects a gateway WAN port; disconnecting can take the site offline. Admin profile only.

updateWanPortSetting

network-wan

destructive

Modifies one WAN port's settings with a preview of the current WAN configuration. Admin profile only.

setSiteLed

sites

write

Enables or disables the site-wide device LED setting with preview.

updateClient

clients

write

Sets a client's display name with dry-run preview.

createLanNetwork

network-lan

write

Creates a LAN network with dry-run preview.

updateLanNetwork

network-lan

destructive

Updates an existing LAN network after an existence preflight; preview shows the current record. Admin profile only.

deleteLanNetwork

network-lan

destructive

Deletes an existing LAN network after an existence preflight. Admin profile only.

createLanProfile

network-lan

write

Creates a LAN (switch port) profile with dry-run preview.

updateLanProfile

network-lan

destructive

Updates an existing LAN (switch port) profile after an existence preflight; preview shows the current record. Admin profile only.

createPortForward

network-nat

destructive

Creates a NAT port forwarding rule with dry-run preview. Admin profile only.

updatePortForward

network-nat

destructive

Updates an existing NAT port forwarding rule after an existence preflight; preview shows the current record. Admin profile only.

deletePortForward

network-nat

destructive

Deletes an existing NAT port forwarding rule after an existence preflight. Admin profile only.

createRoute

network-routing

destructive

Creates a static route with dry-run preview. Admin profile only.

updateRoute

network-routing

destructive

Updates an existing static route after an existence preflight; preview shows the current record. Admin profile only.

deleteRoute

network-routing

destructive

Deletes an existing static route after an existence preflight. Admin profile only.

createSsid

wireless-ssid

write

Creates an SSID in a WLAN group with dry-run preview; secrets are redacted from output.

deleteSsid

wireless-ssid

destructive

Deletes an SSID (clients disconnect); preview shows the current SSID detail. Admin profile only.

updateSsidHotspotV2

wireless-ssid

write

Updates SSID Hotspot 2.0 with a preview of the current SSID detail.

updateSsidMacFilter

wireless-ssid

destructive

Updates SSID MAC filter settings with a preview of the current SSID detail. Admin profile only.

updateSsidMultiCastConfig

wireless-ssid

write

Updates SSID multicast/broadcast management settings with a preview of the current SSID detail.

updateSsidRateControl

wireless-ssid

write

Updates SSID 802.11 data rate control settings with a preview of the current SSID detail.

updateSsidRateLimit

wireless-ssid

write

Updates SSID SSID and per-client rate limit settings with a preview of the current SSID detail.

updateSsidWlanSchedule

wireless-ssid

destructive

Updates SSID WLAN schedule with a preview of the current SSID detail. Admin profile only.

updateBandSteering

wireless-radio

write

Updates the site band steering setting with a preview of the current setting.

updateBeaconControl

wireless-radio

write

Updates the site beacon control and airtime fairness setting with a preview of the current setting.

updateMesh

wireless-radio

destructive

Updates the site mesh setting with a preview of the current setting. Admin profile only.

updateRoaming

wireless-radio

write

Updates the site roaming setting with a preview of the current setting.

startRfOptimization

wireless-radio

destructive

Starts WLAN (RF planning) optimization; can change AP channels/power. Admin profile only.

cancelRfOptimization

wireless-radio

write

Cancels a running WLAN (RF planning) optimization.

applyRfPlanningHistory

wireless-radio

destructive

Applies the recommended or previous configuration from an RF planning history entry. Admin profile only.

deleteRfPlanningHistory

wireless-radio

destructive

Deletes an RF planning history entry. Admin profile only.

updateRfPlanningConfig

wireless-radio

write

Modifies the RF planning deploy configuration with a preview of the current configuration.

createRebootSchedule

schedules

destructive

Creates a site reboot schedule (it schedules device reboots). Admin profile only.

updateRebootSchedule

schedules

destructive

Replaces an existing site reboot schedule after an existence preflight. Admin profile only.

deleteRebootSchedule

schedules

destructive

Deletes an existing site reboot schedule after an existence preflight. Admin profile only.

createPoeSchedule

schedules

destructive

Creates a site PoE schedule (it powers PoE ports off outside the time range). Admin profile only.

updatePoeSchedule

schedules

destructive

Replaces an existing site PoE schedule after an existence preflight. Admin profile only.

deletePoeSchedule

schedules

destructive

Deletes an existing site PoE schedule after an existence preflight. Admin profile only.

setIpsSetting

firewall-ids

destructive

Modifies the site IDS/IPS configuration with a preview of the current configuration. Admin profile only.

deleteAlertLogs

logs

destructive

Permanently deletes alert logs (site or global); broad selections need explicit confirmation. Admin profile only.

deleteEventLogs

logs

destructive

Permanently deletes event logs (site or global); broad selections need explicit confirmation. Admin profile only.

resolveAlertLogs

logs

write

Marks site alert logs as resolved; broad selections need explicit confirmation.

resetLogNotificationSettings

logs

destructive

Resets log notification settings to defaults (site or global); preview shows current settings. Admin profile only.

updateLogNotificationSettings

logs

write

Modifies log notification settings (site or global, v2 route) with a preview of the current settings.

updateAuditNotificationSettings

logs

destructive

Modifies audit log notification settings (site or global) with preview. Admin profile only.


Site & Client

Site listing, client monitoring, and client-level operational controls (rate limits, block/unblock, reconnect).

Tool

Description

listSites

Lists all sites configured on the controller.

getSiteCapacity

Get site capacity settings including maximum device and client counts.

getSiteDetail

Get detailed information about a site, including name, region, timezone, and configuration.

getSiteDeviceAccount

Get device account settings for a site.

getSiteNtpStatus

Get NTP server status and configuration for a site.

getSiteRememberSetting

Get the remember device setting for a site.

getSiteSpecification

Get site specification including device limits and feature capabilities.

getSiteUrl

Get the URL associated with a site for OpenAPI access.

getSiteTemplateConfig

Get configuration settings for a site template. Requires siteTemplateId.

getSiteTemplateDetail

Get detailed information about a site template. Requires siteTemplateId.

getSiteTemplateList

List all site templates configured on the controller.

listClients

Lists active client devices for a site.

getClient

[DEPRECATED] Use listClients instead. When you have a client MAC, getClientDetail is also available. This tool filters the site client list in-process.

listMostActiveClients

Gets the most active clients sorted by traffic usage.

listClientsActivity

Gets client activity statistics over time.

listClientsPastConnections

Gets past connection history for clients.

Tool

Description

setClientRateLimit

Sets custom bandwidth limits (download/upload) for a specific client.

setClientRateLimitProfile

Applies a predefined rate limit profile to a specific client.

disableClientRateLimit

Disables bandwidth rate limiting for a specific client.

blockClient

Blocks a client from network access with an auditable mutation summary.

unblockClient

Restores a blocked client to network access with an auditable mutation summary.

reconnectClient

Forces a client to reconnect with an auditable mutation summary.

Tool

Description

rebootDevice

Reboots a managed device with an auditable mutation summary.

setDeviceLed

Changes a device LED state with an auditable mutation summary.


Device

Device inventory, per-device detail (switches, gateways, APs), firmware, cable tests, and device configuration.

Tool

Description

listDevices

Lists provisioned devices for a given site.

getDevice

[DEPRECATED] Use listDevices instead and filter results client-side. This tool filters the site device list in-process; there is no dedicated device-detail endpoint.

searchDevices

Searches for devices globally across all sites the user has access to.

listDevicesStats

Queries statistics for global adopted devices with pagination and filtering.

getSwitchStackDetail

Retrieves detailed configuration and status for a switch stack.

getSwitchDetail

Fetches detailed configuration and status for a specific switch.

getGatewayDetail

Fetches detailed configuration and status for a specific gateway.

getGatewayWanStatus

Gets WAN port status for a specific gateway.

getGatewayLanStatus

Gets LAN port status for a specific gateway.

getGatewayPorts

Gets port information for a specific gateway.

getApDetail

Fetches detailed configuration and status for a specific access point.

getApRadios

Gets radio information for a specific access point.

getStackPorts

Gets port information for a switch stack.

listPendingDevices

Lists devices pending adoption in a site.

getAllDeviceBySite

Gets all devices in a site including offline and disconnected devices.

getFirmwareInfo

Gets the latest available firmware info for a device. Use listDevices for MACs.

getGridAutoCheckUpgrade

Gets the auto-check firmware upgrade plan list (paginated).

listSwitchNetworks

Lists VLAN network assignments for a switch (paginated). Requires switchMac.

getSwitchGeneralConfig

Gets general configuration for a switch. Requires switchMac.

getCableTestLogs

Gets cable test history for a switch. Requires switchMac.

getCableTestFullResults

Gets full per-port cable diagnostics for a switch. Requires switchMac.

getOswStackLagList

Gets Link Aggregation Group (LAG) list for a switch stack. Requires stackId.

getStackNetworkList

Gets VLAN network list for a switch stack (paginated). Requires stackId.

getApUplinkConfig

Gets uplink configuration for an AP (wired/mesh mode). Requires apMac.

getRadiosConfig

Gets per-radio configuration for an AP (channel, power, width). Requires apMac.

getApVlanConfig

Get VLAN configuration for an access point, including management VLAN and per-SSID VLAN tagging settings.

getMeshStatistics

Gets mesh link statistics for an AP. Requires apMac.

getRFScanResult

Gets last RF scan results for an AP. Requires apMac.

getSpeedTestResults

Gets last speed test results for an AP. Requires apMac.

getApSnmpConfig

Gets SNMP configuration for an AP. Requires apMac.

getApLldpConfig

Gets LLDP configuration for an AP. Requires apMac.

getApGeneralConfig

Gets general configuration for an AP (name, LED, country). Requires apMac.

getUplinkWiredDetail

Get wired uplink detail for an access point: uplink switch, port number, link speed, and PoE status.

getDownlinkWiredDevices

Gets wired downlink devices on an AP's LAN ports. Requires apMac.

getFirmwareUpgradePlan

Get the firmware upgrade plan list for devices managed by the controller.

getUpgradeLogs

Get firmware upgrade logs showing the history of upgrade operations performed on devices.

getDeviceTagList

Get the list of device tags defined in a site.

getApQosConfig

Get QoS configuration for a specific access point. Requires apMac.

getApIpv6Config

Get IPv6 configuration for a specific access point. Requires apMac.

getSitesApsIpSetting

Get IP settings for an AP. Requires apMac.

getSitesApsChannelLimit

Get channel limit configuration for an AP. Requires apMac.

getSitesApsAvailableChannel

Get list of available channels for an AP. Requires apMac.

getSitesApsLoadBalance

Get load balance configuration for an AP. Requires apMac.

getSitesApsOfdma

Get OFDMA configuration for an AP. Requires apMac.

getSitesApsPowerSaving

Get power saving configuration for an AP. Requires apMac.

getSitesApsTrunkSetting

Get trunk port setting for an AP. Requires apMac.

getSitesApsBridge

Get bridge configuration for an AP. Requires apMac.

listSitesApsPorts

List ports for an AP. Requires apMac.

getSitesSwitchesEs

Get ES switch details. Requires switchMac.

getSitesSwitchesEsGeneralConfig

Get ES switch general configuration. Requires switchMac.

listSitesCableTestSwitchesPorts

List cable test port info for a switch. Requires switchMac.

listSitesCableTestSwitchesIncrementResults

Get incremental cable test results for a switch. Requires switchMac.

getUpgradeOverviewCritical

Get the number of critical models available for upgrade.

getUpgradeOverviewTryBeta

Get the current status of the try-beta firmware upgrade switch.

listUpgradeFirmwares

List available firmware packages for upgrade (paginated).

listUpgradeOverviewFirmwares

List firmware overview for upgradeable devices (paginated).

listSitesStacks

List switch stacks in a site (paginated).

getSitesDeviceWhiteList

Get the device adoption whitelist for a site (paginated).

getSitesGatewaysGeneralConfig

Get general configuration for a gateway. Requires gatewayMac.

getSitesGatewaysPin

Get PIN information for a gateway. Requires gatewayMac.

getSitesGatewaysSimCardUsed

Get SIM card usage info for a gateway. Requires gatewayMac.

getSitesHealthGatewaysWansDetails

Get gateway WAN health details. Requires gatewayMac.

Tool

Description

setApPowerSaving

Updates AP power saving configuration with support checks and dry-run preview. Requires apMac.

setApChannelLimit

Updates AP channel-limit configuration with support checks and dry-run preview. Requires apMac.

setApConfig

Updates documented AP configuration families with dry-run preview. Covers AP general, IP, IPv6, QoS, radio, service, load-balance, OFDMA, trunk, bridge, WLAN group, port, channel, AFC, and antenna settings. Setter-only families return planned payloads and an explicit warning when controller readback is unavailable. Requires apMac.

setGatewayConfig

Updates documented gateway configuration families with dry-run preview. Covers general, services, advanced, radios, WLAN, and port settings. Setter-only families return planned payloads and an explicit warning when controller readback is unavailable. Requires gatewayMac.


Network

WAN/LAN configuration, SSIDs, WLAN groups, routing, NAT, DHCP, DNS, firewall settings, bandwidth control, and related network services.

Tool

Description

getInternetInfo

Gets internet configuration information for a site.

getInternet

[DEPRECATED] Use getInternetInfo instead. Gets full WAN/Internet configuration for the site gateway.

getInternetBasicPortInfo

Gets WAN port summary/basic info for the site gateway.

getInternetLoadBalance

Gets WAN load balancing configuration (failover/load balance).

getWanPortsConfig

Gets per-port WAN configuration including connection type and IP settings.

getWanLanStatus

Gets WAN-LAN connectivity status for a site.

getGridVirtualWan

Gets virtual WAN list (paginated).

getIspBandScan

Gets ISP band scan results for a WAN port. Requires portUuid.

getDisableNatList

Gets the list of wired networks with NAT disabled (paginated).

getLtePortConfig

Gets LTE/cellular WAN port configuration.

getWanPortDetail

[DEPRECATED] Use getWanPortsConfig instead. Gets detailed WAN port configuration for all gateway WAN ports.

getWanIspProfile

Gets ISP scan profile result for a WAN port. Requires portUuid.

getWanQosConfig

Gets QoS configuration for gateway WAN ports.

getWanHealthDetail

[DEPRECATED] Alias for the WAN health tool; kept for backward compatibility. Requires gatewayMac.

getWanUsageStats

[DEPRECATED] Use getDashboardTrafficActivities instead. Gets WAN traffic usage statistics for the site.

getWanNatConfig

Gets one-to-one NAT rules (paginated).

getPortForwardingStatus

Gets port forwarding status and rules. Required: type (user or upnp). Optional pagination: page (default 1), pageSize (default 10).

getLanNetworkList

[DEPRECATED] Use getLanNetworkListV2 instead. This tool aggregates all pages; getLanNetworkListV2 is explicitly paginated.

getLanNetworkListV2

Get the LAN network list using the v2 API, with richer VLAN and DHCP data (paginated).

getInterfaceLanNetwork

Gets interface-level LAN network bindings. Optional type filter (0=WAN, 1=LAN).

getInterfaceLanNetworkV2

Get interface-level LAN network bindings (v2 API). Returns richer per-interface VLAN and network data.

getLanProfileList

Gets the list of LAN profiles configured in a site.

getApLoadBalance

[DEPRECATED] Use getSitesApsLoadBalance instead. Same endpoint, retained for backward compatibility. getSitesApsLoadBalance is the canonical tool name.

getApOfdmaConfig

[DEPRECATED] Use getSitesApsOfdma instead. Same endpoint, retained for backward compatibility. getSitesApsOfdma is the canonical tool name.

getMulticastRateLimit

Get multicast rate limit settings for a site.

getWlanGroupList

Gets the list of WLAN groups configured in a site.

getSsidList

Gets the list of SSIDs in a WLAN group.

getSsidDetail

Gets detailed information for a specific SSID. Required: wlanId and ssidId.

listAllSsids

Lists wireless SSIDs across all WLAN groups.

getFirewallSetting

Gets the site-global firewall settings returned by the official Omada firewall endpoint.

getVpnSettings

Gets VPN settings for a site.

listSiteToSiteVpns

Lists site-to-site VPN configurations.

listPortForwardingRules

[DEPRECATED] Use getPortForwardingList instead. Lists NAT port forwarding rules.

listOsgAcls

Lists gateway (OSG) ACL rules.

listEapAcls

Lists access point (EAP) ACL rules.

listStaticRoutes

[DEPRECATED] Use getGridStaticRouting instead. This tool aggregates all pages; getGridStaticRouting returns a single paginated page.

getStaticRoutingInterfaceList

Gets available interfaces for static routing.

listPolicyRoutes

[DEPRECATED] Use getGridPolicyRouting instead. This tool aggregates all pages; getGridPolicyRouting is paginated.

getGridPolicyRouting

Gets policy routing rules (paginated).

getOspfProcess

Gets OSPF process configuration for the site gateway.

getOspfInterface

Gets OSPF interface configuration for the site gateway.

getVrrpConfig

Gets VRRP configuration for OSW devices.

getOspfNeighbors

Gets OSPF neighbor devices for the site gateway.

getGridOtoNats

Gets 1:1 NAT rules (paginated).

getAlg

Gets ALG (Application Layer Gateway) configuration.

getUpnpSetting

Gets UPnP setting for the site gateway.

getDdnsGrid

Gets DDNS entries (paginated).

getDhcpReservationGrid

Gets DHCP reservations (paginated).

getGridIpMacBinding

Gets IP-MAC binding entries (paginated).

getIpMacBindingGeneralSetting

Gets IP-MAC binding global toggle setting.

getBandwidthControl

Gets global bandwidth control configuration.

getGridBandwidthCtrlRule

Gets bandwidth control rules (paginated).

getSessionLimit

Gets session limit global setting.

getGridSessionLimitRule

Gets per-rule session limit rules (paginated).

getSnmpSetting

Gets SNMP configuration (version, community string).

getLldpSetting

Gets LLDP global setting.

getRemoteLoggingSetting

Gets remote logging (syslog) configuration.

getDnsCacheDataList

Gets the DNS cache data list (paginated).

getIptvSetting

Gets IPTV service configuration for the site.

getNtpSetting

Gets NTP server configuration and synchronisation status.

getSyslogConfig

Deprecated; alias of getRemoteLoggingSetting for controller syslog configuration.

getAccessControl

Gets controller access control configuration.

getDnsCacheSetting

Gets DNS cache setting.

getDnsProxy

Gets DNS proxy configuration.

getIgmp

Gets IGMP snooping and proxy setting.

getSwitchVlanInterface

Gets VLAN interface configuration for a specific switch. Requires switchMac.

getLanDnsRules

Gets LAN DNS rules for the site (paginated).

getLanProfileEsUsage

Gets EAP/switch device usage for a LAN profile. Requires profileId.

getLanClientCount

Gets client distribution breakdown across LAN segments.

listRadiusProfiles

Lists RADIUS authentication profiles.

listGroupProfiles

Lists group profiles (IP, MAC, or port groups).

getApplicationControlStatus

Gets application control status for a site.

getSshSetting

Gets SSH settings for a site.

listTimeRangeProfiles

Lists time range profiles.

getRateLimitProfiles

Gets the list of available rate limit profiles for bandwidth control.

Tool

Description

setFirewallSetting

Updates site firewall settings with dry-run preview using the official Omada Open API firewall endpoint.

setAclConfigTypeSetting

Updates the gateway ACL mode (through profiles or custom) with dry-run preview.

createGatewayAcl

Creates a gateway ACL rule with dry-run preview using the official Omada Gateway ACL schema.

updateGatewayAcl

Updates a gateway ACL rule with dry-run preview after confirming the ACL exists.

createEapAcl

Creates an EAP ACL rule with dry-run preview using the official Omada EAP ACL schema.

updateEapAcl

Updates an EAP ACL rule with dry-run preview after confirming the ACL exists.

createSwitchAcl

Creates a switch (OSW) ACL rule with dry-run preview using the official Omada SwitchACLConfig schema.

updateSwitchAcl

Updates a switch (OSW) ACL rule with dry-run preview after confirming the ACL exists.

deleteAcl

Deletes an ACL rule with dry-run preview after confirming the ACL exists.

createDhcpReservation

Creates a DHCP reservation after validating the target LAN and optional IP address.

updateDhcpReservation

Updates a DHCP reservation after validating the target LAN and optional IP address.

deleteDhcpReservation

Deletes a DHCP reservation by MAC address with a dry-run preview option.

setBandwidthControlRule

Creates or updates a bandwidth control rule with dry-run preview after validating the target rule id plus referenced LAN and WAN identifiers.

deleteBandwidthControlRule

Deletes a bandwidth control rule with dry-run preview after confirming the rule exists.

setAccessControl

Updates portal access control settings with dry-run preview and schema validation for pre-auth and free-auth policy entries.

setAppControlRule

Creates or updates an application control rule with dry-run preview after validating the create/update payload shape, existing rule id, and referenced application ids.

deleteAppControlRule

Deletes an application control rule with dry-run preview after confirming the rule exists.


Firewall & ACL

802.1X authentication and RADIUS proxy settings.

Tool

Description

getDot1xConfig

Get 802.1X switch port authentication setting. Alias for getSwitchDot1xSetting.

getRadiusProxyConfig

Get global RADIUS proxy configuration (controller-level, no siteId).

getApplicationAcl

[DEPRECATED] Get application control rules. Alias for getAppControlRules.


Firewall Traffic & QoS

Traffic shaping, QoS policies, application control, URL filtering, and MAC filtering.

Tool

Description

getGatewayQosClassRules

Get gateway QoS class rules (paginated).

getBandwidthCtrlDetail

Get bandwidth control details for a site.

getAppControlRules

Get application control rules (paginated).

getAppControlCategories

Get application control category list.

getUrlFilterRules

Get URL filter gateway rules. Alias for getGridGatewayRule.

getUrlFilterBlacklist

Get URL filter MAC deny list. Alias for getGridDenyMacFiltering.

getUrlFilterWhitelist

Get URL filter MAC allow list. Alias for getGridAllowMacFiltering.

getMacFilterDetail

Get MAC filter general setting. Alias for getMacFilteringGeneralSetting.

getQosPolicy

Get QoS policy configuration for a site.

getTrafficPriority

Get traffic priority rules for a site.

getTrafficStats

[DEPRECATED] Use getDashboardTrafficActivities instead. Get WAN usage statistics. Alias for getWanUsageStats.

getQosPolicyRule

[DEPRECATED] Alias for getQosPolicy.

getQosMarkingRule

[DEPRECATED] Alias for getQosPolicy.

getDscpConfig

[DEPRECATED] Alias for getQosPolicy.


Firewall IDS / IPS

Intrusion detection and prevention system configuration.

Tool

Description

getGlobalSecuritySetting

[DEPRECATED] Use getThreatList instead. Get global security/threat management list. Alias for getThreatList.


Security & Threat Management

Global threat intelligence, IPS alerts, and top-threat summaries.

Tool

Description

getThreatList

Gets global threat management list. Required: archived (bool). Optional: startTime/endTime (seconds since epoch), severity (0=Critical, 1=Major, 2=Moderate/Concerning, 3=Minor, 4=Low), page, pageSize.

getTopThreats

Gets top threats from the global threat management view.


Composite Troubleshooting Tools

Single-call tools that internally aggregate multiple Omada API calls in parallel. Use these instead of chaining individual tools when you need a quick overview or are starting a troubleshooting session.

Tool

Description

getNetworkHealthSummary

Composite: combines dashboard overview (device/client counts), internet/WAN status, client distribution, and recent active threats into a single response. First call for any troubleshooting session.

getGatewayHealth

Composite: auto-discovers the gateway then fetches its detail (CPU, memory, firmware), WAN port statuses, LAN interface statuses, and port list in one call. Use for internet/WAN diagnostics.

diagnoseClient

Composite: given a client MAC, IP, or hostname — fetches current connection status, detailed client info (VLAN, signal, policy), and recent connection history in one call.

getSecurityOverview

Composite: combines active threat list (up to 20, newest first) and firewall settings into one response. Use for security posture checks or investigating alerts.


Dashboard / Monitor

Site dashboard widgets: WiFi and switch summaries, PoE usage, CPU/memory top-N, traffic activities, VPN tunnel stats, and RF analytics.

Tool

Description

getDashboardWifiSummary

Gets WiFi summary from the site dashboard.

getDashboardSwitchSummary

Gets switch summary from the site dashboard.

getDashboardTrafficActivities

Gets traffic activity data from the site dashboard.

getDashboardPoEUsage

Gets PoE usage data from the site dashboard.

getDashboardTopCpuUsage

Gets top CPU usage data from the site dashboard.

getDashboardTopMemoryUsage

Gets top memory usage data from the site dashboard.

getDashboardMostActiveSwitches

Gets most active switches from the site dashboard.

getDashboardMostActiveEaps

Gets most active access points from the site dashboard.

getDashboardOverview

Get the site overview: device counts, client counts, connectivity graph, and overall health status.

getTrafficDistribution

Gets traffic distribution by protocol/app type over a time range. Requires start and end timestamps (seconds).

getRetryAndDroppedRate

Gets wireless retry rate and dropped packet rate over a time range. Requires start and end timestamps (seconds).

getIspLoad

Gets per-WAN ISP link load over a time range. Requires start and end timestamps (seconds).

getChannels

Gets channel distribution and utilization across all APs.

getInterference

Gets top RF interference sources detected by APs.

getGridDashboardTunnelStats

Gets VPN tunnel statistics. Required: type (0 = Server, 1 = Client).

getGridDashboardIpsecTunnelStats

Gets IPsec tunnel statistics.

getGridDashboardOpenVpnTunnelStats

Gets OpenVPN tunnel statistics by type. Requires type parameter.


Insight

Site-level security insights: threat events, WIDS, rogue AP detection, and VPN tunnel stats.

Tool

Description

listSiteThreatManagement

Lists site-level threat management events.

getWids

Gets WIDS (Wireless Intrusion Detection) information for a site.

getRogueAps

Gets rogue access points detected in a site.

getVpnTunnelStats

Gets VPN tunnel statistics for a site.


VPN

Site-to-site and client-to-site VPN configuration, tunnel details, and user management.

Tool

Description

getIpsecTunnelList

List all site-to-site VPN (IPsec) tunnels. Alias for listSiteToSiteVpns.

getIpsecTunnelDetail

Get detailed config for a specific IPsec tunnel by ID. Alias for getSiteToSiteVpnInfo.

getAdvancedVpnSetting

Get advanced VPN configuration settings for a site. Alias for getVpnSettings.

getVpnUserList

Get VPN users for a site (paginated).

getVpnUserDetail

Get users for a specific client-to-site VPN server.

getVpnClientStatus

Get status of client-to-site VPN clients. Alias for listClientToSiteVpnClients.

getVpnRouteConfig

[DEPRECATED] Use getGridPolicyRouting instead. This tool aggregates all pages; getGridPolicyRouting is paginated.


Profiles

RADIUS, PPSK, service, QoS, schedule, group policy, VLAN, user role, and portal profiles.

Tool

Description

getGoogleLdapProfile

Get Google LDAP profile configuration for a site.

getBuiltinRadiusUsers

Get built-in RADIUS server user list (paginated).

getRadiusUserDetail

[DEPRECATED] Alias for getBuiltinRadiusUsers.

getPpskNetworkProfile

List PPSK network profiles for a site by type.

getPpskUserGroup

Get PPSK user group details for a specific profile.

getPpskUserList

[DEPRECATED] Alias for getPpskUserGroup.

getServiceProfile

Get service type profiles (paginated). Alias for listServiceType.

getQosProfile

Get rate limit profiles. Alias for getRateLimitProfiles.

getScheduleProfile

Get time range profiles. Alias for listTimeRangeProfiles.

getGroupPolicyDetail

Get group policy profiles filtered by group type.

getIpGroupProfile

[DEPRECATED] Get IP group profiles. Alias for getGroupPolicyDetail with groupType="0".

getUrlGroupProfile

[DEPRECATED] Get URL/port group profiles. Alias for getGroupPolicyDetail with groupType="1".

getAppGroupProfile

[DEPRECATED] Get MAC group profiles. Alias for getGroupPolicyDetail with groupType="2".

getVlanProfile

Get LAN/VLAN profiles. Alias for getLanProfileList.

getUserRoleProfile

Get user role profiles from the controller (global, no siteId).

getPortalProfile

Get captive portal profiles for a site.


Logs

Site-level and global event, alert, and audit logs.

Tool

Description

listSiteEvents

Lists site event logs.

listSiteAlerts

Lists site alert logs.

listSiteAuditLogs

Lists site audit logs.

listGlobalEvents

Lists global event logs across all sites.

listGlobalAlerts

Lists global alert logs across all sites.


Controller

Controller-level settings: certificates, ports, data retention, telemetry, and global dashboard.

Tool

Description

getCertificate

Get SSL/TLS certificate configuration for the controller.

getClientHistoryDataEnable

Get the client history data collection enable setting.

getControllerPort

Get the controller port configuration for device adoption.

getDataRetention

Get data retention settings for the controller.

getExperienceImprovement

Get the experience improvement program setting (telemetry).

getGlobalDashboardOverview

Get global controller dashboard overview without client data.

getPortalPort

Get portal port configuration for the controller web interface.


Maintenance

Controller and site backups, restores, and rogue AP exports.

Tool

Description

getBackupFileList

List available controller backup files.

getBackupResult

Get the result of the most recent controller backup operation.

getRestoreResult

Get the result of the most recent controller restore operation.

getSiteBackupFileList

List available backup files for a site.

getSiteBackupResult

Get the backup result for a site.

getRogueApExport

Export Rogue AP scan results for a site in CSV or Excel format.

Tool

Description

backupController

Trigger a controller configuration backup to the self/cloud server.

backupControllerToFileServer

Trigger a controller configuration backup to an external file server (FTP/SFTP).

restoreController

Restore controller configuration from a backup file on the self/cloud server.

restoreControllerFromFileServer

Restore controller configuration from a backup file on an external file server.

backupSites

Trigger a multi-site configuration backup to the self/cloud server (up to 300 sites).

backupSitesToFileServer

Trigger a multi-site configuration backup to an external file server (up to 300 sites).

restoreSites

Restore multiple site configurations from backup files on the self/cloud server.

restoreSitesFromFileServer

Restore multiple site configurations from backup files on an external file server.


Account Users

User and role management for the controller.

Tool

Description

getAllCloudUsers

List all cloud users on the controller, excluding the root account.

getAllLocalUsers

List all local users on the controller, excluding the root account.

getAllRoles

[DEPRECATED] Use getUserRoleProfile instead. List all user roles configured on the controller.

getAllUsersApp

List all users (cloud and local) in grid view.

getAvailableRoles

List roles available for user assignment.

getRoleDetail

Get detailed information about a specific role. Requires roleId.


Account Cloud

Cloud access, MFA, and remote binding status.

Tool

Description

getCloudAccessStatus

Get cloud access status for the controller.

getCloudUserInfo

Get cloud user account information.

getMfaStatus

Get global MFA (multi-factor authentication) status.

getRemoteBindingStatus

Get remote binding status between controller and cloud.


Schedules

PoE, port, reboot, and firmware upgrade schedules.

Tool

Description

getPoeScheduleList

List PoE schedules for a site.

getPortScheduleList

List port schedules for a site.

getPortSchedulePorts

List ports with port schedule assignments for a site.

getRebootScheduleList

List device reboot schedules for a site template. Requires siteTemplateId.

getUpgradeScheduleList

List firmware upgrade schedules for a site.


Operation ID

Description

Tool

getSiteList

List controller sites.

listSites

getDeviceList

List devices assigned to a site.

listDevices, getDevice [DEPRECATED]

searchGlobalDevice

Search for devices across all accessible sites.

searchDevices

getGridAdoptedDevicesStatByGlobal

Query statistics for global adopted devices.

listDevicesStats

getOswStackDetail

Retrieve details for a switch stack.

getSwitchStackDetail

getSwitch

Get detailed info for a specific switch.

getSwitchDetail

getGateway

Get detailed info for a specific gateway.

getGatewayDetail

getGatewayWanPortStatus

Get WAN port status for a specific gateway.

getGatewayWanStatus

getGatewayLanPortStatus

Get LAN port status for a specific gateway.

getGatewayLanStatus

getGatewayPorts

Get port info for a specific gateway.

getGatewayPorts

getAp

Get detailed info for a specific access point.

getApDetail

getApRadios

Get radio info for a specific access point.

getApRadios

getStackPorts

Get port info for a switch stack.

getStackPorts

getGridPendingDevices

List devices pending adoption in a site.

listPendingDevices

getGridActiveClients

List active clients connected to a site.

listClients, getClient [DEPRECATED]

getMostActiveClients

Get most active clients sorted by traffic.

listMostActiveClients

getClientActivity

Get client activity statistics over time.

listClientsActivity

getGridPastConnections

Get client past connection history.

listClientsPastConnections

updateClientRateLimitSetting

Set rate limit setting for a client.

setClientRateLimit, setClientRateLimitProfile, disableClientRateLimit

getRateLimitProfileList

Get rate limit profile list.

getRateLimitProfiles

getGlobalThreatList

Get global view threat management list.

getThreatList

getTopThreatList

Get top threats from global threat management.

getTopThreats

getInternet

[DEPRECATED] Use getInternetInfo instead. Get internet configuration info for a site.

getInternetInfo

getPortForwardStatus

Get port forwarding status by type.

getPortForwardingStatus

getLanProfileList

Get LAN profile list.

getLanProfileList

getWlanGroupList

Get WLAN group list.

getWlanGroupList

getSsidList

Get SSID list for a WLAN group.

getSsidList

getSsidDetail

Get detailed SSID configuration.

getSsidDetail

getSsidListAll

List SSIDs across all WLAN groups.

listAllSsids

getFirewallSetting

Get the site-global firewall settings returned by the official Omada firewall endpoint.

getFirewallSetting

modifyFirewallSetting

Update site firewall settings with dry-run support.

setFirewallSetting

getVpn

Get VPN settings for a site.

getVpnSettings

getSiteToSiteVpnList

List site-to-site VPN configurations.

listSiteToSiteVpns

getPortForwardingList

List NAT port forwarding rules.

getPortForwardingList (prefer); listPortForwardingRules [DEPRECATED]

getOsgAclList

List gateway ACL rules.

listOsgAcls

getAclConfigTypeSetting

Get gateway ACL config mode for the site gateway.

getAclConfigTypeSetting

modifyAclConfigTypeSetting

Update gateway ACL config mode with dry-run support.

setAclConfigTypeSetting

createOsgAcl

Create a gateway ACL with dry-run support.

createGatewayAcl

modifyOsgAcl

Update a gateway ACL with dry-run support.

updateGatewayAcl

getEapAclList

List access point ACL rules.

listEapAcls

createEapAcl

Create an EAP ACL with dry-run support.

createEapAcl

modifyEapAcl

Update an EAP ACL with dry-run support.

updateEapAcl

getOswAclList

List switch ACL rules.

getOswAclList

createOswAcl

Create a switch ACL with dry-run support.

createSwitchAcl

modifyOswAcl

Update a switch ACL with dry-run support.

updateSwitchAcl

deleteAcl

Delete an ACL rule with dry-run support.

deleteAcl

getStaticRoutingList

List static routing rules.

getGridStaticRouting (prefer); listStaticRoutes [DEPRECATED]

getRadiusProfileList

List RADIUS authentication profiles.

listRadiusProfiles

getGroupProfileList

List group profiles (IP, MAC, port groups).

listGroupProfiles

getApplicationControlStatus

Get application control status for a site.

getApplicationControlStatus

addRule

Create an application control rule with dry-run support.

setAppControlRule

editRule

Update an application control rule with dry-run support.

setAppControlRule

deleteRules

Delete an application control rule with dry-run support.

deleteAppControlRule

getSshSetting

Get SSH settings for a site.

getSshSetting

getTimeRangeProfileList

List time range profiles.

listTimeRangeProfiles

getWanLanStatus

Get WAN-LAN connectivity status for a site.

getWanLanStatus

getSiteThreatManagementList

List site-level threat management events.

listSiteThreatManagement

getWids

Get WIDS information for a site.

getWids

getRogueAps

Get rogue access points detected in a site.

getRogueAps

getVpnTunnelStats

Get VPN tunnel statistics for a site.

getVpnTunnelStats

getSiteEvents

List site event logs.

listSiteEvents

getSiteAlerts

List site alert logs.

listSiteAlerts

getSiteAuditLogs

List site audit logs.

listSiteAuditLogs

getEvents

List global event logs across all sites.

listGlobalEvents

getAlerts

List global alert logs across all sites.

listGlobalAlerts

disableClientRateLimit

Disable rate limiting for a specific client, removing any bandwidth....

disableClientRateLimit

getAccessControl

Get controller access control configuration.

getAccessControl

modifyAccessControl

Update portal access control configuration with dry-run support.

setAccessControl

getAlg

Get ALG (Application Layer Gateway) configuration for the site gateway.

getAlg

getAllDeviceBySite

Get all devices in a site including offline and disconnected devices.

getAllDeviceBySite

getApDetail

Fetch full configuration and status for a specific access point: mo....

getApDetail

getApGeneralConfig

Get general configuration for an access point.

getApGeneralConfig

getApLldpConfig

Get LLDP (Link Layer Discovery Protocol) configuration for an acces....

getApLldpConfig

getApRadios

Get radio status for a specific access point: 2.4GHz and 5GHz band ....

getApRadios

getApSnmpConfig

Get SNMP configuration for an access point.

getApSnmpConfig

getApUplinkConfig

Get the uplink configuration for an access point.

getApUplinkConfig

getBandwidthControl

Get the global bandwidth control configuration for the site.

getBandwidthControl

getCableTestLogs

Get cable test logs for a switch.

getCableTestLogs

getChannels

Get channel distribution and utilization across all APs.

getChannels

getClient

[DEPRECATED] Use listClients instead. When you have a client MAC, getClientDetail is also available. This tool filters the site client list in-process.

getClient

getDashboardPoEUsage

Get PoE (Power over Ethernet) usage statistics for a site, showing ....

getDashboardPoEUsage

getDashboardSwitchSummary

Get switch summary for a site dashboard: total switch count, total ....

getDashboardSwitchSummary

getDashboardTopCpuUsage

Get the top devices by CPU usage for a site, useful for identifying....

getDashboardTopCpuUsage

getDashboardWifiSummary

Get WiFi summary for a site dashboard: total APs, connected AP coun....

getDashboardWifiSummary

getDdnsGrid

Get DDNS (Dynamic DNS) entries for the site gateway.

getDdnsGrid

getDevice

[DEPRECATED] Use listDevices instead. This alias filters the device list in-process to return a single device; there is no separate device-detail API.

getDevice

getDhcpReservationGrid

Get DHCP reservations for the site.

getDhcpReservationGrid

createDhcpReservation

Create a DHCP reservation for the site after LAN/IP validation and duplicate-IP preflight.

createDhcpReservation

updateSitesSettingServiceDhcp

Update an existing DHCP reservation for the site.

updateDhcpReservation

deleteSitesSettingServiceDhcp

Delete an existing DHCP reservation for the site.

deleteDhcpReservation

getDnsCacheSetting

Get DNS cache setting for the site gateway.

getDnsCacheSetting

getDnsProxy

Get DNS proxy configuration for the site gateway.

getDnsProxy

getFirewallSetting

Get the site-global firewall settings returned by the official Omada firewall endpoint.

getFirewallSetting

modifyFirewallSetting

Update site firewall settings with dry-run support.

setFirewallSetting

getFirmwareInfo

Get the latest available firmware information for a device.

getFirmwareInfo

getGatewayDetail

Fetch full configuration and status for a specific gateway: model, ....

getGatewayDetail

getGatewayLanStatus

Get LAN port status for a specific gateway: port link state, speed,....

getGatewayLanStatus

getGatewayPorts

Get all WAN and LAN port details for a specific gateway: link statu....

getGatewayPorts

getGatewayWanStatus

Get the WAN port status and connectivity information for a specific....

getGatewayWanStatus

getGridBandwidthCtrlRule

Get bandwidth control rules for the site gateway.

getGridBandwidthCtrlRule

createBandwidthCtrlRule

Create a bandwidth control rule with dry-run support.

setBandwidthControlRule

modifyBandwidthCtrlRule

Update a bandwidth control rule with dry-run support.

setBandwidthControlRule

deleteBandwidthCtrlRule

Delete a bandwidth control rule with dry-run support.

deleteBandwidthControlRule

getGridIpMacBinding

Get IP-MAC binding entries for the site.

getGridIpMacBinding

getGridOtoNats

Get 1:1 NAT rules for the site gateway.

getGridOtoNats

getGridPolicyRouting

Get policy routing rules for the site gateway.

getGridPolicyRouting

getGridSessionLimitRule

Get per-rule session limit rules for the site gateway.

getGridSessionLimitRule

getGridVirtualWan

Get virtual WAN list for the site gateway.

getGridVirtualWan

getIgmp

Get IGMP (Internet Group Management Protocol) setting for the site.

getIgmp

getInterfaceLanNetwork

Get interface-level LAN network bindings.

getInterfaceLanNetwork

getInterference

Get top RF interference sources detected by APs.

getInterference

getInternet

[DEPRECATED] Use getInternetInfo instead. Get full WAN/Internet configuration for the site gateway.

getInternet

getInternetBasicPortInfo

Get WAN port summary / basic info for the site gateway.

getInternetBasicPortInfo

getInternetInfo

Get internet configuration information for a site, including WAN se....

getInternetInfo

getInternetLoadBalance

Get WAN load balancing configuration for the site gateway.

getInternetLoadBalance

getIspBandScan

Get ISP band scan results for a WAN port. Requires portUuid.

getIspBandScan

getIspLoad

Get per-WAN ISP link load over a time range.

getIspLoad

getLanClientCount

Get client distribution breakdown across LAN segments (wired, wireless, guest).

getLanClientCount

getLanDnsRules

Get LAN DNS rules configured for the site (paginated).

getLanDnsRules

getLanNetworkList

[DEPRECATED] Use getLanNetworkListV2 instead. This tool aggregates all pages; getLanNetworkListV2 is explicitly paginated.

getLanNetworkList

getLanProfileEsUsage

Get EAP/switch device usage for a specific LAN profile. Requires profileId.

getLanProfileEsUsage

getLanProfileList

Get the list of LAN profiles configured in a site.

getLanProfileList

getLtePortConfig

Get LTE/cellular WAN port configuration for the site gateway.

getLtePortConfig

getLldpSetting

Get LLDP (Link Layer Discovery Protocol) global setting for the site.

getLldpSetting

getMeshStatistics

Get mesh link statistics for an access point.

getMeshStatistics

getOswStackLagList

Get Link Aggregation Group (LAG) list for a switch stack.

getOswStackLagList

getPortForwardingList

Get a paginated page of NAT port forwarding rules for the site gateway.

getPortForwardingListPage

getPortForwardingStatus

Get port forwarding status and rules for a site.

getPortForwardingStatus

getRFScanResult

[DEPRECATED] Get the last RF scan results for an access point.

getRFScanResult

getRadiosConfig

Get per-radio configuration for an access point.

getRadiosConfig

getRateLimitProfiles

Get the list of available rate limit profiles for a site.

getRateLimitProfiles

getRemoteLoggingSetting

Get remote logging (syslog) configuration for the site.

getRemoteLoggingSetting

getDnsCacheDataList

Get the DNS cache data list for the site (paginated).

getDnsCacheDataList

getDisableNatList

Get the list of wired networks with NAT disabled (paginated).

getDisableNatList

getIptvSetting

Get IPTV service configuration for the site.

getIptvSetting

getNtpSetting

Get NTP server configuration and synchronisation status for the site.

getNtpSetting

getOspfInterface

Get OSPF interface configuration for the site gateway.

getOspfInterface

getOspfNeighbors

Get OSPF neighbor devices for the site gateway.

getOspfNeighbors

getOspfProcess

Get OSPF process configuration for the site gateway.

getOspfProcess

getSwitchVlanInterface

Get VLAN interface configuration for a specific switch. Requires switchMac.

getSwitchVlanInterface

getSyslogConfig

[DEPRECATED] Alias of getRemoteLogging for controller syslog configuration.

getSyslogConfig

getVrrpConfig

Get VRRP configuration for OSW devices on the site.

getVrrpConfig

getWanHealthDetail

[DEPRECATED] Alias for the WAN health tool; kept for backward compatibility. Requires gatewayMac.

getWanHealthDetail

getWanIspProfile

Get ISP scan profile result for a WAN port. Requires portUuid.

getWanIspProfile

getWanNatConfig

Get one-to-one NAT configuration (WAN NAT rules) for the site gateway (paginated).

getWanNatConfig

getWanPortDetail

[DEPRECATED] Use getWanPortsConfig instead. Get detailed WAN port configuration for all gateway WAN ports on the site.

getWanPortDetail

getWanQosConfig

Get QoS configuration for gateway WAN ports on the site.

getWanQosConfig

getWanUsageStats

[DEPRECATED] Use getDashboardTrafficActivities instead. Get WAN traffic usage statistics and activity data for the site.

getWanUsageStats

getRetryAndDroppedRate

Get wireless retry rate and dropped packet rate over a time range.

getRetryAndDroppedRate

getRogueAps

Get the list of rogue (unauthorized) access points detected by WIDS....

getRogueAps

getSessionLimit

Get the session limit global setting for the site gateway.

getSessionLimit

getSnmpSetting

Get SNMP configuration for the site.

getSnmpSetting

getSpeedTestResults

Get the last speed test results for an access point.

getSpeedTestResults

getSitesApsChannelLimit

Get AP channel-limit configuration.

getSitesApsChannelLimit

updateSitesApsChannelLimit

Update AP channel-limit configuration with dry-run support.

setApChannelLimit

modifyGeneralConfig_2

Update AP general configuration with dry-run support.

setApConfig

modifyIpSettingConfig

Update AP IP settings with dry-run support.

setApConfig

modifyIpv6SettingConfig

Update AP IPv6 settings with dry-run support.

setApConfig

modifyApQosConfig

Update AP QoS settings with dry-run support.

setApConfig

modifyRadiosConfig

Update AP radio settings with dry-run support.

setApConfig

modifyApServicesConfig

Update AP service settings with dry-run support.

setApConfig

modifyApLoadBalanceConfig

Update AP load-balance settings with dry-run support.

setApConfig

modifyApOfdmaConfig

Update AP OFDMA settings with dry-run support.

setApConfig

getSitesApsPowerSaving

Get AP power saving configuration.

getSitesApsPowerSaving

updateSitesApsPowerSaving

Update AP power saving configuration with dry-run support.

setApPowerSaving

modifyApTrunkSettingConfig

Update AP trunk settings with dry-run support.

setApConfig

modifyApBridgeInfo

Update AP bridge settings with dry-run support.

setApConfig

modifyApPort

Update AP port settings with dry-run support.

setApConfig

modifyApChannelConfig

Update AP channel configuration with dry-run support.

setApConfig

modifyAfcConfig

Update AP AFC configuration with dry-run support.

setApConfig

modifyAntennaGainConfig

Update AP antenna gain settings with dry-run support.

setApConfig

updateWlanGroupConfig

Update AP WLAN group assignment with dry-run support.

setApConfig

modifyGeneralConfig_1

Update gateway general configuration with dry-run support.

setGatewayConfig

modifyConfigGeneral

Update gateway config/general settings with dry-run support.

setGatewayConfig

modifyConfigServices

Update gateway services configuration with dry-run support.

setGatewayConfig

modifyConfigAdvanced

Update gateway advanced settings with dry-run support.

setGatewayConfig

modifyConfigRadios

Update gateway radio configuration with dry-run support.

setGatewayConfig

modifyConfigWlans

Update gateway WLAN configuration with dry-run support.

setGatewayConfig

modifyPortConfig

Update a gateway port configuration with dry-run support.

setGatewayConfig

batchModifyPortConfig

Update multiple gateway ports with dry-run support.

setGatewayConfig

getSshSetting

Get SSH access settings for a site.

getSshSetting

getSsidDetail

Get detailed information for a specific SSID (wireless network), in....

getSsidDetail

getSsidList

Get the list of SSIDs (wireless networks) configured in a WLAN group.

getSsidList

getStackNetworkList

Get the VLAN network list for a switch stack.

getStackNetworkList

getStackPorts

Get all port information for a switch stack.

getStackPorts

getSwitchDetail

Fetch full configuration and status for a specific switch: model, f....

getSwitchDetail

getSwitchStackDetail

Fetch detailed information for a specific switch stack.

getSwitchStackDetail

getThreatList

Get the global view threat management list.

getThreatList

getTopThreats

Get the top threats from the global threat management view across a....

getTopThreats

getTrafficDistribution

Get traffic distribution by protocol and application type over a ti....

getTrafficDistribution

getUpnpSetting

Get UPnP (Universal Plug and Play) setting for the site.

getUpnpSetting

getVpnSettings

Get VPN configuration settings for a site.

getVpnSettings

getVpnTunnelStats

Get VPN tunnel statistics for a site (paginated), including active ....

getVpnTunnelStats

getWanLanStatus

Get the WAN and LAN connectivity status for a site.

getWanLanStatus

getWanPortsConfig

Get WAN port settings for the site gateway.

getWanPortsConfig

getWids

Get Wireless Intrusion Detection System (WIDS) information for a si....

getWids

getWlanGroupList

Get the list of WLAN groups configured in a site.

getWlanGroupList

listAllSsids

List all wireless SSIDs across all WLAN groups in a site: SSID name....

listAllSsids

listClients

List all network clients (wired and wireless) connected to a site.

listClients

listClientsActivity

Get client activity statistics over time from the dashboard.

listClientsActivity

listClientsPastConnections

Get client past connection list with historical connection data.

listClientsPastConnections

listDevices

List all provisioned (adopted) network devices in a site: gateways,....

listDevices

listEapAcls

List EAP (access point) ACL rules for a site: wireless client acces....

listEapAcls

listGlobalAlerts

List alert logs across all sites on the controller: threshold breac....

listGlobalAlerts

listGlobalEvents

List system event logs across all sites on the controller.

listGlobalEvents

listGroupProfiles

List group profiles (IP groups, MAC groups, port groups) configured....

listGroupProfiles

listMostActiveClients

Get the most active clients in a site, sorted by total traffic.

listMostActiveClients

listOsgAcls

List gateway (OSG) ACL rules for a site: firewall rules controlling....

listOsgAcls

listPendingDevices

List devices discovered on the network but not yet adopted into thi....

listPendingDevices

listPolicyRoutes

[DEPRECATED] Use getGridPolicyRouting instead. This tool aggregates all pages; getGridPolicyRouting is paginated.

listPolicyRoutes

listPortForwardingRules

[DEPRECATED] Use getPortForwardingList instead. List all NAT port forwarding rules for a site: external port, inter....

listPortForwardingRules

listRadiusProfiles

List RADIUS authentication profiles configured for a site: server I....

listRadiusProfiles

listSiteAlerts

List alert logs for a site: threshold breaches, device failures, se....

listSiteAlerts

listSiteAuditLogs

List admin audit logs for a site: who made what configuration chang....

listSiteAuditLogs

listSiteEvents

List system event logs for a site: device online/offline, client co....

listSiteEvents

listSiteThreatManagement

List site-level threat management events detected by IPS, with opti....

listSiteThreatManagement

listSiteToSiteVpns

List site-to-site VPN configurations: tunnel name, remote IP, statu....

listSiteToSiteVpns

listSites

List all sites configured on the Omada controller.

listSites

listStaticRoutes

[DEPRECATED] Use getGridStaticRouting instead. This tool aggregates all pages; getGridStaticRouting returns a single paginated page.

listStaticRoutes

listSwitchNetworks

List VLAN network assignments for a switch.

listSwitchNetworks

listTimeRangeProfiles

List time range profiles configured for a site.

listTimeRangeProfiles

searchDevices

Search for devices globally across all sites the user has access to.

searchDevices

setClientRateLimit

Set custom rate limit (bandwidth control) for a specific client.

setClientRateLimit

getAclConfigTypeSetting

Get the ACL configuration type setting for the site gateway (L2 or ....

getAclConfigTypeSetting

getAttackDefenseSetting

Get the DDoS and attack defense configuration, including flood prot....

getAttackDefenseSetting

getAuditLogSettingForGlobal

Get global audit log notification settings for the controller.

getAuditLogSettingForGlobal

getAuditLogSettingForSite

Get site-level audit log notification settings, including audit eve....

getAuditLogSettingForSite

getAuditLogsForGlobal

Get global audit logs (paginated).

getAuditLogsForGlobal

getBandSteeringSetting

Get the band steering configuration.

getBandSteeringSetting

getBandwidthCtrl

[DEPRECATED] Use getBandwidthControl instead. Get the global bandwidth control configuration for the site.

getBandwidthControl

getBeaconControlSetting

Get the beacon control setting, which manages 802.11 beacon transmi....

getBeaconControlSetting

getChannelLimitSetting

[DEPRECATED] Get the channel limit setting that restricts which cha....

getChannelLimitSetting

getClientActiveTimeout

Get the client inactivity timeout setting.

getClientActiveTimeout

getClientDetail

Get full detail for a specific client by MAC address, including con....

getClientDetail

getClientToSiteVpnServerInfo

Get detailed configuration for a specific client-to-site VPN server....

getClientToSiteVpnServerInfo

getClientsDistribution

Get client count distribution by connection type and band (wired, 2....

getClientsDistribution

getControllerStatus

Get the Omada controller health and status, including running state....

getControllerStatus

getDeviceAccessManagement

Get the device access management settings, controlling which device....

getDeviceAccessManagement

getEapDot1xSetting

Get the 802.1X EAP setting for access points, controlling port-base....

—

getGeneralSettings

Get the global general settings for the Omada controller, including....

getGeneralSettings

getGridAllowList

Get the IPS allow list (paginated).

getGridAllowList

getGridAllowMacFiltering

Get the MAC address allow-list entries (paginated).

getGridAllowMacFiltering

getGridBlockList

Get the IPS block list (paginated).

getGridBlockList

getGridClientHistory

Get per-client connection history (paginated).

getGridClientHistory

getGridDenyMacFiltering

Get the MAC address deny-list entries (paginated).

getGridDenyMacFiltering

getGridEapRule

Get the URL filter AP rules (paginated).

getGridEapRule

getGridGatewayRule

Get the URL filter gateway rules (paginated).

getGridGatewayRule

getGridIpsecFailover

Get IPsec failover configuration (paginated).

getGridIpsecFailover

getGridKnownClients

Get historical known clients list (paginated).

getGridKnownClients

getGridSignature

Get the IPS signature list (paginated).

getGridSignature

getGridStaticRouting

Get static routing rules for the site gateway with explicit pagination.

getGridStaticRouting

getGroupProfilesByType

Get group profiles filtered by type (e.g.

getGroupProfilesByType

getIpsConfig

Get the IPS (Intrusion Prevention System) global configuration, inc....

getIpsConfig

getIpsecVpnStats

Get IPsec VPN tunnel statistics for a site (paginated), including a....

getIpsecVpnStats

getLdapProfileList

List all LDAP authentication profiles configured on the site.

getLdapProfileList

getLogSettingForGlobal

Get global log notification settings (v1), including global alert r....

getLogSettingForGlobal

getLogSettingForGlobalV2

Get global log notification settings (v2), with extended notificati....

—

getLogSettingForSite

Get site-level log notification settings (v1), including alert reci....

getLogSettingForSite

getLogSettingForSiteV2

Get site-level log notification settings (v2), with extended notifi....

—

getLogging

Get the controller logging configuration, including log levels and ....

getLogging

getMacAuthSetting

Get the MAC authentication global setting.

getMacAuthSetting

getMacAuthSsids

Get per-SSID MAC authentication settings showing which SSIDs have M....

getMacAuthSsids

getMacFilteringGeneralSetting

Get the MAC filtering global setting.

getMacFilteringGeneralSetting

getMailServerStatus

Get the mail server connection status for the controller.

getMailServerStatus

getMeshSetting

Get the mesh networking configuration including mesh topology mode ....

getMeshSetting

getOsgCustomAclList

Get the custom gateway ACL rules list (paginated).

getOsgCustomAclList

getOswAclList

Get the switch ACL list (paginated).

getOswAclList

getOuiProfileList

Get the OUI-based device profile list (paginated).

getOuiProfileList

getPPSKProfiles

List Private PSK (PPSK) profiles for the site by type.

getPPSKProfiles

getPastClientNum

Get historical client count trend over a time range.

getPastClientNum

getRadioFrequencyPlanningConfig

Get the RF planning configuration for the site, including frequency....

getRadioFrequencyPlanningConfig

getRadioFrequencyPlanningResult

Get the RF planning result for the site.

getRadioFrequencyPlanningResult

getRadiusServer

Get the global RADIUS server configuration for the controller.

getRadiusServer

getRadiusUserList

List local RADIUS server users (paginated).

getRadiusUserList

getRemoteLogging

Get the global syslog/remote logging configuration, including syslo....

getRemoteLogging

getRetention

Get the data retention configuration for the controller, including ....

getRetention

getRoamingSetting

Get the client roaming configuration, including 802.11r/k/v setting....

getRoamingSetting

getRoutingTable

Get the live routing table for a site filtered by type.

getRoutingTable

getServiceTypeSummary

Get a summary of service type profiles for the site, including pred....

getServiceTypeSummary

getSiteToSiteVpnInfo

Get detailed information about a specific site-to-site VPN by ID, i....

getSiteToSiteVpnInfo

getSsidsBySite

Get a flat SSID list filtered by device type.

getSsidsBySite

getSslVpnServerSetting

Get the SSL VPN server configuration, including port, protocol, and....

getSslVpnServerSetting

getSwitchDot1xSetting

Get the 802.1X switch port authentication setting.

—

getThreatCount

Get the global threat count grouped by severity level (critical, hi....

getThreatSeverity

getThreatDetail

Get detailed information about a specific IPS threat event by its ID.

getThreatDetail

getUiInterface

Get the UI interface settings for the controller, including timeout....

getUiInterface

getUrlFilterGeneral

Get the URL filter global setting, including whether URL filtering ....

getUrlFilterGeneral

getWebhookForGlobal

Get the global webhook notification settings, including webhook URL....

getWebhookForGlobal

getWebhookLogsForGlobal

Get webhook dispatch logs (paginated).

getWebhookLogsForGlobal

getWidsBlacklist

Get the WIPS (Wireless Intrusion Prevention System) rogue AP blackl....

getWidsBlacklist

getWireguardSummary

Get a summary of WireGuard VPN configurations for the site, includi....

getWireguardSummary

listClientToSiteVpnClients

List all client-to-site VPN client configurations on the site.

listClientToSiteVpnClients

listClientToSiteVpnServers

List all client-to-site VPN server configurations on the site, incl....

listClientToSiteVpnServers

listDevicesStats

Query statistics for global adopted devices with pagination and fil....

listDevicesStats

listMdnsProfile

List all Bonjour/mDNS service profiles configured on the site for c....

listMdnsProfile

listServiceType

List service type profiles (paginated).

listServiceType

listWireguard

List WireGuard VPN tunnels (paginated).

listWireguard

listWireguardPeers

List WireGuard peers (paginated).

listWireguardPeers

getDashboardMostActiveEaps

Get the most active access points from the site dashboard by traffic.

getDashboardMostActiveEaps

getDashboardTopMemoryUsage

Get top memory usage data for devices from the site dashboard.

getDashboardTopMemoryUsage

getDashboardTrafficActivities

Get traffic activity data and throughput summary from the site dashboard.

getDashboardTrafficActivities

getGridDashboardTunnelStats

Get VPN tunnel statistics for the grid dashboard view.

getGridDashboardTunnelStats

setClientRateLimitProfile

Apply a predefined rate limit profile to a specific client.

setClientRateLimitProfile

getGatewayQosClassRules

Get gateway QoS class rules (paginated).

getGatewayQosClassRules

getBandwidthCtrlDetail

Get bandwidth control details for a site.

getBandwidthCtrlDetail

getAppControlRules

Get application control rules (paginated).

getAppControlRules

getAppControlCategories

Get application control category list.

getAppControlCategories

getQosPolicy

Get QoS policy configuration for a site.

getQosPolicy

getTrafficPriority

Get traffic priority rules for a site.

getTrafficPriority

getVpnUserList

Get VPN users for a site (paginated).

getVpnUserList

getVpnUserDetail

Get users for a specific client-to-site VPN server by ID.

getVpnUserDetail

getGoogleLdapProfile

Get Google LDAP profile configuration for a site.

getGoogleLdapProfile

getPpskUserGroup

Get PPSK user group details for a specific profile ID.

getPpskUserGroup

getPortalProfile

Get captive portal profiles for a site.

getPortalProfile

getUserRoleProfile

Get user role profiles from the controller (global).

getUserRoleProfile

getRadiusProxyConfig

Get global RADIUS proxy configuration (controller-level).

getRadiusProxyConfig

getSiteEntity

Get site detail.

getSiteDetail

getSiteUrlByOpenApi

Get site URL.

getSiteUrl

getNtpServerStatus

Get NTP server status for a site.

getSiteNtpStatus

getSiteSpecification

Get site specification.

getSiteSpecification

getSiteRememberSettingByOpenApi

Get site remember device setting.

getSiteRememberSetting

getSiteDeviceAccountSetting

Get site device account setting.

getSiteDeviceAccount

getSiteSettingCap

Get site capacity setting.

getSiteCapacity

getSiteTemplateList

List site templates.

getSiteTemplateList

getSiteTemplateEntity

Get site template detail.

getSiteTemplateDetail

getSiteTemplateConfiguration

Get site template configuration.

getSiteTemplateConfig

getDataRetention

Get data retention settings.

getDataRetention

getControllerPort

Get controller port setting.

getControllerPort

getPortalPort

Get portal port setting.

getPortalPort

getCertificate

Get certificate configuration.

getCertificate

getExpImprove

Get experience improvement setting.

getExperienceImprovement

getGernalSettings_1

Get global dashboard overview without client data.

getGlobalDashboardOverview

getClientHistoryDataEnable

Get client history data enable setting.

getClientHistoryDataEnable

getSelfServerFileList

List controller backup files.

getBackupFileList

getBackupResult

Get controller backup result.

getBackupResult

getRestoreResult

Get controller restore result.

getRestoreResult

getSiteBackupResult

Get site backup result.

getSiteBackupResult

getSelfServerSiteFileList

List site backup files.

getSiteBackupFileList

getAllCloudUsersExcludeRoot

List all cloud users excluding root.

getAllCloudUsers

getAllLocalUsersExcludeRoot

List all local users excluding root.

getAllLocalUsers

getAllRoles

[DEPRECATED] Use getUserRoleProfile instead. List all roles.

getAllRoles

getRole

Get role detail.

getRoleDetail

getAvailableRole

List available roles.

getAvailableRoles

getAppGridUsers

List all users in app grid view.

getAllUsersApp

getCloudAccessStatus

Get cloud access status.

getCloudAccessStatus

getCloudUserInfo

Get cloud user info.

getCloudUserInfo

getGlobalMFAStatus

Get global MFA status.

getMfaStatus

getRemoteBindingStatus

Get remote binding status.

getRemoteBindingStatus

getUpgradeScheduleList

List upgrade schedules for a site.

getUpgradeScheduleList

getRebootScheduleList_1

List reboot schedules for a site template.

getRebootScheduleList

getPoeScheduleList

List PoE schedules for a site.

getPoeScheduleList

getPortScheduleList

List port schedules for a site.

getPortScheduleList

getPortSchedulePorts

List ports with port schedules.

getPortSchedulePorts

getMulticastRateLimitByOpenApi

Get multicast rate limit setting.

getMulticastRateLimit

getApLoadBalanceConfig

Get AP load balance configuration.

getApLoadBalance

getApOfdmaConfig

[DEPRECATED] Use getSitesApsOfdma instead. Same endpoint, retained for backward compatibility. getSitesApsOfdma is the canonical tool name.

getApOfdmaConfig

Credits

This project stands on the work of the authors below. Licenses and copyright lines are in NOTICE.md; the full survey is in docs/COMPARISON.md.

Repository

Author

License

What we took

gaspareduard/Omada-mcp

gaspareduard

MIT

Base project (code): safety model, capability profiles, catalog, tools, tests, CI

MiguelTVMS/tplink-omada-mcp

João Miguel Tabosa Vaz Marques Silva

MIT

Code via the base: original tool surface and registry pattern

realtydev/omada-mcp

Alex Gibson (realtydev)

MIT

Code ported: write tools (port forwards, routes, WAN, IPS and others), getServerInfo, re-verified against the spec

aljopro/tplink-omada-mcp

aljopro

MIT

Code ported: adoptDevice, setSiteLed, LAN writes; spec-validation idea

Zesty0wl/omada-mcp

Zesty0wl

MIT

Code ported (re-implemented on Open API routes): PoE and reboot schedules

daniel-k/omada-mcp

daniel-k

MIT

Code ported: RF planning, SSID sections, log and notification writes

ChenyqThu/omada-skill

Chen Yuanquan

MIT

Skills: five skills adapted and rewritten for this server

kaviththiranga/omada-mcp-server

Kavith Lokuhewage

MIT

Skills: roaming/DFS knowledge as omada-roaming-dfs

dfla-me/omada-mcp

dfla-me

MIT

Idea only: whole-object edits and override detection in omada-safe-change

margosmark/omada-mcp

Mark Arslan

MIT

Idea only: controller quirks and data-honesty rules; certificate pinning planned

samhaque/omada-controller-mcp

samhaque

MIT

Idea only: search/describe catalog pattern, HTTP hardening ideas

samhaque/nooa-omada-agent

samhaque

Apache-2.0

Idea only: triage -> investigate pattern

thalisantunes/mcp-omada

thalisantunes

Apache-2.0

Idea only: write-guard and audit design, hardware quirks (in skills)

ricardo-david-francisco/WhiteOmadaMcp-public

ricardo-david-francisco

MIT

Idea only: encodings, error-code table and hardware findings (in skills)

sirfyyn/fyos-plugin-betrieb

sirfyyn

Apache-2.0

Idea only: read-only facade for autonomous agents

mballoni/omada-controller-mcp

mballoni

GPL-3.0-only

Idea only: fixed scoring rubric with baseline, re-designed independently for omada-network-audit; no GPL text or code included

RonaldPhilipsen/omada-mcp

RonaldPhilipsen

none

Idea only: registration-time gating, spec-hash pinning; no code (no license)

jkohen/omada-mcp

jkohen

none

Rejected: no license file, nothing copied

wonjo-linc/MCP-Omada

wonjo-linc

none

Rejected: no license file, nothing copied

kohlsalem/omada-mcp

kohlsalem

none

Rejected: no license; nothing beyond existing reads

OmadaIdentity/omada-mcp-server

Omada A/S

Omada Technology Preview License

Excluded: Omada Identity product, unrelated to TP-Link

walkerpauldavid/omadaidentitymcpserver

walkerpauldavid

none found

Excluded: Omada Identity product, unrelated to TP-Link

bforejt/omada-composer

bforejt

none

Excluded: empty repository

Devcontainer support

The repository includes a ready-to-use devcontainer configuration with a dedicated Omada controller sidecar for local development and testing. See .devcontainer/README.md for details.

License

This project is licensed under the MIT License.

Available Tools

113 tools
describeOperationA
Read-only

Get the exact argument schema and permission for an enabled tool. Unavailable tools cannot be inspected or executed.

NameRequiredDescriptionDefault
nameYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with them. It adds real value beyond the annotations by disclosing the enabled-only restriction and that unavailable tools cannot be inspected, which an agent needs before calling.

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

Conciseness5/5

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

Two short sentences with no filler; the capability is front-loaded and the constraint follows immediately. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers what is returned at a high level (argument schema and permission) and the precondition. It stops short of describing the response shape, which matters somewhat since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required 'name' parameter, so the description must carry the meaning. It implies the value identifies an enabled tool, but does not specify the name format, source (e.g., output of searchOperations), or case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names the resources returned: the exact argument schema and permission for a tool. It is distinguishable from the searchOperations sibling by scoping to a single already-enabled tool, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a hard precondition ('Unavailable tools cannot be inspected or executed'), which implicitly tells the agent to discover enabled tool names first, but it never says to use searchOperations for that discovery or explains the failure behavior beyond unavailability.

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

diagnoseCameraConnectivityA
Read-only

Read-only camera network evidence by IP, hostname or MAC: current connection, VLAN/signal details and recent sessions. Does not test video decoding/inference or power-cycle a camera.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
identifierYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that. It adds useful behavioral context beyond the annotations: the categories of evidence returned and the boundary that it will not perform active tests or power-cycle the device. It does not mention permissions, latency, or pagination of 'recent sessions', which keeps it from a 5.

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

Conciseness5/5

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

Two compact sentences with no filler. The capability is front-loaded and the negative scope follows, which is the right order for an agent scanning the definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately names the kinds of evidence returned (connection state, VLAN/signal, recent sessions), which is enough to decide whether to call it. It does not describe the shape of the response or how 'recent sessions' is bounded, a minor gap for a two-parameter diagnostic tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% because the required 'identifier' parameter has no schema description, so the description carries real weight by specifying that it accepts an IP, a hostname, or a MAC address. That is precisely the missing meaning. The siteId parameter is left to the schema, which documents it well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read-only camera network evidence by IP, hostname or MAC') and enumerates what the evidence covers (current connection, VLAN/signal details, recent sessions). It is clearly a diagnostic read rather than a configuration tool, though it does not name a specific sibling (e.g. diagnoseClient) it should be preferred over.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions for use (identify the camera by IP, hostname or MAC) and explicit scope exclusions: it does not test video decoding/inference and does not power-cycle a camera. What is missing is a named alternative for those excluded cases, so the agent knows where to go instead.

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

diagnoseClientA
Read-only

Composite client diagnostic — single call that combines a client's current connection status, detailed info (VLAN, signal, rate limit, group policy), and recent connection history (last 10 sessions). Use when troubleshooting why a device can't connect, has poor performance, or keeps disconnecting. Accepts MAC address, IP address, or hostname.

NameRequiredDescriptionDefault
siteIdNoOptional site ID. Uses default site if omitted.
identifierYesClient MAC address, IP address, or hostname to look up. MAC format: XX:XX:XX:XX:XX:XX or XX-XX-XX-XX-XX-XX.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: this is a single-call aggregation of three data sources and history is capped at the last 10 sessions, which tells the agent about scope and truncation. It omits any note on lookup failure behavior or output shape, so not a 5.

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

Conciseness5/5

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

Three sentences, each doing distinct work: what it returns, when to reach for it, what input it takes. The composite scope is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of telling the agent what comes back, and it does so by listing the three data components and the 10-session history window. It stops short of describing how those components are structured or what happens when the identifier matches nothing, which is a minor gap for a read-only diagnostic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in structured form, making the baseline 3. The description restates that MAC, IP, or hostname are accepted but adds no new syntax or constraint detail, and it never mentions the optional siteId parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific composite resource and enumerates exactly what it aggregates: current connection status, detailed info (VLAN, signal, rate limit, group policy), and the last 10 sessions. This clearly separates it from siblings like getClientDetail or getGridClientHistory, which return only one slice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear when-to-use triggers — cannot connect, poor performance, repeated disconnects — which is exactly the troubleshooting context for a composite tool. It does not explicitly name alternatives or say when to prefer the narrower sibling calls instead, which keeps it below a 5.

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

getAclConfigTypeSettingB
Read-only

Get the ACL configuration type setting for the site gateway (L2 or L3 mode). Determines how ACL rules are evaluated for traffic.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the description need not repeat it. The description adds modest value by explaining what the setting means semantically (how ACL rules are evaluated for traffic) and that the answer is an L2/L3 mode, but says nothing about response shape, multi-site behavior, or what happens when the gateway lacks ACL support.

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

Conciseness4/5

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

Two short sentences, front-loaded with the verb+resource and followed by a single clarifying clause about semantics. The second sentence earns its place by explaining what the setting governs, though it borders on restating the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter read tool this is close to sufficient, and the mention of L2/L3 mode partially compensates for the absence of an output schema. However, with no output schema the agent still cannot tell the exact return shape (bare enum versus an object containing site and mode), and edge cases such as non-gateway sites or omitted siteId outcomes are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single optional siteId that already documents its pattern, the OMADA_SITE_ID default fallback, and the listSites discovery path. The description adds nothing about parameters, so the baseline of 3 applies — the schema does all the work here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (get the ACL configuration type setting) and scopes it to the site gateway, further clarifying the value domain as L2 or L3 mode. This distinguishes it reasonably well from siblings that return ACL rule lists (listOsgAcls, getOsgCustomAclList) or general firewall config (getFirewallSetting), though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer it should call this when it needs to know whether ACLs are evaluated in L2 or L3 mode. There is no stated when-to-use condition, no prerequisite (e.g., gateway must support ACLs), and no explicit pointer to the sibling ACL tools that answer different questions.

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

getAllDeviceBySiteA
Read-only

Get all devices in a site including offline and disconnected devices. Unlike listDevices which may filter to active-only, this returns the full device inventory. Useful for auditing what hardware is registered to a site.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description adds real behavioral value by stating that results include offline and disconnected devices (i.e., no active-state filtering). It says nothing about pagination, result size, or ordering, which are the remaining behavioral unknowns for a full-inventory listing.

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

Conciseness4/5

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

Three short sentences, front-loaded with the scope, then the sibling differentiation, then the use case. The second sentence ('returns the full device inventory') partly restates the offline/disconnected clause, a minor redundancy that keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, optional-argument read tool with annotations covering safety, the description covers what is listed, its scope, and when to prefer it. With no output schema, a brief note on return shape or volume would have closed the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the siteId property already documents the default-from-config behavior and the listSites discovery path. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get all devices in a site') and immediately bounds the scope with 'including offline and disconnected devices'. It explicitly distinguishes itself from a named sibling, listDevices, so an agent can pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative (listDevices) and the condition that separates them ('may filter to active-only'), plus a concrete use case ('auditing what hardware is registered to a site'). The routing cue is hedged with 'may', so the exclusion is slightly softer than an explicit when-not statement.

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

getApDetailA
Read-only

Fetch full configuration and status for a specific access point: model, firmware, CPU/memory, connected clients count, SSIDs, uptime, and mesh status. Use listDevices to get the apMac.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful fact that the response is a composite of configuration plus live status, but says nothing about latency, partial availability when an AP is offline, or error behavior for an unknown MAC.

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

Conciseness5/5

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

Two sentences, zero waste: the field inventory is front-loaded so an agent knows immediately whether this tool answers its question, and the prerequisite hint follows. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by naming the principal returned fields, and the annotations cover the read-only safety profile while the schema covers both parameters. Nothing material is missing for a two-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents both apMac (with pattern and example) and siteId (with the OMADA_SITE_ID default and listSites pointer). The description's 'Use listDevices to get the apMac' merely restates the schema's apMac description, adding no new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch') and resource ('full configuration and status for a specific access point') and enumerates the returned data (model, firmware, CPU/memory, client count, SSIDs, uptime, mesh status). That enumeration implicitly separates it from the many narrow siblings such as getApRadios, getApQosConfig and getApGeneralConfig, which return only one slice of AP data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite workflow: 'Use listDevices to get the apMac,' which is exactly the step an agent needs before calling. It does not state when to prefer the narrow config tools (getApRadios, getApVlanConfig) over this aggregate view, so an explicit exclusion is missing.

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

getApGeneralConfigA
Read-only

Get general configuration for an access point. Returns device name, LED settings, country/region, management VLAN, bandwidth limits, and other global AP parameters. Use getApDetail for runtime status; this returns stored configuration.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: this returns persisted configuration rather than live runtime state, and it names the specific categories of values returned, which helps an agent interpret the result.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose and return contents, then the disambiguation. No filler, no restating of the tool name, and the sibling reference comes after the essential information rather than burying it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of telling the agent what comes back, and it does so by enumerating representative fields plus the qualifier "other global AP parameters." Combined with 100% schema coverage on inputs and safety annotations, an agent has what it needs to call this correctly; only the exact response shape remains unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully documented in the schema (100% coverage), including MAC format, an example value, the siteId default behavior, and pointers to listDevices and listSites. The description adds nothing about apMac or siteId beyond what the schema already says, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ("Get general configuration for an access point") and then enumerates the concrete fields returned — device name, LED settings, country/region, management VLAN, bandwidth limits — so an agent knows exactly what class of data this yields versus siblings like getApRadios or getApVlanConfig.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent away from a sibling by naming the condition that selects it: "Use getApDetail for runtime status; this returns stored configuration." That is a clear when-to-use-this-instead statement, but no guidance is given relative to the many other AP config tools (getApUplinkConfig, getApSnmpConfig, getApQosConfig), which is why this 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.

getApIpv6ConfigB
Read-only

Get IPv6 configuration for a specific access point.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. Beyond that the description adds nothing behavioral: it does not say what the returned IPv6 config contains, what happens if IPv6 is disabled or the AP is unreachable, or whether site scoping changes results. It essentially restates 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.

Conciseness5/5

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

A single front-loaded sentence with no filler, hedging, or repetition. Nothing in it is wasted, though there is also very little of it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only getter with full schema coverage and annotations, the minimum needed to call the tool is present. However, with no output schema, the description is the only place to say what the IPv6 config response looks like or how failures surface, and it says neither.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both apMac (with pattern, example format, and a pointer to listDevices) and siteId (default from OMADA_SITE_ID, pointer to listSites) are fully documented structurally. The description adds only the phrase "specific access point" and says nothing about site targeting, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Get IPv6 configuration for a specific access point" gives a specific verb (Get), a specific resource (IPv6 configuration), and a scope (per-AP). It is separable from adjacent AP getters such as getApGeneralConfig or getApVlanConfig by resource noun, but it never names those siblings explicitly, so the differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrase "for a specific access point" signals that an AP identity is required, and the schema's apMac description carries the routing hint (use listDevices). The description itself states no when-to-use condition, no prerequisites (e.g. IPv6 must be enabled on the AP/site), and no alternatives to prefer for general or VLAN config.

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

getApLldpConfigB
Read-only

Get LLDP (Link Layer Discovery Protocol) configuration for an access point. Returns enabled state and advertised TLVs. LLDP allows network devices to advertise identity and capabilities to neighbours.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine value by disclosing the return payload ('enabled state and advertised TLVs'), but says nothing about auth requirements, default-site behavior when siteId is omitted, or error cases for an unknown AP.

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

Conciseness3/5

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

The purpose and return values are front-loaded in the first two sentences, which is good. The trailing sentence explaining what LLDP is generally is educational filler that does not help an agent select or invoke this tool, so it does not earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 full schema coverage, annotations, and no output schema, the description is nearly sufficient — it even describes the return shape in lieu of an output schema. Only the default-site fallback and failure behavior are left implicit, and the schema covers the former.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with apMac format and siteId defaulting behavior fully documented in the schema, so the baseline is 3. The description adds no parameter-level meaning beyond the schema, such as what happens if the AP has LLDP disabled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get LLDP configuration for an access point') and even names the return contents, so it is clearly separable from siblings like getApSnmpConfig or getApGeneralConfig. It stops short of explicitly contrasting itself with those siblings, which keeps it at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and no mention of prerequisites such as needing a known AP MAC. Usage is only implied by the name and by being an AP-scoped read of one specific config area.

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

getAppControlCategoriesA
Read-only

Get application control categories (families) for a site, listing available app category definitions used in application control rules.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that results are scoped per-site; it says nothing about whether the list is paginated, whether it can be large, or how the default site fallback behaves at runtime, leaving little beyond structured data.

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

Conciseness4/5

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

A single front-loaded sentence with no filler and no repetition. It is efficient, though the parenthetical '(families)' plus the trailing clause makes it slightly denser than necessary for the amount of information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only, single-optional-parameter lookup with no output schema, the definition gives enough to call the tool correctly and understand what comes back conceptually (category definitions). Slightly more detail on result shape would make it complete, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the siteId property already documents targeting, the OMADA_SITE_ID default, and the listSites discovery hint. The description's 'for a site' merely echoes that, adding no new syntax, format, or behavioral detail about the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get application control categories (families) for a site') and clarifies what the objects are ('app category definitions used in application control rules'). This separates it from the rules-listing sibling getAppControlRules without naming that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer it is a prerequisite/reference lookup for app control rule configuration. The description never says when to call this versus getAppControlRules or getApplicationControlStatus, and offers no prerequisites or exclusions.

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

getAppControlRulesA
Read-only

Get application control rules for a site, listing application-level firewall rules that allow or block specific apps or app categories.

NameRequiredDescriptionDefault
pageNoPage number (1-based).
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of results per page (1–1000).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful domain context that these are application-level firewall rules with allow/block semantics, but says nothing about pagination behavior or the shape of the returned rule set.

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

Conciseness5/5

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

A single front-loaded sentence with the resource named first and its meaning appended as a clause; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a list-style response, the description could say more about what a rule object contains or how pagination totals are returned. For a simple, read-only, fully documented-schema list tool it is adequate but thin on return-value context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the page, pageSize, and siteId semantics (including the OMADA_SITE_ID fallback and listSites hint) are already fully documented in the schema. The description adds no parameter meaning beyond that, which is the expected baseline at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get application control rules for a site') and explains what those rules are: application-level firewall rules that allow or block apps or app categories. This distinguishes it from the closely named siblings getAppControlCategories and getAppControlStatus, though it doesn't explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the resource being listed; there is no explicit statement of when to prefer this tool over getAppControlCategories, getFirewallSetting, or getUrlFilterRules, and no prerequisites or exclusions are given.

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

getApplicationControlStatusB
Read-only

Get application control (DPI) status and configuration for a site.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered externally. The description adds that both status and configuration are returned, which is useful context, but says nothing about what the response contains, whether DPI must be enabled first, or any 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.

Conciseness5/5

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

A single front-loaded sentence that states the resource and scope with no filler. Nothing could be cut without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-optional-parameter getter with no output schema, the definition covers what the tool returns at a high level (status and configuration) and the schema covers the input fully. It leaves the shape of the returned status/config unspecified, which is a minor gap for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema description coverage, the schema already fully explains siteId, including the default-site fallback and the pointer to listSites. The description's phrase 'for a site' merely echoes that, adding no new semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Get) and resource (application control/DPI status and configuration) scoped to a site, which is enough for an agent to tell it apart from the rules-oriented siblings getAppControlRules and getAppControlCategories. It stops short of explicitly naming those siblings or contrasting scope with them, so it is clear but not maximally differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the closely related app-control tools in the sibling list. An agent must infer that this is the status/config read while getAppControlRules and getAppControlCategories handle rule and category listings.

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

getApQosConfigC
Read-only

Get QoS configuration for a specific access point.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered. The description adds nothing beyond that: it does not say what the returned QoS configuration contains, how the default-site fallback behaves, or whether an AP not configured for QoS returns defaults or an error.

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

Conciseness4/5

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

One front-loaded sentence with zero filler or redundancy. It is efficient, though its brevity costs it in the other dimensions rather than in structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only getter with full schema coverage and no output schema, the definition is minimally sufficient to invoke correctly. It nonetheless omits what the agent will receive (e.g., which QoS attributes) and how to handle a missing AP or unset QoS policy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both apMac (with pattern and example) and the optional siteId (with default-site fallback) are already well documented. The description contributes no additional parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Get') and resource ('QoS configuration') and scopes it to 'a specific access point', which separates it from gateway-level siblings such as getGatewayQosClassRules and getQosPolicy. It does not, however, name any of those siblings or clarify how AP QoS differs from the broader QoS policy tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no named alternatives among the many QoS-adjacent siblings (getQosPolicy, getTrafficPriority, getBandwidthCtrlDetail). The only routing hints ('Use listDevices to find AP MACs', 'Use listSites to discover site IDs') live in the schema, not the description.

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

getApRadiosA
Read-only

Get radio status for a specific access point: 2.4GHz and 5GHz band config, channel, TX power, channel utilization, and associated client count per radio. Use listDevices to get the apMac.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds real value by specifying what the response contains, which matters because there is no output schema. It does not address error handling or permission/site-access requirements, keeping it short of a 5.

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

Conciseness5/5

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

Two sentences, front-loaded with the capability and its payload, followed by the one prerequisite action. Every clause carries information; there is no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with full schema coverage and safety annotations, the definition supplies both the data returned and the prerequisite lookup, which is enough to call it correctly. Only the distinction from near-neighbor AP config tools is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both the apMac hint ("Use listDevices to find AP MACs") and the siteId default behavior are already documented in the schema. The description's listDevices pointer therefore duplicates rather than extends the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb (get) and resource (radio status for an access point) with an enumeration of the actual data returned: 2.4GHz/5GHz band config, channel, TX power, channel utilization and per-radio client count. That detail implicitly separates it from config-oriented siblings like getRadiosConfig, though no sibling is ever named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers one workflow hint ("Use listDevices to get the apMac"), which helps the caller secure the required parameter, but it never states when to choose this tool over getRadiosConfig, getApDetail, or other AP-level getters. Usage is inferable rather than guided.

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

getApSnmpConfigA
Read-only

Get SNMP configuration for an access point. Returns SNMP version, community strings, trap settings, and enabled state. Useful for auditing SNMP-based monitoring configurations on wireless infrastructure.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint/destructiveHint annotations already establish the safety profile, so the bar is lower. The description does add value by disclosing what the response contains (SNMP version, community strings, trap settings, enabled state), which matters since no output schema exists, but it says nothing about permission requirements, behavior when SNMP is unsupported on the AP, or the sensitivity of returned community strings.

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

Conciseness4/5

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

Three short sentences, front-loaded with the verb and resource, followed by return contents and then usage. No filler or repetition of the parameter details already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 full annotation coverage, the definition is nearly sufficient: purpose, return contents, and usage context are all present. Residual gaps are minor — error/unavailable behavior and the fact that community strings are sensitive data worth handling carefully are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so apMac format and the siteId default/fallback are already fully documented in the schema. The description adds no parameter-level meaning (e.g., no hint about site scoping for APs or cross-site lookup) beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get SNMP configuration for an access point') and enumerates what the configuration contains. The SNMP subject matter distinguishes it naturally from the many sibling getAp*Config tools (QoS, VLAN, LLDP, general), though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Useful for auditing SNMP-based monitoring configurations' gives an implied use case, but there is no explicit when-to-use/when-not guidance and no pointer to an alternative tool. The agent must infer selection 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.

getApUplinkConfigA
Read-only

Get the uplink configuration for an access point. Returns uplink mode (wired/wireless mesh), preferred uplink settings, and failover configuration. Useful for understanding mesh topology and wired uplink assignments.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description then adds value by disclosing what the payload contains (uplink mode, preferred uplink settings, failover configuration) and scoping it to a single access point. It stops short of noting any permission, rate-limit, or error behavior, so it is strong but not exhaustive given the lower bar annotations set.

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

Conciseness4/5

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

Three short sentences, front-loaded with the verb and resource, then the return contents, then the use case. No filler or repetition, though the second and third sentences could be tightened into one.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description usefully compensates by enumerating the returned fields. Combined with annotation coverage and a fully documented schema, an agent has nearly everything needed; only the sibling disambiguation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (apMac, siteId) are documented in the schema itself, including the format example and pointers to listDevices/listSites. The description adds no further meaning about parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (get the uplink configuration for an access point) and enumerates the returned facets: uplink mode (wired/wireless mesh), preferred uplink settings, and failover configuration. It does not, however, distinguish this tool from close siblings such as getUplinkWiredDetail or getMeshStatistics, which cover overlapping territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence 'Useful for understanding mesh topology and wired uplink assignments' implies a context for use, but there is no explicit when-to-use/when-not-to-use guidance and no named alternatives. An agent facing the many AP and uplink siblings must infer the boundary itself.

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

getApVlanConfigA
Read-only

Get VLAN configuration for an access point. Returns the AP's management VLAN and per-SSID VLAN tagging settings. Useful for verifying network segmentation on wireless infrastructure.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without description help. The description adds that the response shape includes management VLAN plus per-SSID tagging, which is useful behavioral context, but says nothing about what happens when VLANs are unconfigured, whether settings are inherited from a site profile, or any 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.

Conciseness5/5

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

Three short sentences, front-loaded with purpose followed by return contents and then a usage note. No filler, no restatement of the tool name, and every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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, the definition plus annotations plus fully documented schema covers nearly everything an agent needs, and the description even compensates for the missing output schema by naming the returned fields. The only shortfall is the absence of failure-mode or fallback behavior when VLAN data is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: apMac's format, an example, and the pointer to listDevices, plus siteId's default-from-OMADA_SITE_ID fallback and the listSites pointer, are all documented in the schema. The description adds no parameter-level meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get VLAN configuration for an access point') and enumerates what is returned ('management VLAN and per-SSID VLAN tagging settings'), which cleanly separates it from sibling config readers like getApUplinkConfig, getApGeneralConfig, or getApQosConfig. It does not name any sibling explicitly, so differentiation is implied by domain rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Useful for verifying network segmentation on wireless infrastructure' gives a concrete use context, which is better than nothing. However, there is no when-not guidance, no mention of adjacent tools (e.g. use getApGeneralConfig for broader AP settings), and no prerequisites such as the AP needing to be online or the site needing to be selected.

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

getAttackDefenseSettingB
Read-only

Get the DDoS and attack defense configuration, including flood protection settings and thresholds.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered structurally. The description contributes a small amount beyond that by scoping what the read returns (flood protection settings and thresholds), but says nothing about whether defaults are materialized, whether the response is site-scoped, or how large it may be.

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

Conciseness4/5

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

One sentence, front-loaded with the verb and resource, with no filler or redundancy. It is appropriately sized for a single-parameter read tool, though it is brief enough that a little more routing or scope detail could have been added without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, zero-required-parameter read with full schema coverage and safety annotations, the description covers the essentials. It stops short of describing the shape of the returned configuration beyond two example categories, and there is no output schema to fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single siteId parameter is already documented in the schema, including its regex pattern, the OMADA_SITE_ID fallback, and the pointer to listSites. The description adds nothing further about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get the DDoS and attack defense configuration') and enumerates the payload ('flood protection settings and thresholds'), which clearly separates it from the many adjacent *Setting/get* siblings such as getFirewallSetting or getDot1xConfig. It does not explicitly name when to prefer it over those neighbors, but the resource naming is precise enough for an agent to pick it out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives or prerequisites. An agent must infer the context (auditing DDoS posture for a site) purely from the noun phrase, with no exclusions against firewall/ACL tools that sound similar.

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

getBandwidthCtrlDetailA
Read-only

Get gateway bandwidth control detail settings for a site, including per-IP and per-SSID bandwidth limits.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a little value by saying which configuration sub-areas are returned, but says nothing about behavior when bandwidth control is unconfigured, what happens with the default site fallback, or the response shape.

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

Conciseness4/5

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

A single well-formed sentence with the resource and contents front-loaded and no filler. It is efficient, though it could have used the remaining space for a usage cue instead of stopping at the payload list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter, single-parameter read-only getter with no output schema, the description covers purpose and returned content adequately. The only real omission is guidance on how this differs from the sibling gateway configuration getters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 100% schema description coverage, the schema already documents siteId fully, including the OMADA_SITE_ID fallback and the pointer to listSites. The description only restates that the lookup is site-scoped, adding no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get gateway bandwidth control detail settings") plus the scope ("for a site") and the payload contents ("per-IP and per-SSID bandwidth limits"). It is clearly distinguishable from the many other gateway getters, though it never names a sibling it contrasts with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer it reads existing bandwidth-control configuration, but there is no statement of when to choose it over e.g. getGatewayQosClassRules or getSitesGatewaysGeneralConfig, and no mention of prerequisites or when the settings may be empty.

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

getCableTestFullResultsA
Read-only

Get full cable test results for all ports on a switch. Returns detailed per-port diagnostic data including cable status (OK/open/short), estimated cable length, and fault location. More detailed than getCableTestLogs.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description earns credit for disclosing the payload — per-port cable status (OK/open/short), estimated length, and fault location. It does not say whether results are live-measured or cached from a prior test run, nor whether the call is expensive on large switches, which would be the remaining useful detail.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then the return content, then the sibling comparison — exactly the right ordering. No filler, no restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by describing the returned diagnostic fields, and the two parameters are fully documented in the schema. Together this is sufficient for an agent to decide and call correctly, especially for a read-only tool whose safety profile is already in the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both siteId and switchMac fully documented in-schema including patterns and discovery hints (listSites, listDevices), so the baseline is 3. The phrase 'on a switch' and 'all ports' reinforces that switchMac is the required scope selector and that no per-port filtering exists, which adds a small amount of meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — retrieve full cable test results for all ports on a switch — and immediately differentiates itself from the sibling getCableTestLogs by noting it is 'more detailed.' An agent can pick between the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear selection signal against the closest sibling ('More detailed than getCableTestLogs'), implying this is the choice when per-port diagnostics are needed. It stops short of an explicit when-to-use / when-not statement or naming prerequisites, but the practical routing guidance is present.

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

getCableTestLogsA
Read-only

Get cable test logs for a switch. Returns history of cable diagnostics including per-port test results, cable length estimates, and fault detection. Useful for diagnosing physical layer connectivity issues.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value by describing what the payload contains (per-port results, length estimates, fault detection), but says nothing about how much history is returned, retention window, or whether results can be stale.

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

Conciseness4/5

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

Three short sentences, front-loaded with the purpose, followed by return content and one usage note. No filler, though the third sentence is generic enough that it borders on boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey the return shape, and it does so at a useful level of abstraction. With only two fully documented parameters this is close to sufficient; the missing piece is how to interpret or bound the returned history.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: siteId explains the default-site fallback and points to listSites, and switchMac documents the MAC format and points to listDevices. The description adds only that logs are per-switch, which does reinforce why switchMac is required, but contributes little beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get cable test logs for a switch") and enumerates the returned content (per-port results, cable length estimates, fault detection). It is clear on its own, but it never distinguishes itself from very close siblings such as getCableTestFullResults or listSitesCableTestSwitchesPorts, leaving the agent to guess which cable-test tool to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for diagnosing physical layer connectivity issues" gives a context-of-use signal, which is more than nothing. However, there is no explicit when-to-use versus the several other cable-diagnostic siblings and no stated preconditions (e.g. whether the switch must support cable diagnostics or a prior test must exist).

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

getClientDetailA
Read-only

Get full detail for a specific client by MAC address, including connection info, IP, VLAN, signal strength, and traffic stats.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
clientMacYesMAC address of the client to retrieve details for.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare a read-only, non-destructive operation, so the safety profile is covered. The description adds valuable context by enumerating what the response contains (connection info, IP, VLAN, signal strength, traffic stats), which matters since there is no output schema; it stops short of stating what happens when the MAC is unknown or the client is offline.

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

Conciseness5/5

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

A single front-loaded sentence with the resource, the identifying key, and the payload summary in that order. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only lookup with no output schema, the description supplies the essential return-value summary and the lookup key. It omits error/empty-result behavior and the site scoping default, which are minor given the small surface area.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented in the schema, and the description only restates the MAC-address lookup key. It says nothing about the optional siteId or the default-site fallback, so it adds no meaning beyond structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get full detail') and resource ('a specific client'), and identifies the lookup key (MAC address) plus the categories of data returned. This separates it implicitly from the list- and diagnose-oriented siblings, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: fetch a single client's detail when you already know its MAC. There is no explicit when-to-use/when-not, no pointer to listClients/getGridKnownClients for discovering a MAC, and no guidance on preferring diagnoseClient for troubleshooting.

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

getClientsDistributionA
Read-only

Get client count distribution by connection type and band (wired, 2.4GHz, 5GHz, 6GHz). Useful for understanding the network composition at a glance.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without the description's help. The description adds that results are aggregated by connection type and band, but says nothing about whether counts are real-time or cached, whether disconnected clients are included, or what the response shape looks like. With annotations carrying the safety burden, this is a reasonable but not rich disclosure.

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

Conciseness4/5

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

Two short sentences with the core capability front-loaded and the enumerated bands immediately defining scope. The second sentence is lightly promotional ('at a glance') but still conveys intent, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only aggregate with a single optional parameter and no output schema, and the description states the dimensions of the aggregation, which is the main thing an agent needs. Nothing critical is missing, though a note on whether the metric is site-wide only would close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the siteId property already explains the default-site fallback and points to listSites for discovery. The description adds no parameter meaning beyond that, so the baseline 3 applies: the schema does the work, the description neither helps nor hurts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (client count distribution) and enumerates the exact buckets returned (wired, 2.4GHz, 5GHz, 6GHz), so an agent knows precisely what data comes back. It stops short of distinguishing itself from near-neighbours such as getTrafficDistribution or getDashboardWifiSummary, which is the only thing separating it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'useful for understanding the network composition at a glance'. There is no explicit when-to-use condition, no when-not to use it, and no pointer to a sibling tool for related questions. Adequate but leaves the agent to infer the selection criteria.

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

getDashboardMostActiveEapsA
Read-only

Get the most active access points (EAPs) in a site, sorted by traffic volume.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered and the description's added value is the traffic-volume sort order. However, it never states the measurement window for 'traffic volume' or how many EAPs are returned, which are the key behavioral facts an agent needs to interpret the output.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler that states the resource, the scope, and the ordering in one pass.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only dashboard tool with no output schema, the definition is nearly sufficient, especially with a fully documented parameter. The remaining gap is that 'traffic volume' is undefined in time window or result count, which affects how an agent reports the data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the sole siteId parameter is fully documented in the schema, including the OMADA_SITE_ID default fallback and the listSites discovery hint. The description only restates the site scoping at a high level and adds no syntax or format meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb (Get) with a specific resource (most active access points / EAPs) and adds the ranking criterion (sorted by traffic volume) plus the site scope. It is easily separable from getDashboardMostActiveSwitches and listMostActiveClients by resource type, though neither sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the 'most active' framing; there is no statement of when to pick this over getDashboardMostActiveSwitches, getDashboardTrafficActivities, or listMostActiveClients, and no prerequisites are mentioned. The schema's siteId description does route discovery to listSites, which partially compensates.

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

getDashboardMostActiveSwitchesB
Read-only

Get the most active switches in a site, sorted by traffic volume.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the sort criterion (traffic volume), but omits how many switches are returned, whether a top-N cap applies, and what time window 'most active' covers — meaningful gaps for a ranking tool.

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

Conciseness5/5

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

A single well-formed sentence with the resource and the sort criterion front-loaded and no filler. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read with one optional parameter, so low complexity keeps the bar modest. However, with no output schema, the description should say what a returned entry looks like (switch identity plus traffic figures) and how the ranking is bounded; neither is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: siteId already documents the pattern, the OMADA_SITE_ID default fallback, and the listSites discovery path. The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') plus resource ('most active switches') and adds the ordering criterion ('sorted by traffic volume'). It implicitly distinguishes itself from getDashboardMostActiveEaps and getDashboardSwitchSummary by resource and metric, though it never names those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use context, no exclusions, and no pointer to alternatives such as getDashboardSwitchSummary or listDevices. The only usage hint is the word 'Dashboard' in the name, which the description does not reinforce.

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

getDashboardOverviewA
Read-only

Get the site overview topology: device counts (gateways, switches, APs), client counts (wired, wireless, guest), connectivity graph, and overall health status. Good first call to understand what's in the network.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered by structured data. The description's main addition is the return payload contents, which is useful since no output schema exists. It does not disclose whether counts are live or cached, how large the connectivity graph is, or whether it is expensive/slow to call — behavioral details that would help an agent decide placement in a call sequence.

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

Conciseness5/5

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

Two sentences, zero filler. The substantive content (what the overview contains) comes first, with the usage hint trailing. Nothing is redundant with the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a single optional parameter, the description carries the burden of telling the agent what comes back, and it does so concretely across four categories. The only shortfall is that it doesn't frame itself relative to the dense cluster of sibling dashboard and health tools, which is the main ambiguity an agent faces here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the siteId field already documents its pattern, the OMADA_SITE_ID default fallback, and the pointer to listSites. The description adds nothing about parameters, which is acceptable given full schema coverage but earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ('Get') plus a concrete resource ('site overview topology') and then enumerates exactly what is included: device counts by type, client counts by type, connectivity graph, health status. That enumeration distinguishes it from narrow siblings like getDashboardWifiSummary or getDashboardSwitchSummary. It stops short of naming those siblings explicitly, so it's 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Good first call to understand what's in the network' gives a genuine usage cue (entry point / orientation), which is better than nothing. However, it never states when NOT to use it, nor does it route to the many sibling dashboard summaries (getNetworkHealthSummary, getDashboardTrafficActivities, getDashboardPoEUsage) for deeper drill-down. An agent must infer the boundary from tool names alone.

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

getDashboardPoEUsageA
Read-only

Get PoE (Power over Ethernet) usage statistics for a site, showing power consumption per switch.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally. The description adds the aggregation model (per-switch power consumption for a whole site), which is useful context beyond the annotations, but says nothing about return shape, time window, or what happens when no PoE devices exist.

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

Conciseness5/5

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

One front-loaded sentence with the resource name first and the reporting granularity second; there is no filler, hedging, or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, no-required-parameter tool with a fully documented single parameter and no output schema, the description covers purpose and granularity adequately. Minor gaps remain around the reporting window (real-time vs. historical) and whether results are per-port or per-switch only.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single optional siteId parameter already documents the pattern, the OMADA_SITE_ID default fallback, and the listSites discovery hint. The description adds no parameter detail, which is acceptable given the schema does the work, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('PoE usage statistics for a site') and adds the unit of reporting ('power consumption per switch'), so an agent knows exactly what data comes back. It does not, however, distinguish itself from nearby dashboard siblings such as getDashboardSwitchSummary or getDashboardMostActiveSwitches, which likely also cover switch-level power or activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scope 'for a site' implicitly tells the agent this is the tool for site-wide PoE power checks, but there is no explicit when-to-use statement, no exclusions, and no mention of how it differs from the many other getDashboard* tools. Usage is inferable from the purpose rather than stated.

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

getDashboardSwitchSummaryA
Read-only

Get switch summary for a site dashboard: total switch count, total ports, active ports, PoE budget used vs available, and aggregate bandwidth.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the bar is lower. The description adds that the result is an aggregate summary (counts and totals rather than per-switch records), which helps set expectations. It says nothing about freshness, caching, or whether totals include offline switches — meaningful for a dashboard metric tool.

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

Conciseness5/5

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

A single front-loaded sentence with the action first and the returned metrics enumerated after a colon. Every clause 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the aggregate fields the caller will receive, and the one optional parameter is fully handled by the schema. Minor omission: it doesn't say whether figures are site-wide for all switches or filtered, but for a low-parameter read-only dashboard tool this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single siteId parameter is fully documented in the schema, including the OMADA_SITE_ID default and the listSites discovery hint. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Get') and resource ('switch summary for a site dashboard') and enumerates the exact metrics returned: switch count, ports, active ports, PoE budget, bandwidth. That makes its role distinguishable from granular siblings like getDashboardPoEUsage or getSwitchDetail. It stops short of explicitly contrasting itself with the other dashboard tools (getDashboardOverview, getDashboardWifiSummary).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the words 'for a site dashboard' — an agent can infer this is an at-a-glance aggregate rather than a per-device query. There is no explicit statement of when to prefer this over getDashboardOverview or getSitesSwitchesEs, and no preconditions or exclusions are given.

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

getDashboardTopCpuUsageB
Read-only

Get the top devices by CPU usage for a site, useful for identifying overloaded devices.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds that results are ranked 'top' devices, but does not disclose how many devices are returned, the ranking direction, or the sampling time window – meaningful gaps for a dashboard metric tool even with annotations present.

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

Conciseness4/5

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

A single front-loaded sentence with the resource and scope first, followed by the use case. No wasted wording, though it is brief enough that a few more specifics could have been added without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and full schema documentation, the description covers purpose adequately. However, with no output schema present, it does not describe the shape of the response (device list with CPU percentages, sort order, result count), which an agent would need to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the siteId property already documents its pattern, default fallback to OMADA_SITE_ID, and the listSites discovery path. The description only echoes 'for a site', adding no semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get the top devices by CPU usage') plus a scope ('for a site'), which is clearly distinguishable from the sibling getDashboardTopMemoryUsage. It stops short of explicitly naming that sibling as the alternative to use for memory metrics, so it is clear but not fully differentiated in text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for identifying overloaded devices' implies the operating context (capacity troubleshooting) but gives no explicit when-to-use vs. when-not, and names no alternative such as getDashboardOverview or getDashboardTopMemoryUsage. Usage is 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.

getDashboardTopMemoryUsageB
Read-only

Get the top devices by memory usage for a site, useful for identifying memory-constrained devices.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only a use-case rationale and does not disclose how many devices constitute 'top', the ranking direction, or what the response looks like — meaningful gaps for a 'top-N' 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.

Conciseness4/5

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

One compact sentence with the resource front-loaded and the rationale trailing; nothing is redundant. It could be slightly sharper by folding the use case into the first clause but it wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one optional, fully documented parameter, read-only), so most requirements are met. However, with no output schema, the description should say what 'top devices by memory usage' actually returns (device list with memory percentages? a count?) and how many, which it does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the siteId parameter already documents the OMADA_SITE_ID default and points to listSites. The description adds nothing beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get the top devices by memory usage for a site.' An agent can distinguish it from the sibling getDashboardTopCpuUsage by the 'memory' qualifier, though the description never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'useful for identifying memory-constrained devices' implies a use case (troubleshooting devices near memory limits), but there is no explicit when-to-use vs when-not guidance and no pointer to the CPU or PoE dashboard siblings as alternatives.

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

getDashboardTrafficActivitiesA
Read-only

Get traffic activity time-series data for a site, showing upload and download trends over time.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Read-only, non-destructive behavior is already fully declared by annotations, so the description only needs to add context. It adds the notable fact that results are time-series with upload and download series, but omits the time window, granularity, and whether the range is fixed server-side — material for a trend query with no time parameters.

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

Conciseness5/5

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

A single front-loaded sentence with a clear verb, resource, and scope; every clause (time-series, upload/download, over time) contributes information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one optional parameter, no nested objects, and no output schema, the description conveys the essential purpose and the shape of the returned data (upload/download trends over time). The main remaining gap is the absence of any statement about the time range or sampling interval, which an agent cannot infer from the parameter list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and siteId is already documented there, including the config default and listSites discovery. The description's 'for a site' adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get traffic activity time-series for a site) and names the measured content (upload/download trends), which separates it from dashboard siblings like getDashboardOverview or getTrafficDistribution. It stops short of explicitly contrasting those siblings, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'traffic activity time-series' implies usage for trend inspection, but the description never says when to prefer this over getTrafficDistribution or getDashboardOverview, nor any prerequisites. The site defaulting behavior and listSites discovery hint live only in the schema, not the description.

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

getDashboardWifiSummaryA
Read-only

Get WiFi summary for a site dashboard: total APs, connected AP count, wireless client count, channel utilization per band (2.4GHz/5GHz), and SSID count.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered and the description doesn't need to repeat it. What the description does add beyond the annotations is the payload contract: the specific metrics an agent will get back, which is genuinely useful since there is no output schema. It stops short of saying whether counts are aggregate or time-windowed.

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

Conciseness5/5

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

One front-loaded sentence that states the resource first and then the metric list. No filler, no redundancy, and the enumerated metrics are compact rather than sprawling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-parameter read tool with read-only annotations and no output schema, the description plus schema supply nearly everything needed to call it correctly. The one remaining gap is scope: it doesn't say whether the summary reflects real-time state or a default time window, which matters for interpreting the numbers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains siteId, its pattern, the OMADA_SITE_ID default fallback, and the pointer to listSites. The description mentions nothing about the parameter, so it adds no meaning here – the baseline 3 applies because the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Get WiFi summary for a site dashboard") and enumerates the exact metrics returned (AP totals, client count, channel utilization per band, SSID count). It does not distinguish itself from closely related siblings like getDashboardOverview or getApDetail, so an agent still has to infer which dashboard summary to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word "dashboard" – the agent can infer this is a high-level rollup rather than per-device detail, but there is no explicit statement of when to prefer it over getApDetail or getDashboardOverview, and no mention of the default-site behavior when siteId is omitted.

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

getDeviceTagListC
Read-only

Get the list of device tags defined in a site.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered, but the description adds nothing beyond them. There is no mention of whether tags are site-scoped only, whether an empty list is returned when none are defined, whether results are paginated, or what a tag record contains.

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

Conciseness4/5

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

One short sentence with no wasted words and the key scope qualifier front-loaded. It is efficient but so brief that it carries no structuring benefit beyond the surface statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple no-output-schema read of one optional parameter, the description is minimally sufficient to invoke correctly. It leaves open the return shape and the default-site behavior, though the latter is at least recoverable from the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single siteId parameter is fully documented in the schema, including the OMADA_SITE_ID default and the pointer to listSites. The description adds no meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get), resource (device tags), and scope (defined in a site), so an agent knows exactly what is returned. It does not differentiate itself from any of the many sibling tag/device/config listers in the namespace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use context, no prerequisites, and no alternatives named. The description does not say to use this only when tags are the object of interest versus, say, listDevices or getAllDeviceBySite, leaving selection to inference.

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

getDot1xConfigB
Read-only

Get the 802.1X (dot1x) authentication configuration for a site, including enabled state, authentication mode, and RADIUS server settings.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds real value by naming the returned fields (enabled state, mode, RADIUS server settings), but says nothing about scoping behavior, error cases when dot1x is unconfigured, or fallback to the default site.

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

Conciseness4/5

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

One front-loaded sentence that puts the resource before the return payload, with zero filler. It is appropriately sized for a simple read tool, though it could have used the remaining space to route against the sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only getter with one optional parameter, no output schema, and no nesting, the description covers the essentials and even previews the response shape. The main missing piece is disambiguation from getSwitchDot1xSetting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional siteId parameter is fully documented there, including the OMADA_SITE_ID default and the listSites discovery path. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') plus the exact resource ('802.1X (dot1x) authentication configuration for a site') and enumerates what is included (enabled state, authentication mode, RADIUS server settings). This is clear, but it never distinguishes itself from the sibling tool getSwitchDot1xSetting, so an agent cannot resolve the near-duplicate dot1x getters from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no exclusions, and no mention of the sibling getSwitchDot1xSetting that appears to cover overlapping ground. The only usage hint in the whole definition lives in the input schema (listSites for discovering site IDs), not the description.

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

getDownlinkWiredDevicesA
Read-only

Get wired downlink devices connected to an access point's LAN port. Returns a list of devices using the AP as a wired switch, including their MAC addresses and connection details. Useful for APs with built-in switch ports (e.g. EAP615-Wall).

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive read, so the safety profile is covered. The description adds that the result is a device list containing MAC addresses and connection details, but says nothing about empty results, pagination, or permissions.

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

Conciseness5/5

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

Three short sentences: what it returns, how the devices are connected, and when it is relevant. The purpose is front-loaded and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read with no output schema, the description covers purpose, return content, and applicability. The phrase 'connection details' remains vague about the actual fields returned, which is the only real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; apMac format and the siteId default/fallback are fully documented in the schema, including pointers to listDevices and listSites. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get wired downlink devices on an AP's LAN port. The word 'downlink' plus 'using the AP as a wired switch' clearly separates this from uplink-oriented siblings such as getUplinkWiredDetail and from general device lists like listDevices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a usable context: 'Useful for APs with built-in switch ports (e.g. EAP615-Wall)', which tells the agent when this applies. It stops short of naming alternatives or stating when not to use it (e.g. for wireless clients or uplink ports).

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

getFirewallSettingB
Read-only

Get the site-global firewall settings returned by the official Omada firewall endpoint.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already establish that this is a safe read-only operation, so the description does not need to repeat that. It adds the useful scope detail that the settings are site-global, but 'returned by the official Omada firewall endpoint' is implementation provenance rather than additional behavioral context such as return shape or fallback behavior.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no unnecessary elaboration. The trailing 'returned by the official Omada firewall endpoint' phrase is mildly redundant and adds little agent-facing value, but overall it remains concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional, fully documented parameter and annotations covering safety, the definition is largely complete. The lack of any return-value explanation is a minor gap because there is no output schema, but the operation is straightforward enough that an agent can still call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the siteId parameter is already fully documented in the schema, including the default-site fallback and the listSites discovery hint. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and resource ('site-global firewall settings'), making the operation understandable without opening the schema. It does not explicitly distinguish this general firewall-settings read from the many sibling firewall/ACL/filter configuration tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 ACL, URL filter, attack-defense, or QoS configuration tools. The only contextual clue is the 'site-global' scope, which is useful but does not amount to usage guidance.

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

getFirmwareInfoA
Read-only

Get the latest available firmware information for a device. Returns current firmware version, latest available version, and whether an upgrade is available. Use listDevices to get deviceMac values.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
deviceMacYesMAC address of the device (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find device MACs.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying the exact return payload (current version, latest version, upgrade availability) in the absence of an output schema. It stops short of mentioning pagination, freshness of the 'latest' data source, or error behavior for unknown MACs.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and return values, then the prerequisite hint. The only redundancy is the listDevices pointer, which duplicates the deviceMac schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with no output schema, the description adequately covers purpose, return contents, and how to source the required MAC. The remaining gap is sibling differentiation within the crowded firmware/upgrade tool family, which matters given several similarly named neighbors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both siteId and deviceMac documented including format and discovery hints. The description's 'use listDevices to get deviceMac values' merely restates what the schema already says, adding no new syntactic or semantic detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (get firmware info for a device) and enumerates the three returned values, so the agent knows exactly what the tool produces. It is clear but does not distinguish itself from firmware-adjacent siblings such as getFirmwareUpgradePlan or listUpgradeFirmwares.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description points the agent to listDevices to obtain deviceMac, which is a concrete prerequisite. However, it gives no guidance on when to use this per-device tool versus getFirmwareUpgradePlan or the listUpgrade* siblings, so sibling selection 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.

getFirmwareUpgradePlanC
Read-only

Get the firmware upgrade plan list for devices managed by the controller.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. Beyond that the description only adds the scope phrase 'devices managed by the controller'; it says nothing about pagination defaults, whether results are per-device or per-plan, ordering, or result-set size, which matter for a paginated list endpoint.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity comes at the cost of specification rather than because everything necessary has been said.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list tool with no complex schema or nested objects, the entry is adequate. But with no output schema, the description should have clarified what a 'firmware upgrade plan' entry looks like (per-device plan status, target firmware, schedule), which it leaves entirely implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (page, pageSize) carry their own bounds and defaults, so the schema does the heavy lifting. The description adds no meaning beyond it, which matches the baseline 3 for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb plus resource: 'Get the firmware upgrade plan list' scoped to 'devices managed by the controller'. However, it does not differentiate from nearby siblings such as getFirmwareInfo, listUpgradeFirmwares, getUpgradeLogs, or getGridAutoCheckUpgrade, so an agent still has to guess which upgrade-related endpoint returns plans versus firmware catalog entries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no exclusions. With four-plus firmware/upgrade siblings in the toolset, the description gives the agent nothing to disambiguate plan retrieval from firmware listing, upgrade logs, or auto-check-upgrade settings.

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

getGatewayDetailA
Read-only

Fetch full configuration and status for a specific gateway: model, firmware, CPU/memory, WAN/LAN ports, routing mode, and feature flags. Use listDevices to get the gatewayMac.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find the gateway MAC.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this a non-destructive read, so the description's job is to add context — and it does, by spelling out the configuration facets returned even though no output schema exists. It does not mention failure behavior for an unknown/incorrect MAC or permission scope, but that is a minor omission against the annotation coverage.

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

Conciseness5/5

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

Two sentences, front-loaded with what is fetched and the enumerated payload, followed by a single prerequisite pointer. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only lookup with no output schema, the description gives enough — it lists the returned facets and the MAC-sourcing prerequisite, while the schema covers site defaults. It falls just short of complete because it does not delimit the tool against the other gateway detail endpoints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are documented there, including the same listDevices hint and the default-site fallback. The description repeats the listDevices guidance rather than adding new meaning, so the baseline 3 is the right level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb ("Fetch") plus resource ("gateway") and enumerates the returned facets — model, firmware, CPU/memory, WAN/LAN ports, routing mode, feature flags — so an agent knows exactly what the call yields. It is implicitly distinguished from siblings like getSwitchDetail/getApDetail by the gateway scope, but it does not say how it differs from the other gateway-specific tools (getGatewayWanStatus, getGatewayLanStatus, getSitesGatewaysGeneralConfig).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use listDevices to get the gatewayMac" supplies a concrete prerequisite, which is real usage guidance. However, it never states when to choose this tool over the closely named gateway siblings, nor whether it is safe/appropriate to call in bulk or for a device that is not a gateway.

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

getGatewayHealthA
Read-only

Composite gateway health check — single call that auto-discovers the site gateway then retrieves its full detail (CPU, memory, firmware, ports), WAN port statuses (link state, IP, ISP), and LAN interface statuses. Use when diagnosing internet connectivity issues, WAN failover, or gateway performance problems. Optionally accepts a gatewayMac to skip discovery.

NameRequiredDescriptionDefault
siteIdNoOptional site ID. Uses default site if omitted.
gatewayMacNoOptional gateway MAC address. If omitted, the gateway is discovered automatically by listing site devices.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds real operational context beyond that — it discloses hidden discovery work ('auto-discovers the site gateway') and that supplying gatewayMac skips it. It does not say what happens when a site has no gateway or multiple gateways, nor how expensive the discovery listing is, but the composite nature and the discovery shortcut are meaningfully surfaced.

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

Conciseness5/5

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

Three sentences, front-loaded with the composite payload and its three components, then the diagnostic use cases, then the optimization hint. Every clause carries information an agent would act on; nothing is padding or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned fields (CPU, memory, firmware, ports, WAN link state/IP/ISP, LAN statuses), which is enough for an agent to know what it will get back. The only gap is failure behavior — no mention of the outcome when discovery finds no gateway or when siteId is invalid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both siteId and gatewayMac are already documented, including the default-site fallback and the auto-discovery behavior. The description's 'Optionally accepts a gatewayMac to skip discovery' largely restates the schema; it adds the framing of discovery as a cost to avoid but no new syntax or constraint details. Baseline 3 for a fully covered schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Composite gateway health check') and immediately enumerates the three data classes bundled: gateway detail (CPU, memory, firmware, ports), WAN port statuses, and LAN interface statuses. The word 'composite' distinguishes it from the granular siblings getGatewayDetail, getGatewayWanStatus, and getGatewayLanStatus without the agent needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggering conditions: 'diagnosing internet connectivity issues, WAN failover, or gateway performance problems.' That is solid when-to-use coverage. It stops short of naming the granular alternatives (getGatewayWanStatus, getGatewayLanStatus) as the choice for narrow single-aspect queries, leaving that 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.

getGatewayLanStatusA
Read-only

Get LAN port status for a specific gateway: port link state, speed, duplex, connected device, and VLAN assignment. Use listDevices to get the gatewayMac.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find the gateway MAC.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered; the description correctly stays consistent with that. It adds the returned field set, which is useful given there is no output schema, but says nothing about permissions, caching/freshness, or what an empty or offline port list looks like.

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

Conciseness4/5

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

Two sentences, front-loaded with the resource and its returned fields, followed by the one actionable prerequisite. No filler, though the listDevices hint is redundant with the schema and could have been spent on sibling routing instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only two-parameter tool with full schema coverage, the description is adequate: it names the return payload despite having no output schema, which is the main informational gap the agent would otherwise face. Missing is only clearer separation from getGatewayPorts/WAN-status siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains both siteId (default from OMADA_SITE_ID, use listSites) and gatewayMac (with format example). The description's 'Use listDevices to get the gatewayMac' duplicates the gatewayMac property description verbatim in substance, adding no new semantics. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb plus resource ('Get LAN port status for a specific gateway') with an explicit enumeration of what is returned: link state, speed, duplex, connected device, VLAN assignment. The word 'LAN' implicitly separates it from getGatewayWanStatus, but the description never names getGatewayPorts, which is the closest overlapping sibling, so differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is a prerequisite: 'Use listDevices to get the gatewayMac.' There is no statement of when to prefer this over getGatewayPorts, getGatewayWanStatus, or getUplinkWiredDetail, and no indication of failure conditions such as a gateway with no LAN ports. Usage is implied by the LAN-port framing rather than stated.

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

getGatewayPortsA
Read-only

Get all WAN and LAN port details for a specific gateway: link status, speed, IP address, bytes in/out, and port profile. More detailed than getGatewayWanStatus or getGatewayLanStatus. Use listDevices to get the gatewayMac.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find the gateway MAC.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. Beyond that, the description discloses the returned content (link status, speed, IP, bytes in/out, port profile), which matters because there is no output schema. It says nothing about pagination, error behavior for an unknown MAC, or size of the response, which keeps it below a 5.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose and returned fields, then the sibling comparison, then the prerequisite. Every sentence carries distinct information with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, two-parameter lookup tool, the description plus annotations and a fully described schema cover what an agent needs to invoke it correctly. The only remaining gap is behavioral detail about the response shape beyond the field list, which is minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters are fully documented there, including the siteId default and MAC format, so the baseline is 3. The description only repeats the listDevices hint already present in the gatewayMac schema field and adds no new meaning for siteId or the MAC format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get all WAN and LAN port details') and enumerates exactly what is included: link status, speed, IP address, bytes in/out, and port profile. It also distinguishes itself from the sibling tools getGatewayWanStatus and getGatewayLanStatus, so an agent can separate them without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions itself relative to alternatives ('More detailed than getGatewayWanStatus or getGatewayLanStatus'), giving a clear selection signal, and adds a prerequisite routing hint ('Use listDevices to get the gatewayMac'). It does not explicitly say when to prefer the lighter-weight siblings, but the comparative guidance is enough for correct routing.

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

getGatewayQosClassRulesB
Read-only

Get the gateway QoS class rules for a site, including traffic classification rules and DSCP/priority markings.

NameRequiredDescriptionDefault
pageNoPage number (1-based).
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of results per page (1–1000).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the payload includes classification rules and DSCP/priority markings, which is modest value beyond the annotations, but it says nothing about pagination of results or the default-site fallback behavior.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the resource identifier comes first and the returned content follows. It is efficient, though it stops short of adding any routing or behavioral detail that would make the length fully earned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a read-only getter with a fully documented three-parameter schema and annotations covering safety, and no output schema, so the description need not describe return values in detail. Its statement of returned content plus the schema's pagination and site defaults make it usable as-is, with only sibling differentiation missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, and siteId all documented in the schema itself, including the OMADA_SITE_ID fallback and the listSites discovery hint. The description contributes no additional meaning about these parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get the gateway QoS class rules for a site') and enumerates the content returned (traffic classification rules, DSCP/priority markings), so the agent knows exactly what is fetched. It does not distinguish itself from domain-adjacent siblings such as getQosPolicy, getTrafficPriority, or getAppControlRules, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this rather than getQosPolicy or getTrafficPriority, and no prerequisites or exclusions are given. The only context is implicit in the word 'gateway', leaving the agent to infer selection criteria.

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

getGatewayWanStatusA
Read-only

Get the WAN port status and connectivity information for a specific gateway. Returns WAN IP, DNS, uptime, link speed, TX/RX rates, and connection type for each WAN port. Use listDevices to find the gatewayMac.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find the gateway MAC.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real value beyond that by disclosing the shape of the response — per-WAN-port granularity and the specific metrics returned (IP, DNS, uptime, link speed, TX/RX, connection type) — which tells the agent this is a diagnostic snapshot rather than a config read.

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

Conciseness5/5

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

Three short sentences with no filler: purpose first, return contents second, parameter resolution third. It is front-loaded and every sentence carries information the agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of describing returns and does so adequately by listing the returned fields. Minor gaps remain: no note on behavior when the MAC is not a gateway or when a device has no WAN ports, but for a read-only diagnostic tool this is close to complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both gatewayMac and siteId are already documented in structured form, and the description's 'Use listDevices to find the gatewayMac' largely duplicates the schema text. It adds the per-port scoping notion but says nothing about siteId or the default-site fallback, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Get the WAN port status and connectivity information for a specific gateway') and enumerates exactly what comes back (WAN IP, DNS, uptime, link speed, TX/RX rates, connection type per port). Naming 'WAN port' implicitly separates it from the sibling getGatewayLanStatus, so an agent can pick it 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete prerequisite: use listDevices to resolve gatewayMac, which is useful operational routing. However, it offers no guidance on when to prefer this over getGatewayDetail, getSitesHealthGatewaysWansDetails, or getUplinkWiredDetail, all of which are nearby siblings that could plausibly return overlapping WAN information.

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

getGridAllowListA
Read-only

Get the IPS allow list (paginated). Returns entries that are explicitly allowed to bypass IPS inspection. Supports optional keyword search.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.
searchKeyNoOptional search keyword to filter IPS allow-list entries.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful domain context that these entries bypass IPS inspection and that results are paginated, but says nothing about ordering, default page contents, or permissions required.

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

Conciseness5/5

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

Three short sentences with zero waste; the core identity of the resource is front-loaded, followed by what the entries mean and the one optional filter. Nothing repeats the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only paginated list with full schema coverage and annotations, this is nearly complete. The only soft spot is the absence of any hint about returned entry fields, though no output schema exists to cover that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including siteId's default-config behavior and the pageSize range, so the schema does the heavy lifting. The description only maps loosely onto searchKey ('optional keyword search') and pagination, adding little beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the IPS allow list (paginated)') and clarifies the domain meaning of the entries as those explicitly allowed to bypass IPS inspection. It does not name the obvious counterpart sibling getGridBlockList, so an agent must infer the allow-list/block-list split on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it notes optional keyword search and pagination, but never says when to use this versus getGridBlockList or any other grid/ACL listing tool. No prerequisites or exclusions are given, leaving selection to inference from the name.

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

getGridAutoCheckUpgradeB
Read-only

Get the auto-check upgrade plan list showing scheduled firmware upgrade checks across devices. Useful for auditing upgrade schedules and identifying devices due for automatic firmware updates.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered without description help. The description adds that results are a plan/check listing rather than live device state, which is mildly useful, but says nothing about pagination behavior, result volume, or whether the list is grid-wide — notable gaps for a paginated 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.

Conciseness4/5

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

Two sentences, front-loaded with the core action and scope, with no redundant phrasing. The trailing 'Useful for...' sentence carries real routing value, though it could have been spent on sibling differentiation instead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only list tool with full schema coverage and annotations, the description is adequate but thin. It omits pagination semantics and any hint of the return shape (no output schema exists), and it does not clarify the 'Grid' scope implied by the name, which matters given several overlapping upgrade tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (page, pageSize) are documented with defaults and ranges in the schema itself. The description adds no meaning beyond the schema — it does not even mention that results are paged — so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get the auto-check upgrade plan list') and states the scope ('scheduled firmware upgrade checks across devices'). It is clear what the tool returns, but it never distinguishes itself from closely related siblings such as getFirmwareUpgradePlan or getUpgradeLogs, leaving the agent to guess which upgrade view to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence supplies use cases ('auditing upgrade schedules', 'identifying devices due for automatic firmware updates'), which is better than nothing. However, there is no explicit when-not guidance and no reference to the alternative upgrade-plan tools in the sibling set, so selection between them 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.

getGridBlockListA
Read-only

Get the IPS block list (paginated). Returns entries that are explicitly blocked by the Intrusion Prevention System. Supports optional keyword search.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.
searchKeyNoOptional search keyword to filter IPS block-list entries.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated and scoped to explicit IPS blocks, but says nothing about ordering, result volume, or whether implicit blocks are excluded from the count.

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

Conciseness4/5

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

Three short sentences with the core purpose front-loaded and no filler. The middle sentence partially restates the resource name with extra wording, a small redundancy but not wasteful enough to penalize heavily.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paginated list tool with full schema coverage and no output schema, the description covers what is needed to call it correctly. It could note the default-site fallback for siteId, but the schema already documents that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, siteId, and searchKey all documented in the schema itself. The description merely echoes pagination and keyword search at a high level, adding no syntax or matching-behavior detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('IPS block list'), and clarifies the result set is limited to entries explicitly blocked by the Intrusion Prevention System. That wording implicitly distinguishes it from allow-list siblings such as getGridAllowList, though no sibling is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer this is the tool for reviewing blocked IPS entries and that searchKey is optional. There is no explicit guidance on when to prefer this over getGridAllowList or the gateway/EAP rule tools, and no prerequisites are mentioned.

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

getGridClientHistoryA
Read-only

Get per-client connection history (paginated). Returns past connection sessions for a specific client including timestamps, SSID/network, traffic, and authentication type.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.
clientMacYesMAC address of the client to retrieve history for.
searchKeyNoSearch keyword to filter history entries.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the safety profile is covered without description help. The description adds real value by disclosing that results are paginated and what data classes come back, but says nothing about default/maximum page size behavior, empty-result semantics for unknown MACs, or retention window for history.

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

Conciseness5/5

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

Two short sentences, front-loaded with the operation and its pagination trait, followed by the return payload. No filler, hedging, or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by naming the returned fields, which is the main thing an agent needs. The remaining gap is disambiguation from the near-identical sibling listClientsPastConnections and any note about how far back history extends.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, siteId, clientMac and searchKey all documented in-schema, including defaults, ranges, and the listSites hint for siteId. The description only reinforces 'paginated' and 'specific client', adding no format or syntax detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Get per-client connection history") and enumerates the returned fields (timestamps, SSID/network, traffic, authentication type), which clearly distinguishes it from generic list tools like listClients. However, it never distinguishes itself from the closely named sibling listClientsPastConnections, which an agent could easily confuse with it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the required clientMac parameter plus the phrase "for a specific client" signals this is the per-client drill-down, whereas listClients/listClientsPastConnections are broader. There is no explicit statement of when to prefer one over the other, and no mention of prerequisites such as needing a valid MAC from listClients.

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

getGridEapRuleA
Read-only

Get the URL filter AP rules (paginated). Returns URL-based filtering rules applied to wireless clients via access points.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated and the domain of the returned rules, but says nothing about ordering, default page size, or total-count behavior beyond what the schema states.

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

Conciseness4/5

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

Two short sentences with the resource and pagination note front-loaded; no filler. Slightly redundant in that the second sentence largely restates what the first already conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-parameter paginated list tool with fully documented parameters and no output schema, the description covers what is returned and its scope adequately. The only real gap is routing guidance relative to the many similar URL-filter and ACL siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, and siteId fully documented including defaults, ranges, and a pointer to listSites. The description only echoes 'paginated' and adds no meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get URL filter AP rules) and clarifies the scope as rules applied to wireless clients via access points. An agent can distinguish this from generic URL filter tools by the AP/wireless framing, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the phrase 'applied to wireless clients via access points'. No explicit when-to-use, when-not-to-use, or comparison against likely alternatives such as getUrlFilterRules, getUrlFilterBlacklist, or listEapAcls, which appear 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.

getGridGatewayRuleB
Read-only

Get the URL filter gateway rules (paginated). Returns URL-based filtering rules applied to traffic through the gateway.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated and describes the subject matter of the returned rules, but says nothing about ordering, default scope, or how many rules typically exist beyond what the schema states.

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

Conciseness4/5

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

Two short, front-loaded sentences with no filler. The second sentence partially restates the first ('URL filter gateway rules' vs 'URL-based filtering rules applied to traffic through the gateway'), but the cost is minimal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, fully-annotated read tool with complete schema documentation, the definition is adequate but thin. With no output schema present, the description could have sketched the rule fields returned or clarified site scoping, which it leaves entirely to the schema's siteId text.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, and siteId all documented in the schema including defaults, ranges, and the listSites discovery hint. The description's only parameter-relevant contribution is the word 'paginated', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get the URL filter gateway rules') and confirms it is paginated, so an agent knows what is being fetched. However, it never distinguishes this from close siblings such as getUrlFilterRules, getGridEapRule, or getGridAllowList/getGridBlockList, leaving the 'Grid/Gateway' naming ambiguous relative to the URL-filter family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is offered: there is no statement about which sibling to call for EAP-level rules versus gateway-level rules, nor for allow-list/block-list variants. Usage can only be inferred from the phrase 'applied to traffic through the gateway'.

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

getGridKnownClientsA
Read-only

Get historical known clients list (paginated). Returns clients that have previously connected to the site, with optional time range and search filtering.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
guestNoFilter by guest status ("true" or "false").
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
timeEndNoFilter end time (Unix epoch milliseconds as string).
pageSizeNoNumber of entries per page. Range: 1-1000.
searchKeyNoSearch keyword to filter clients by name, MAC, or IP.
timeStartNoFilter start time (Unix epoch milliseconds as string).
sortLastSeenNoSort direction for lastSeen field (e.g. "asc" or "desc").

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated and filterable by time range and search, but says nothing about default paging behavior, result caps, or response shape beyond the one-line return summary.

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

Conciseness4/5

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

Two short sentences with the core identity and pagination front-loaded, and no filler. Slightly more room could have been used to route agents away from overlapping siblings instead of restating the filter set.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does state what the call returns (previously connected clients) and that results are paginated. All eight parameters are documented in the schema, so the main remaining gap is sibling disambiguation rather than missing mechanics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all eight parameters, including defaults for page and pageSize, ranges, and a siteId note pointing to listSites. The description only restates the time-range and search filters generically, adding no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get historical known clients list') and adds scope ('clients that have previously connected to the site'). It does not, however, distinguish itself from close siblings such as listClients, listClientsPastConnections, or getGridClientHistory, which an agent would need to tell apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through 'historical' and 'previously connected', suggesting this is for past/known client retrieval rather than live clients. There is no explicit when-to-use or when-not-to-use guidance, and no baseline alternative (e.g. listClients for current clients) is named despite several overlapping siblings.

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

getIspLoadA
Read-only

Get per-WAN ISP link load over a time range. Shows traffic volume and utilization per internet uplink. Useful for understanding load balancing behaviour, identifying saturated WAN links, and analysing failover events. start and end are Unix timestamps in seconds.

NameRequiredDescriptionDefault
endYesEnd of the time range as a Unix timestamp in seconds (e.g. Math.floor(Date.now() / 1000)). Must be paired with start.
startYesStart of the time range as a Unix timestamp in seconds (e.g. Math.floor(Date.now() / 1000) - 3600 for the last hour). Must be paired with end.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a meaningful behavioral detail — that results are broken out per uplink and include both volume and utilization — but says nothing about retention limits, aggregation granularity, or behavior when a link had no traffic in the window. Consistent with, and additive to, the annotations.

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

Conciseness4/5

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

Three compact sentences with the core capability front-loaded, followed by the return content and use cases. No filler or repetition. Slight redundancy in restating timestamp units already covered by the schema keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only three parameters, full schema coverage, and a read-only annotation set, the description supplies what is missing: what the response conceptually contains (per-link volume and utilization). It does not cover retention windows or data granularity, and since there is no output schema, a bit more on the shape of results would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and every parameter (start, end, siteId) is documented in the schema, including the siteId fallback to OMADA_SITE_ID and the listSites pointer. The description's note that 'start and end are Unix timestamps in seconds' merely repeats what the schema already states, so it adds no new meaning. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get per-WAN ISP link load over a time range') and clarifies the output subject ('traffic volume and utilization per internet uplink'). An agent can distinguish it from generic WAN-detail tools like getGatewayWanStatus or getUplinkWiredDetail by the 'load/utilization over time' framing, though it never explicitly names or contrasts those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It offers three scenarios ('understanding load balancing behaviour, identifying saturated WAN links, analysing failover events'), which gives implied when-to-use context. However, there is no explicit guidance on when NOT to use it, no mention of alternatives such as getUplinkWiredDetail or getSpeedTestResults, and no stated prerequisites for the time range.

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

getMacFilterDetailB
Read-only

Get the MAC filtering global settings for a site, including whether MAC filtering is enabled and the default action for unmatched clients.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the settings are 'global' for a site and names the two values returned, which is useful behavioral context, but it says nothing about pagination, error behavior when MAC filtering is unconfigured, or what other fields come back.

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

Conciseness4/5

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

A single sentence that front-loads the resource and then enumerates the returned values, with no filler or redundancy. It could be marginally tighter only by routing to a sibling, not by cutting any existing clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, zero-required, read-only getter with full schema coverage and no output schema, the description supplies enough to call it correctly and to know roughly what comes back. The only meaningful gap is not situating it among the many ACL/allow-list siblings, which matters given how many near-neighbors exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the siteId parameter is documented thoroughly, including the config fallback and a pointer to listSites. The description adds nothing about siteId, so it neither compensates nor detracts; the baseline of 3 applies since the schema does all the work for the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and resource ('MAC filtering global settings') and enumerates the two pieces of information returned (enabled flag, default action for unmatched clients). It is clear what the tool retrieves, though it never names or distinguishes itself from the ACL/allow-list/block-list siblings (getGridAllowList, getOswAclList, getAclConfigTypeSetting), so an agent must infer which MAC-control tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no mention of the closely related ACL/allow-list tools in the sibling set. The read-only nature is only implied by the word 'Get', leaving the agent to infer that this is a configuration-inspection call rather than a policy-management call.

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

getMeshStatisticsA
Read-only

Get mesh link statistics for an access point. Returns wireless backhaul link quality, signal strength, throughput, and hop count for mesh-connected APs. Useful for diagnosing mesh network performance.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds value beyond that by disclosing the specific return fields (link quality, signal strength, throughput, hop count) in the absence of an output schema, and by implicitly scoping results to mesh-connected APs — behavior an agent needs to interpret empty or non-applicable results. It does not address what happens for a non-mesh AP or whether results are live vs. cached.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and resource, followed by return fields and usage. Nothing is redundant, though the final sentence is the weakest and could be folded into the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only diagnostic tool with no output schema, the description supplies the returned metrics and the mesh-only scope, which is what an agent needs to call and interpret it. The remaining gap — non-mesh AP behavior and error/empty-result handling — is minor given the read-only annotations and fully documented schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: apMac includes a format pattern plus a pointer to listDevices, and siteId explains the OMADA_SITE_ID default and listSites. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("Get mesh link statistics for an access point") and enumerates the returned metrics, so the agent knows exactly what it retrieves. It implicitly separates itself from wired/uplink siblings by scoping to "mesh-connected APs," but never names an alternative tool such as getUplinkWiredDetail, keeping it 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Useful for diagnosing mesh network performance" gives a general usage context but no explicit when-to-use vs. when-not, no prerequisites, and no named alternative for wired-link diagnosis. The agent must infer that this only applies to mesh backhaul APs from the return-field list rather than from a stated condition.

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

getNetworkHealthSummaryA
Read-only

Composite health snapshot — single call that combines dashboard overview (device/client counts, connectivity), internet/WAN status, client distribution, and recent active threats. Use this as the first call when checking if everything is working or when starting any troubleshooting session. Individual sections gracefully degrade if an endpoint is unavailable.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond that: multi-endpoint aggregation in a single call, and that 'individual sections gracefully degrade if an endpoint is unavailable' — important for interpreting partial results. It stops short of describing pagination, response shape, or latency, which keeps it at 4 rather than 5.

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

Conciseness4/5

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

Three sentences, front-loaded with what the tool is and what it returns, then when to use it, then a caveat about degradation. No filler. Slightly dense section enumeration in sentence one, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an aggregator with one optional parameter and no output schema, the description covers purpose, recommended call ordering, contents, and failure semantics. What is missing is any signal about result size or that the response is a composite envelope of sections, which would help an agent parse it without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — siteId is fully documented in the schema, including the default-site fallback and the pointer to listSites. The description adds nothing about the parameter, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('composite health snapshot — single call') and enumerates exactly what is aggregated: dashboard overview counts, internet/WAN status, client distribution, and active threats. This clearly differentiates it from narrower siblings such as getDashboardOverview or getGatewayHealth, which return only one of those sections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage guidance: 'Use this as the first call when checking if everything is working or when starting any troubleshooting session.' That is a strong positive routing rule, though it never names when to skip it in favor of the individual section tools (e.g., getDashboardOverview or getClientsDistribution) once the agent has drilled into a specific area.

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

getOsgCustomAclListA
Read-only

Get the custom gateway ACL rules list (paginated). Custom ACLs extend the standard gateway ACL rules with user-defined traffic policies.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare a safe read operation, so the bar is lower. The description adds the domain context that custom ACLs layer user-defined policies on top of standard gateway ACLs, but says nothing about result ordering, total counts, or behavior when no custom ACLs exist.

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

Conciseness4/5

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

Two short sentences, front-loaded with the verb and resource; the second sentence earns its place by defining what a custom ACL is. The '(paginated)' parenthetical is only marginally useful given the schema already exposes paging params.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read-only, zero-required-parameter list tool with full schema coverage and safety annotations needs little more than this. The definition covers purpose and domain context adequately; only return-shape expectations are unaddressed, which is acceptable without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, pageSize, and siteId are fully documented in the schema itself. The description only echoes 'paginated' and adds no syntax, default, or site-targeting detail beyond that baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get the custom gateway ACL rules list') and adds a scope qualifier (paginated, custom vs. standard). An agent can tell it apart conceptually from listOsgAcls/getOswAclList, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Custom ACLs extend the standard gateway ACL rules' implies that standard ACL retrieval lives elsewhere, giving implicit routing guidance. However, there is no explicit when-to-use/when-not-to-use statement, no prerequisites, and no named alternative.

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

getOswAclListA
Read-only

Get the switch ACL list (paginated). Returns per-port or VLAN-based access control rules applied to managed switches.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the result is paginated and describes the nature of the returned rules, which is useful, but it does not cover ordering, total counts, or what an empty result means for a switch with no ACLs.

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

Conciseness5/5

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

Two sentences, zero filler, with the resource and pagination stated up front and the returned content clarified immediately after. Nothing repeats the schema or the annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, fully optional-parameter read tool with no output schema, the description gives just enough to know what is returned at a high level, but it omits the shape of the returned rule objects (fields, whether ports/VLAN IDs appear) that an agent would need since no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: page, pageSize (with range and default), and siteId (with pattern and a pointer to listSites) are all documented in the schema. The description adds nothing about parameter semantics beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Get the switch ACL list") and scopes the content as "per-port or VLAN-based access control rules applied to managed switches," which distinguishes it from the sibling ACL tools for gateways and EAPs (getOsgCustomAclList, listOsgAcls, listEapAcls) without naming them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word "switch" implies this is the tool for switch-side ACLs rather than gateway/EAP ACLs, but no alternative is named and no when-not-to-use condition or prerequisite is stated. Usage is inferable from the scope rather than explained.

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

getOswStackLagListA
Read-only

Get Link Aggregation Group (LAG) list for a switch stack. Returns configured LAG/trunk groups including member ports, load balancing mode, and status. Use getSwitchStackDetail to get the stackId.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
stackIdYesStack ID of the switch stack. Use getSwitchStackDetail to find the stackId.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine value by describing the payload shape (configured LAG/trunk groups with member ports, load balancing mode, and status), which is necessary since there is no output schema. It omits edge cases such as behavior when no LAGs are configured or whether disabled/unconfigured groups are included.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and scope, then the return contents, then the prerequisite. No redundant or filler wording; each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list tool with no output schema, the definition covers what is returned, the scoping resource, and how to obtain the required ID. Minor gaps remain around empty-result behavior and how siteId affects resolution, but nothing blocks a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both siteId and stackId fully documented in the schema, and the description largely repeats the stackId guidance already present there. It says nothing about siteId or how the default-site fallback interacts with a stackId lookup, so no meaning is added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (LAG list) scoped to a switch stack, and enumerates what the result contains (member ports, load balancing mode, status). It does not distinguish itself from adjacent siblings such as getStackNetworkList or listSwitchNetworks, which an agent may reasonably confuse for related stack-level list calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete prerequisite chain: use getSwitchStackDetail to obtain the stackId. It does not state when to prefer this over the other stack/network listing tools, nor any when-not conditions, so selection against alternatives still requires inference.

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

getPastClientNumB
Read-only

Get historical client count trend over a time range. Returns a time-series of client counts to show how connected devices changed over the specified period. Requires start and end as Unix epoch seconds.

NameRequiredDescriptionDefault
endYesEnd of the time range as Unix epoch seconds.
startYesStart of the time range as Unix epoch seconds.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral fact that the result is a time-series rather than a scalar snapshot, but it says nothing about granularity, bucketing, aggregation, latency, or whether large ranges are truncated.

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

Conciseness4/5

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

Three sentences, front-loaded with the core purpose. There is mild redundancy between "over a time range" and "over the specified period" plus a restatement of the epoch-second format, but nothing that obscures the intent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter read tool with no output schema, the description covers what is returned (a time-series of client counts) and the required inputs, which is enough to call it correctly. Only the resolution/aggregation semantics of the series are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the siteId fallback to OMADA_SITE_ID and the listSites discovery hint, so the schema carries parameter meaning fully. The description only restates that start and end are Unix epoch seconds, adding no semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ("Get historical client count trend") and states the unit of return (a time-series of connected-device counts), so an agent knows exactly what it retrieves. It does not, however, distinguish itself from plausible siblings such as getGridClientHistory, getClientsDistribution, or listClientsPastConnections, which a reader would have to open to disambiguate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance beyond the trivial requirement of a time range, and no mention of which sibling to prefer for a different client-count view. The only conditional information presented (start/end required, epoch seconds) is already in the schema.

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

getQosPolicyB
Read-only

Get the gateway QoS policy (tag outbound traffic settings) for a site, including DSCP marking rules for outbound traffic.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the payload contains DSCP marking rules for outbound traffic, which is useful content context, but says nothing about whether a default site is silently substituted or what happens when no policy is configured. The schema covers the siteId default, so this is a modest addition rather than 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.

Conciseness4/5

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

One compact sentence with the resource named first, which is the right front-loading for a lookup tool. The phrase 'outbound traffic' appears twice, which is slightly redundant, but nothing else is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-optional-parameter getter with no output schema, the description supplies enough: what is fetched, at which scope, and the headline content (DSCP rules for outbound traffic). Only the absent-configuration behavior and the relationship to overlapping QoS tools are left uncovered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single siteId parameter is fully documented in the schema, including the default-site fallback and the listSites discovery hint. The description adds no syntax or meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get the gateway QoS policy) scoped to a site, and parenthetically clarifies the content as outbound traffic tagging with DSCP marking rules. It is clearly a read of gateway-level QoS rather than the AP-level or class-rule siblings, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no routing to alternatives such as getApQosConfig, getGatewayQosClassRules, or getTrafficPriority, all of which live in the same domain and are easy to confuse with this tool. The only usage signal is the implicit 'read a site's QoS policy' framing.

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

getRadiosConfigA
Read-only

Get per-radio configuration for an access point. Returns settings for each radio (2.4GHz, 5GHz, 6GHz) including band, channel, transmit power, channel width, and enabled SSIDs. Use getApRadios for runtime radio status; this returns configuration.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral context by enumerating the returned configuration fields and contrasting configuration versus runtime state, which goes beyond the annotations. It does not mention pagination or error behavior, but neither is material for a per-AP read.

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

Conciseness5/5

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

Three tight sentences with the core purpose front-loaded, followed by return contents and then the disambiguation from the sibling. No redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned settings, and it covers the distinction from the closest sibling plus the MAC prerequisite via the schema. Nothing an agent needs to call this correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (apMac, siteId) are documented including format and discovery hints in the schema itself. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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-radio configuration for an access point') and immediately clarifies the returned data (band, channel, transmit power, channel width, enabled SSIDs). It explicitly differentiates itself from the sibling getApRadios, so an agent can distinguish the two without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names the alternative (getApRadios) and states the exact condition that selects it: runtime radio status versus configuration. The schema also points to listDevices for obtaining the apMac, covering the prerequisite for invocation.

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

getRadiusProxyConfigA
Read-only

Get the global RADIUS proxy configuration from the controller, including proxy enabled state and server settings.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally. The description adds useful content context by naming what the payload includes (proxy enabled state and server settings), but says nothing about permissions, sensitivity of RADIUS secrets, or response shape. Given annotation coverage, 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.

Conciseness4/5

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

A single front-loaded sentence with the verb and resource leading. 'From the controller' is mildly redundant given the tool name, but it usefully clarifies the source of truth; the trailing clause listing the returned fields earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with no output schema, the description covers enough: what is fetched, from where, and roughly what the response contains. Additional detail such as error behavior when no proxy is configured would help, but is not essential to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics to explain and the baseline of 4 applies. Nothing in the description conflicts with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and a specific resource ('global RADIUS proxy configuration from the controller'), and the 'global' qualifier distinguishes it from any per-site configuration. No sibling tool in the list covers RADIUS proxy, so the resource itself does the differentiation, though the description never names a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the 'global' qualifier suggests this is the controller-wide view rather than a site-scoped one, but there is no explicit when-to-use, when-not, or alternative tool referenced. An agent can infer the use case from the name and description, which is the definition of minimum-viable guidance.

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

getServerCapabilitiesA
Read-only

Report this server version, effective catalog, profile and validation limits. Does not claim live controller compatibility.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds a genuine caveat beyond the annotations — that it does not claim live controller compatibility — which sets correct expectations, but it says nothing about freshness of the reported limits or any cost/latency of the call.

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

Conciseness5/5

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

Two short sentences with no filler, and the primary content (what gets reported) is front-loaded ahead of the caveat. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only introspection tool with no output schema, the description adequately signals the categories of data returned. A slightly richer account of the return shape would help, but the absence of an output schema is a minor gap for a tool this simple.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The description does not misrepresent any inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ("Report") and enumerates the concrete resources returned: server version, effective catalog, profile and validation limits. That distinguishes it from every sibling tool, which are all device/network data readers, though it never explicitly says it is a server-introspection/metadata tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool to call to learn what the server supports. There is no explicit statement of when to prefer it, no mention of calling it first before other operations, and no named alternative it replaces.

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

getSitesApsAvailableChannelB
Read-only

Get available channels for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already establish that this is a read-only, non-destructive operation. The description adds only the basic notion of retrieving available channels and does not explain the return shape, whether results are per radio/band, prerequisites, or any rate/permission behavior.

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

Conciseness5/5

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

The definition is a single front-loaded sentence with no wasted wording. It is concise and easy to scan, even though brevity contributes to gaps assessed under other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with full schema coverage and read-only annotations, the definition is minimally adequate. However, it does not characterize the returned 'available channels' data and has no output schema to compensate, leaving a meaningful gap for an agent invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both apMac and siteId in detail, including examples and discovery hints. The description adds no parameter meaning beyond the schema baseline, so a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: getting available channels for an AP. It is clear enough for an agent to understand the core operation, but it does not distinguish this tool from related siblings such as getSitesApsChannelLimit or getApRadios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no when-not-to-use guidance, and no alternatives named. The only usage information is implied by the phrase 'for an AP', which is insufficient given the many adjacent channel, radio, and AP-configuration tools.

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

getSitesApsBridgeC
Read-only

Get P2P bridge config for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered externally. The description adds nothing further — no indication of what the bridge config contains, whether it can be empty, or what errors occur for an AP without bridging enabled.

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

Conciseness4/5

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

A single short sentence with the resource front-loaded and no redundant wording. It is efficient, though its brevity borders on under-specification rather than optimal tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description is the only place to explain what 'P2P bridge config' returns, yet it does not. For a simple read tool with fully documented params this is not fatal, but the undefined jargon leaves an agent unable to predict the shape or content of the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: apMac has a pattern and example plus a pointer to listDevices, and siteId documents the OMADA_SITE_ID default and listSites. The description contributes no extra parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('Get') and a specific sub-resource ('P2P bridge config for an AP'), which distinguishes it from generic AP getters like getApDetail or getApUplinkConfig in the sibling list. It stops short of naming a sibling, but the resource is narrow and identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus the many other AP config getters (getApVlanConfig, getApQosConfig, etc.), and no prerequisites or exclusions are mentioned. The agent must infer usage purely from the resource name.

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

getSitesApsChannelLimitC
Read-only

Get channel limit config for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say whether the limit is per-radio or per-AP, what happens when no limit is configured, or what the config payload resembles, which is the kind of context a getter description should supply.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler or repetition. It is efficient, though its brevity contributes to the gaps noted elsewhere rather than being a defect of structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a low-complexity, two-parameter, read-only getter with fully documented parameters and no output schema, so the burden on the description is modest. Still, it says nothing about the returned config or the unset case, which an agent would want before relying on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions are strong, including the MAC pattern, the default-site fallback for siteId, and cross-references to listDevices and listSites. The description adds no meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and a specific resource ('channel limit config') scoped to an AP, which is enough to tell it apart from most getters. It does not, however, distinguish it from the near-sibling getSitesApsAvailableChannel or clarify what 'channel limit' means (allowed-channel list vs. per-radio limit), leaving a small ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no pointer to alternatives such as getSitesApsAvailableChannel or getRadiosConfig. The agent must infer from the name alone when this getter applies.

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

getSitesApsIpSettingC
Read-only

Get IP settings for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.7/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not say what settings are returned, whether the AP must be online, or how the per-site scoping behaves.

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

Conciseness4/5

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

A single front-loaded sentence with zero redundancy. It is efficiently structured, though the brevity comes at the cost of specificity rather than being padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with full schema coverage and annotations, the definition is minimally viable. It is still thin on what the returned IP settings include and how it differs from the many sibling AP-configuration getters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both apMac and siteId are documented in the schema with format hints and pointers to listDevices/listSites. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get IP settings for an AP), so the basic action is clear. However, it does not distinguish this from close siblings such as getApIpv6Config, getApGeneralConfig, or getApVlanConfig, leaving ambiguity about whether 'IP settings' means IPv4 address, DHCP mode, or something else.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of any alternative tool. An agent must infer from the name alone that this is the tool for AP IP configuration rather than IPv6 or general AP config.

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

getSitesApsLoadBalanceC
Read-only

Get load balance config for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that—no note on what the config contains, whether it requires the AP to be online, or any failure behavior. For a read-only getter the bar is lower, but zero added context earns a 2.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted words. It is terse to the point of under-specification, but structurally clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple read-only getter with fully documented parameters and no output schema, so the description needn't explain return values. However, 'load balance config' is left undefined, so the agent cannot anticipate what fields come back or how to interpret them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with apMac and siteId fully documented including format examples and discovery hints (listDevices, listSites). The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (load balance config) scoped to an AP, so the agent knows what it retrieves. It does not differentiate from the many sibling getAp*Config tools (getApUplinkConfig, getApQosConfig, etc.), leaving the agent to infer which config this covers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives among the numerous AP config getters. The agent must guess that this is the right tool for load-balance settings versus other AP config tools.

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

getSitesApsOfdmaC
Read-only

Get OFDMA configuration for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally, and the description merely restates that with the word "Get." It adds no context about what the OFDMA configuration contains (per-radio settings, enabled/disabled state), whether it requires the AP to be online, or how errors surface for an unknown MAC.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler, which is efficient. The brevity borders on under-specification rather than verbosity, but there is no wasted wording to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with fully documented parameters and clear safety annotations, this is close to sufficient. Still, with no output schema, an agent gets no sense of the shape or granularity of the returned OFDMA configuration, which is the one meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the MAC pattern and example plus the default-site fallback behavior, so the schema carries the parameter semantics fully. The description contributes nothing beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (get OFDMA configuration) scoped to an AP, which is unambiguous on its own. It does not, however, distinguish itself from the many sibling getters such as getRadiosConfig or getApQosConfig, so an agent must rely on the name alone to pick it out of the AP-config cluster.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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, nor any noted prerequisites. The only routing help (use listDevices to find AP MACs, listSites for site IDs) lives in the schema parameter descriptions, not the tool description.

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

getSitesApsPowerSavingB
Read-only

Get power saving config for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered and the description does not contradict it. Beyond that the description adds nothing: no statement of what the config contains, whether it is site-scoped or device-scoped, or what happens when the AP is offline.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; nothing is redundant or buried. The brevity is a structural strength even though content is thin elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only, two-parameter getter with 100% schema coverage and no output schema, the description covers the essentials of what is retrieved. The remaining gap is which fields the power saving config returns, which is minor at this complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both apMac (with format and a listDevices pointer) and siteId (with default-site fallback and listSites pointer) are already fully documented in the schema. The description adds no syntax, format, or defaulting information beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Get') and a specific resource ('power saving config for an AP'), which is more precise than the ambiguous tool name. However, it never distinguishes this from the many sibling AP-configuration getters (getApGeneralConfig, getSitesApsLoadBalance, getSitesApsOfdma), so an agent must infer the boundary from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives or when not to use it. The only routing help ('Use listDevices to find AP MACs') lives in the schema, not the description.

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

getSitesApsTrunkSettingC
Read-only

Get trunk setting for an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond restating the title: it doesn't say what the trunk setting contains, whether an AP without trunk config returns empty, or anything about per-site scoping.

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

Conciseness3/5

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

One short sentence is front-loaded and free of padding, but it is terse to the point of under-specification rather than genuinely concise. There is room for a clause explaining what a trunk setting is in this domain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining what comes back, and it doesn't. An agent knows only that some trunk setting is retrieved for a given AP MAC; it cannot anticipate the shape or interpret an empty result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the two parameters (apMac, siteId) are fully documented with formats and discovery hints in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ("Get") and a resource ("trunk setting for an AP"), so the basic purpose is inferable. However, "trunk setting" is left undefined, and among dozens of sibling tools like getApUplinkConfig, getSitesApsBridge, and getApGeneralConfig there is nothing to tell an agent which AP setting family this returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 the many adjacent AP-configuration getters, nor any stated prerequisites. The only routing help (use listDevices / listSites) lives in the schema, not the description.

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

getSitesDeviceWhiteListC
Read-only

Get the device whitelist for a site.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no mention of pagination behavior (despite page/pageSize), result ordering, or what an empty whitelist looks like, which is all the more relevant since there is 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.

Conciseness4/5

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

A single front-loaded sentence with zero filler. It is efficient, though its brevity is partly the cause of the missing usage and behavioral detail rather than a sign of disciplined compression.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, zero-required-parameter list tool with fully documented schema and no output schema, the description is minimally viable. However, it omits pagination semantics and return shape, and gives no hint about how 'device whitelist' differs from the many adjacent allow-list tools, leaving real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page, pageSize, and siteId all fully documented including defaults, bounds, pattern, and the listSites discovery pointer. The description contributes no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieve the device whitelist for a site. It is clear what the tool returns conceptually, but it does not differentiate itself from nearby defensive/allow-list siblings such as getGridAllowList, getGridBlockList, or getUrlFilterWhitelist, so an agent must infer the distinction from names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 — nothing distinguishes it from the many other whitelist/ACL retrieval tools in the sibling list. The only implied usage is the schema's note that siteId falls back to a configured default, which is not repeated or expanded in the description.

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

getSitesGatewaysGeneralConfigC
Read-only

Get gateway general config.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find gateway MACs.

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is carried by structured data. The description adds nothing further: it does not say what configuration fields are returned, whether the call is cached, or whether it requires the gateway to be online.

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

Conciseness3/5

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

It is a single sentence with no wasted words, but the brevity comes from omission rather than efficiency. There is no front-loaded scope statement or qualifier to anchor the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters, full schema coverage, annotations, and no output schema, the structured fields carry most of the load — but the description still leaves the tool's scope ambiguous against several sibling getGateway* and *GeneralConfig tools. A single clause describing what 'general config' contains would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the parameter descriptions already explain the siteId default via OMADA_SITE_ID and point to listSites/listDevices for discovery. The description adds no meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description essentially restates the tool name: 'Get gateway general config' adds no information beyond getSitesGatewaysGeneralConfig. It does not distinguish this from close siblings such as getGatewayDetail, getSwitchGeneralConfig, or getApGeneralConfig, so an agent cannot tell which 'general config' surface it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all — no condition that selects this over getGatewayDetail, getGatewayWanStatus, or getGatewayLanStatus. The agent must infer scope purely from the name and the gatewayMac/siteId parameters.

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

getSitesGatewaysPinB
Read-only

Get PIN setting for a gateway (LTE model).

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find gateway MACs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description contributes the LTE-model applicability constraint, which is not in the annotations, but adds nothing about permissions, error behaviour, or what the PIN value represents (device PIN vs SIM PIN).

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

Conciseness4/5

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

A single short sentence with the resource front-loaded and no filler. It is efficient, though the terseness comes at the cost of context rather than being maximally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple two-parameter read with no output schema and covered annotations, so the description does not need to explain return values. However, it leaves the key ambiguity of what a gateway "PIN setting" actually is, which matters for an agent deciding whether this is the right tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: siteId's default-site fallback and gatewayMac's format plus the listDevices discovery hint are all documented in the schema. The description adds no meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ("Get PIN setting for a gateway") and adds a scoping qualifier ("LTE model") that separates it from the many other getSitesGateways* siblings. It does not explicitly name a neighbouring alternative, but the resource is narrow enough that an agent can identify what it retrieves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 parenthetical "(LTE model)" is an implied applicability constraint but it is never stated as a rule, leaving the agent to infer that non-LTE gateways are out of scope.

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

getSitesGatewaysSimCardUsedC
Read-only

Get SIM card used by a gateway.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find gateway MACs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond them — no indication of what SIM data is returned, whether the gateway must be online, or any failure behavior. With annotations present, the bar is lower, but this adds zero extra context.

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

Conciseness4/5

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

A single short sentence with no wasted words, but it is so terse that nothing is front-loaded beyond the bare purpose. Efficient though under-informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only two-parameter tool with full schema coverage and no output schema, the description is minimally adequate. It doesn't clarify what the SIM card result contains, which would help an agent decide whether to call it, but complexity is low enough that this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (siteId and gatewayMac) are fully documented with patterns and discovery hints (listSites, listDevices) in the schema itself. The description adds no meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieves the SIM card information used by a gateway. An agent can distinguish this from siblings like getGatewayDetail or getGatewayWanStatus, though it doesn't explicitly say how it differs from those broader gateway tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no when-to-use guidance, no prerequisites, and no mention of alternatives. It doesn't explain when to prefer this over getGatewayDetail or other gateway queries.

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

getSitesHealthGatewaysWansDetailsB
Read-only

Get WAN port health details for a gateway.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
gatewayMacYesMAC address of the gateway (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find gateway MACs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the scope ('WAN port health details'), and says nothing about what the health details contain, whether data is live or historical, or any rate/permission constraints.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is appropriate for a simple two-parameter read tool. It is efficient but borders on under-specified rather than maximally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with full schema coverage and annotations, the description is adequate but thin: it never clarifies what 'health details' includes or how it differs from the other gateway health tools. No output schema exists, so a brief note on the returned data would have helped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself explains siteId fallback behavior and how to find gateway MACs via listDevices. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 WAN port health details') scoped to a gateway, so an agent knows exactly what data it returns. It does not, however, distinguish itself from close siblings such as getGatewayWanStatus or getGatewayHealth, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 getGatewayWanStatus, getGatewayHealth, or getGatewayDetail, all of which appear in the sibling list. The agent must infer the distinction from names alone.

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

getSitesSwitchesEsC
Read-only

Get easy managed switch info.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral detail beyond that — it doesn't say what data is returned, whether it is site-scoped, or how it differs from a full switch detail read.

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

Conciseness3/5

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

One short sentence with no wasted words, but it is under-specified rather than concise. Brevity here costs information rather than saving it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is the only place to learn what 'info' comprises, and it says nothing. For a per-switch lookup tool that overlaps heavily with switch siblings, this leaves the agent unable to judge what it will get back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; both siteId and switchMac are documented with patterns and discovery hints (listSites, listDevices). The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description has a verb ('Get') and a resource ('easy managed switch info'), and 'easy managed' hints at a specific switch class. But 'info' is vague about what is actually returned, and nothing distinguishes it from the many sibling retrieval tools such as getSwitchDetail or getSitesSwitchesEsGeneralConfig.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 rather than getSwitchDetail, getSwitchGeneralConfig, or the other switch-related siblings. The agent must infer the use case 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.

getSitesSwitchesEsGeneralConfigC
Read-only

Get easy managed switch general config.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered elsewhere; the description adds nothing on top of that. It does not say what the 'general config' payload contains, whether it differs by switch model, or whether a device must be online — all meaningful for a read tool with 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.

Conciseness3/5

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

A single short sentence with no padding, but it is terse to the point of under-specification rather than efficiently informative. Nothing is front-loaded beyond a bare restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description was the only place to explain what the returned config actually contains, and it omits that entirely. Given the sibling getSwitchGeneralConfig and the ambiguity of the 'Es' scope, an agent lacks the information needed to call this with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters carry explicit guidance (siteId fallback to OMADA_SITE_ID, switchMac format and listDevices pointer), so the schema does the heavy lifting. The description contributes no additional parameter meaning, which is the expected baseline of 3 at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb ('Get') and a resource ('easy managed switch general config'), so the broad intent is retrievable, but 'easy managed' / 'Es' is unexplained jargon and the description never distinguishes this from the sibling getSwitchGeneralConfig. An agent cannot tell from the text which of the two switch-config tools applies to a given device.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 rather than getSwitchGeneralConfig, getSwitchDetail, or getSitesSwitchesEs, nor any prerequisite stated. The only usage hints (siteId default, MAC lookup) live in the schema, not the description.

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

getSpeedTestResultsA
Read-only

Get the last speed test results for an access point. Returns upload/download throughput measurements from the most recent speed test. Use triggerSpeedTest first to initiate a new test; this returns stored results.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that safe-read profile. It adds real behavioral context beyond the annotations: the values come from a prior test rather than being measured on demand, and it names the returned metrics (upload/download throughput). It stops short of describing what happens when no speed test has ever run.

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

Conciseness5/5

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

Three short sentences, each earning its place: what it returns, what the return values are, and which sibling to use for a new measurement. The key scoping fact is front-loaded with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with no output schema, the description covers the essentials: the resource, the returned metrics, and the trigger-vs-read split. It could be slightly more complete by noting behavior when no stored result exists or whether results are timestamped.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: apMac includes a format example and a pointer to listDevices, and siteId explains the OMADA_SITE_ID default and listSites discovery. The description adds nothing parameter-specific, so the schema does all the work and the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Get the last speed test results for an access point") and immediately clarifies the payload (upload/download throughput from the most recent test). It explicitly distinguishes this read path from the triggerSpeedTest sibling, so an agent can choose between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It routes the agent clearly: use triggerSpeedTest to start a new test, this tool returns stored results. That is an explicit alternative plus the condition that selects it. The only gap is no guidance on the empty/never-tested case, which would matter in practice.

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

getStackNetworkListA
Read-only

Get the VLAN network list for a switch stack. Returns VLAN interface assignments across all stack members. Use getSwitchStackDetail to get the stackId.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
stackIdYesStack ID of the switch stack. Use getSwitchStackDetail to find the stackId.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a small amount of behavioral context by noting the result covers VLAN interface assignments across all stack members, but says nothing about result size, pagination behavior, or whether empty stacks return an error.

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

Conciseness4/5

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

Three short sentences with the core purpose front-loaded and the prerequisite hint immediately after. The stackId sentence largely duplicates the schema description, which is a minor redundancy rather than clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with full schema coverage and safety annotations, the definition covers what is being fetched and how to obtain the required ID. A brief note on pagination or what an empty stack returns would close the remaining gap, but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters, including siteId fallback and page/pageSize limits, are already documented. The description's only parameter-adjacent content is the stackId discovery hint, which the schema itself repeats, so it adds no meaning beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get the VLAN network list') and scopes it to a switch stack, with a follow-on sentence clarifying that results span all stack members. It is clear enough to separate from getSwitchStackDetail, though it never explicitly distinguishes itself from the sibling listSwitchNetworks, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete prerequisite path: 'Use getSwitchStackDetail to get the stackId.' That tells an agent how to obtain the required parameter. It stops short of stating when to prefer this over listSwitchNetworks or other switch-network tools, so there is no exclusion guidance.

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

getStackPortsC
Read-only

Get all port information for a switch stack.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
stackIdYes

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally. The description adds nothing beyond that: it does not say what 'port information' includes (status, PoE, VLAN, link speed), whether results are paginated or complete, or what happens when the stack has no ports.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. Its brevity is efficient, though it borders on under-specification rather than earning every word through useful detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two parameters, read-only, no output schema), so a short description is defensible, and annotations carry the safety profile. Still, an agent gets no signal about the return payload or how stack port data differs from the sibling port/detail tools, leaving a meaningful gap for an otherwise easy tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: siteId is well documented in the schema, but stackId has no description and its pattern admits ':' and '-' separators, hinting at a composite identifier that the description never explains. The phrase 'for a switch stack' only restates the parameter name and does not compensate for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieve all port information for a switch stack. That is unambiguous on its own, but it draws no boundary against nearby siblings such as getSwitchStackDetail, getGatewayPorts, or listSitesApsPorts, so an agent must infer which port endpoint applies to stacks versus gateways or APs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling tools. It also does not note that siteId falls back to OMADA_SITE_ID when omitted, a scoping behavior the agent would have to discover from the schema.

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

getSwitchDetailA
Read-only

Fetch full configuration and status for a specific switch: model, firmware, CPU/memory, all port states, PoE usage, VLAN config, and STP status. Use listDevices to get the switchMac.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds that this is a comprehensive snapshot covering many subsystems, but says nothing about whether siteId omission falls back to a default site, response size, or rate limiting. Adequate but with room to say more.

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

Conciseness5/5

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

Two tight sentences: the capability and returned fields come first, then the prerequisite pointer. No filler, no redundancy with the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only two-parameter lookup with full schema coverage and no output schema, the definition covers purpose and prerequisite well. The only gap is disambiguation from the many sibling switch-detail tools and a note that the response is large and comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented in the schema, including the MAC format and the OMADA_SITE_ID fallback. The description reinforces the switchMac sourcing (via listDevices), adding modest navigational value but no new semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (full configuration and status for a specific switch), then enumerates exactly what is returned: model, firmware, CPU/memory, port states, PoE usage, VLAN config, STP status. This clearly distinguishes it from siblings like getSwitchGeneralConfig or getSwitchStackDetail, which cover narrower slices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear prerequisite path by naming listDevices as the way to obtain the required switchMac. It does not, however, state when to prefer this over adjacent detail tools such as getSwitchStackDetail, getSwitchGeneralConfig, or getSwitchDot1xSetting, so the agent must infer boundaries from names.

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

getSwitchDot1xSettingB
Read-only

Get the 802.1X switch port authentication setting. Controls port-based network access control on managed switches.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds a little domain context by explaining the setting governs port-based network access control on managed switches. It says nothing about scope, return shape, or whether defaults are merged in, so value beyond annotations is modest.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and resource. The second sentence is slightly oblique ('Controls port-based network access control') and borders on restating the first, but nothing is verbose or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter read tool with annotations and no output schema, the definition is barely sufficient. It never hints at what the returned 802.1X settings look like or how they relate to getDot1xConfig, which matters because there is no output schema to compensate. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: siteId is documented with its pattern, the OMADA_SITE_ID default fallback, and a pointer to listSites. The description adds no meaning beyond that. With a single fully-documented parameter, the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the 802.1X switch port authentication setting.' An agent knows exactly what entity is retrieved. However, it never distinguishes itself from the sibling getDot1xConfig, so an agent cannot tell which of the two to call based on purpose alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance beyond the resource name. Crucially, the sibling list contains getDot1xConfig, and the description gives no rule for choosing between 'switch port authentication setting' and that other 802.1X configuration tool. Nothing about prerequisites or expected context is stated.

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

getSwitchGeneralConfigA
Read-only

Get general configuration for a switch including device name, LED settings, LLDP settings, flow control, and other global switch parameters. Use listDevices to get switchMac values.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description usefully adds what the read actually contains (LED, LLDP, flow control, and other global switch parameters), which substitutes for the absent output schema; it stops short of noting auth requirements or whether values are site-scoped.

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

Conciseness5/5

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

Two sentences, both earning their place: the field inventory comes first and the identifier-acquisition hint second. There is no filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, two-parameter tool with a fully documented schema and no output schema, the description gives enough: it names the config domains returned and how to obtain the switch MAC. The catch-all "other global switch parameters" leaves the exact return set slightly open, which is the main residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across both parameters, including the MAC format example, the siteId default from OMADA_SITE_ID, and the listSites/listDevices discovery hints. The description adds no semantics beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ("Get general configuration for a switch") and enumerates concrete fields — device name, LED settings, LLDP settings, flow control. It does not, however, distinguish itself from near-neighbours such as getSwitchDetail or getSitesSwitchesEsGeneralConfig, so an agent cannot tell from the text alone which switch-config getter to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage guidance is "Use listDevices to get switchMac values", which tells the agent how to acquire the required identifier but not when to prefer this tool over alternatives or when it is not appropriate. The same pointer already appears in the switchMac schema description, so it adds little beyond structured data.

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

getSwitchStackDetailC
Read-only

Fetch detailed information for a specific switch stack.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
stackIdYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing further: it does not say what "detailed information" includes, whether the call fails for non-stack devices, or how large the payload typically is. For a read tool with annotations, that is a low-value contribution.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity reflects under-specification rather than tight editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description is the only place to explain what the returned detail covers, and it says nothing. Combined with the undocumented required stackId, an agent cannot confidently tell whether this is the right tool or what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: siteId is well documented in the schema, but stackId carries no description there. The description does not compensate by explaining where a stackId comes from (e.g., listSitesStacks) or its expected form, leaving the required parameter semantically bare.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ("Fetch") and a resource ("switch stack detail"), but it is essentially an expansion of the tool name getSwitchStackDetail and adds no distinguishing scope. It never clarifies how it differs from close siblings like getSwitchDetail, listSitesStacks, or getStackPorts, which an agent must choose between.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The agent is left to infer from the name alone that this is the stack-level lookup and not the single-switch or stack-port tool.

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

getTrafficDistributionA
Read-only

Get traffic distribution by protocol and application type over a time range. Shows breakdown of traffic by category (video, gaming, web, etc.) helping identify what is consuming bandwidth on the network. start and end are Unix timestamps in seconds.

NameRequiredDescriptionDefault
endYesEnd of the time range as a Unix timestamp in seconds (e.g. Math.floor(Date.now() / 1000)). Must be paired with start.
startYesStart of the time range as a Unix timestamp in seconds (e.g. Math.floor(Date.now() / 1000) - 3600 for the last hour). Must be paired with end.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is conveyed structurally. The description adds the useful scoping detail that results are grouped by traffic category (video, gaming, web, etc.), but it says nothing about aggregation granularity within the range, cardinality of results, or the fact that omitting siteId falls back to a configured default site.

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

Conciseness4/5

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

Three short sentences, front-loaded with what the tool returns before the explanatory benefit statement. The final timestamp sentence is largely redundant with the schema, which is the only real waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read-only tool with full schema coverage and safety annotations, the description covers purpose, output dimension, and a concrete example of the categories returned, which partially compensates for the absent output schema. Missing only edge details such as granularity of the breakdown and default-site behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters including the siteId default behavior and the Unix-seconds format are already fully documented in the schema. The trailing sentence about start and end being Unix timestamps in seconds restates the schema rather than adding new meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get traffic distribution") plus the dimensions it breaks down by (protocol and application type) over a time range, which is concrete enough to separate it from neighbors like getClientsDistribution or getDashboardTrafficActivities. It stops short of explicitly naming a sibling it is not, so a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "helping identify what is consuming bandwidth on the network" implies the intended use case, and the required time range hints that this is a windowed analysis call. But there is no explicit when-to-use/when-not guidance and no pointer to an alternative tool for related questions such as per-client rather than per-category traffic.

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

getTrafficPriorityA
Read-only

Get the gateway VoIP and traffic prioritization settings for a site, including QoS prioritization rules for voice and real-time traffic.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scope by naming which settings are returned (VoIP prioritization and QoS rules for voice/real-time traffic), but it says nothing about whether it returns effective vs configured values, defaults, or per-WAN behavior.

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

Conciseness4/5

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

A single front-loaded sentence, with the resource stated first and the qualifying detail about voice/real-time QoS rules second. No filler, though the trailing clause slightly overlaps the leading phrase.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only getter with one optional, fully documented parameter and no output schema, the description covers what the tool returns and where it applies. The only meaningful omission is sibling differentiation against the many other QoS-related getters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the siteId field documents the pattern, the OMADA_SITE_ID default when omitted, and the listSites discovery route. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: gateway VoIP and traffic prioritization settings for a site, plus the QoS rules for voice and real-time traffic. It is clear what it reads, but it does not distinguish itself from closely named siblings such as getQosPolicy, getGatewayQosClassRules, or getBandwidthCtrlDetail, leaving the agent to guess which QoS getter to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the read-and-inspect nature of the tool; there is no explicit statement of when to call this versus the other QoS and bandwidth tools in the sibling list. An agent can infer it is a configuration lookup, but the choice among near-duplicate siblings is left unresolved.

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

getUpgradeLogsB
Read-only

Get firmware upgrade logs showing the history of upgrade operations performed on devices.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the content is historical upgrade records, but says nothing about ordering, pagination behavior, how far back logs go, or whether results span all devices or a single device.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundant restatement of the name. It is appropriately sized, though it could spend one more clause on routing rather than on re-describing 'upgrade operations'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter, read-only query with annotations covering safety and a fully documented schema, the essentials are present. However, the description leaves open whether logs are global or device-scoped and how much history is returned, which matters for a paginated log-retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both page and pageSize are fully documented in the schema and the baseline is 3. The description adds no meaning beyond that, and notably does not clarify the absence of any device or date filter, which an agent might otherwise assume exists.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get firmware upgrade logs') and narrows scope to the history of upgrade operations on devices. It clearly separates this from nearby siblings such as getFirmwareUpgradePlan or getFirmwareInfo, but never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the several upgrade-related siblings (getFirmwareUpgradePlan, getFirmwareInfo, getGridAutoCheckUpgrade) an agent could pick instead. The read-only nature of the call can be inferred, but selection among the many upgrade tools is left entirely to the agent.

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

getUpgradeOverviewCriticalA
Read-only

Get the number of critical firmware upgrades available across managed devices.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered structurally. The description adds two useful behavioral facts beyond that: the result is a count (not a detailed list) and the scope is limited to 'critical' severity upgrades across managed devices. It does not say whether the scope defaults to the whole organization or whether per-site/per-device breakdowns exist.

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

Conciseness5/5

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

A single front-loaded sentence with no filler or redundant restatement of the tool name. Every clause carries meaning: criticality, availability, and device scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only counter with full annotation coverage and no output schema, the description is nearly sufficient. The only remaining ambiguity is whether the count is global or segmented, which is minor for a tool this simple.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4 and there is nothing the description needs to disambiguate. The phrase 'across managed devices' correctly implies no filtering arguments are accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieve a count of 'critical firmware upgrades available across managed devices'. The word 'number' signals an aggregate count rather than a list, which implicitly separates it from siblings like listUpgradeOverviewFirmwares. However, it never names or contrasts with getUpgradeOverviewTryBeta, so an agent cannot be fully certain of the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of the alternative upgrade-overview tools (getUpgradeOverviewTryBeta, listUpgradeOverviewFirmwares, getFirmwareUpgradePlan), and no preconditions. An agent must infer the choice 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.

getUpgradeOverviewTryBetaC
Read-only

Get the try-beta firmware switch status for the controller.

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Beyond that the description adds nothing: it does not say whether the status is per-site, per-controller, global, or what fields the status contains, which is the main thing an agent would want to know about a status-read endpoint.

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

Conciseness4/5

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

A single short sentence, front-loaded with the verb and resource, with no filler. It is efficient, though its brevity comes at the cost of substance rather than being a model of tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with no output schema, the description is short but leaves the central question unanswered: what 'switch status' actually means (on/off, beta enrollment state, per-controller flag) and what the caller receives. Adequate to identify the call, not adequate to interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema cannot supply semantics and the baseline is 4. The description correctly implies the controller scope without suggesting any inputs exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb ('Get') and a resource ('try-beta firmware switch status for the controller'), so the general purpose is identifiable. However, 'try-beta firmware switch status' is opaque terminology, and nothing distinguishes it from closely named siblings such as getUpgradeOverviewCritical, listUpgradeOverviewFirmwares, or getGridAutoCheckUpgrade.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool versus the many upgrade-related siblings, no prerequisites, and no exclusions. The agent must guess 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.

getUplinkWiredDetailA
Read-only

Get wired uplink detail for an access point. Returns the AP's Ethernet uplink port information including connected switch, port number, link speed, and PoE status. Useful for mapping physical network topology.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the shape of the returned data, which is valuable, but says nothing about behavior when the AP is not wired-uplinked (mesh/wireless) or about error conditions such as an unknown MAC.

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

Conciseness4/5

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

Three short sentences, scoped identically to the name and front-loaded with the return contents. No filler, though the trailing topology sentence is the weakest and could carry more routing value if it named a sibling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only tool with full schema coverage and no output schema, the description usefully summarizes the return fields and lets the schema handle the rest. It is nearly complete, missing only the edge case of APs without a wired uplink.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both params are documented there, including how to obtain apMac via listDevices and the siteId default from OMADA_SITE_ID. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get wired uplink detail for an AP) and enumerates exactly what comes back: connected switch, port number, link speed, PoE status. That payload list differentiates it from configuration siblings like getApUplinkConfig and topology siblings like getDownlinkWiredDevices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Useful for mapping physical network topology' implies a use case but names no alternatives and gives no when-not guidance. An agent must infer on its own whether to reach for this or getApUplinkConfig / getDownlinkWiredDevices.

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

getUrlFilterBlacklistA
Read-only

Get the MAC-based deny (blacklist) filter entries for a site (paginated). Returns MAC addresses blocked from network access.

NameRequiredDescriptionDefault
pageNoPage number (1-based).
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of results per page (1–1000).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results are paginated and that returned values are MAC addresses blocked from network access, which is genuine value beyond the annotations, but it says nothing about max page behavior, empty-result semantics, or permissions.

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

Conciseness5/5

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

Two short sentences, front-loaded with the verb and resource, followed by a single clarifying sentence on return content. No filler, no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, zero-required-parameter list tool with a fully documented schema and no output schema, the description supplies enough to call it correctly and to know roughly what comes back. The only missing piece is routing among closely related filter/ACL siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the siteId fallback to OMADA_SITE_ID and the 1–1000 pageSize bounds, so the schema already carries the parameter semantics. The description only restates 'for a site (paginated)' and adds no format or default-override detail beyond what is documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('MAC-based deny/blacklist filter entries for a site'), and explicitly clarifies that the entries are MAC addresses rather than URL patterns, which disambiguates it from the URL-filter siblings despite the tool's name. It never names getUrlFilterWhitelist, getUrlFilterRules, or getMacFilterDetail directly, so sibling differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for a site' and '(paginated)' imply the context of listing deny entries within a site scope, but there is no explicit when-to-use or when-not-to-use guidance. Nothing tells the agent whether to prefer this over getMacFilterDetail or getUrlFilterRules when both appear relevant.

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

getUrlFilterGeneralA
Read-only

Get the URL filter global setting, including whether URL filtering is enabled and the default action for unmatched requests.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered and the description only needs to add context. It does add value by naming the two pieces of state returned (enabled flag and default action for unmatched requests), which matters because there is no output schema; it does not, however, discuss whether this reads a per-site or fleet-wide config beyond the 'global' wording.

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

Conciseness5/5

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

A single sentence that front-loads the resource being fetched and then specifies its contents. There is no filler, repetition of the tool name, or trailing qualification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only getter with no output schema, the description is adequate: it identifies the resource and the return fields, and the schema handles the siteId semantics. It falls short only in not tying the tool to its sibling URL-filter endpoints, which an agent would need in order to route correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single optional siteId parameter with 100% schema description coverage, and the schema already explains the OMADA_SITE_ID fallback and points to listSites. The description adds nothing about the parameter, so the baseline of 3 applies since the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get the URL filter global setting') and enumerates what the setting contains ('whether URL filtering is enabled and the default action for unmatched requests'). However, it never distinguishes this from closely named siblings such as getUrlFilterRules, getUrlFilterBlacklist, and getUrlFilterWhitelist, leaving the agent to infer that this one is the global toggle/state rather than a rule list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the word 'global' — an agent can guess this is the site-level on/off and default-action state rather than the per-rule endpoints. There is no explicit statement of when to call this versus getUrlFilterRules or the blacklist/whitelist tools, and no prerequisites or exclusions are given.

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

getUrlFilterRulesB
Read-only

Get gateway URL filter rules for a site (paginated), listing URL-based allow/block rules applied on the gateway.

NameRequiredDescriptionDefault
pageNoPage number (1-based).
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of results per page (1–1000).

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint=true and destructiveHint=false annotations already establish the safety profile, so the description need not restate it. It adds useful context that results are paginated and scoped to a gateway/site, but says nothing about ordering, total counts, or what a rule entry contains, and with no output schema that leaves gaps.

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

Conciseness4/5

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

A single sentence with no filler, and the core purpose plus pagination is front-loaded before the explanatory gloss. Slightly dense parenthetical insertion, but nothing that could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, three-parameter listing tool with full schema coverage and no output schema, the description covers purpose and scoping adequately. What is missing is the routing information an agent needs in a crowded gateway/filter sibling set: when this combined listing is preferred over the blacklist, whitelist, and general-config tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so page, pageSize, and siteId are already fully documented, including the OMADA_SITE_ID default and the pointer to listSites. The description's only contribution is the word 'paginated', which merely flags that the schema's paging parameters matter. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb (Get) with a specific resource (gateway URL filter rules) and adds scope (for a site, paginated) plus a gloss on what the resource means (URL-based allow/block rules applied on the gateway). It only implicitly differentiates from the close siblings getUrlFilterBlacklist and getUrlFilterWhitelist by implying a combined allow/block listing rather than stating the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the read path for URL filter rules on a gateway. There is no explicit when-to-use versus when-not, and no naming of the obvious alternatives (getUrlFilterBlacklist, getUrlFilterWhitelist, getUrlFilterGeneral) that a caller would need to choose between.

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

getUrlFilterWhitelistB
Read-only

Get the MAC-based allow (whitelist) filter entries for a site (paginated). Returns MAC addresses explicitly allowed through MAC filtering.

NameRequiredDescriptionDefault
pageNoPage number (1-based).
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of results per page (1–1000).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds two useful facts beyond annotations — results are paginated and the payload is MAC addresses explicitly permitted through MAC filtering — but says nothing about ordering, total counts, or behavior when the allow list is empty.

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

Conciseness4/5

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

Two compact sentences with the resource and scope front-loaded and no filler. Slightly more value could be extracted from the same length by naming the sibling it is confused with or clarifying URL-vs-MAC filtering.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only, three-parameter list tool this is close to adequate, and the brief note on what is returned partly compensates for the absence of an output schema. It stops short of confirming the return structure (e.g. per-entry fields or pagination metadata) that the agent would otherwise get from an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the page/pageSize bounds and the siteId default/enumeration hint via listSites, so the schema carries the parameter semantics. The description only echoes the pagination and site scope at a high level, adding no format or edge-case detail (e.g. page beyond last, pageSize maximum effect).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieves allow-list (whitelist) entries for a site, and clarifies the entries are MAC-based and paginated. It does not disambiguate from similar siblings such as getMacFilterDetail, getSitesDeviceWhiteList, or getGridAllowList, and the 'getUrlFilterWhitelist' name sits oddly against the MAC-based framing, which may cause brief hesitation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no pointer to a related or alternative tool. The agent must infer from the name and sibling list whether this is the URL-filter allow list or the MAC-filter allow list; nothing in the description resolves that routing decision.

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

listClientsA
Read-only

List all network clients (wired and wireless) connected to a site. Returns client details including MAC address, IP, hostname, connected device, SSID (for wireless), signal strength, download/upload traffic, and online status. Use this to audit connected devices or find a specific client by name or MAC.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.8/5.0
Behavior3/5

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

The readOnlyHint and destructiveHint annotations already establish that this is a safe read operation. The description adds useful return-field detail and clarifies current connected scope, but it omits pagination, rate limits, and whether “all” results are truly unpaged.

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

Conciseness5/5

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

The description is front-loaded across three efficient sentences with no wasted wording. The return-field list is long but justified because there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one optional parameter, the description covers purpose, returned fields, and usage context adequately. The main missing piece is pagination or result-limit behavior for a list-all operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single optional siteId parameter, including the default-site behavior and listSites discovery hint. The description only implies site scoping and adds no parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: listing network clients, scoped to a site and covering wired and wireless devices. It is clear, but it does not explicitly distinguish itself from siblings such as getClientDetail, listMostActiveClients, or listClientsActivity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states clear usage contexts: auditing connected devices or finding a specific client by name or MAC. It does not name when-not-to-use cases or a specific alternative sibling, and the name/MAC lookup relies on filtering the returned list because the schema has no search parameter.

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

listClientsActivityA
Read-only

Get client activity statistics over time from the dashboard. Returns time-series data showing new, active, and disconnected clients (both wireless/EAP and wired/switch) for each time snapshot. Useful for monitoring client connection trends and activity patterns.

NameRequiredDescriptionDefault
endNoOptional end timestamp in seconds (e.g., 1682000000)
startNoOptional start timestamp in seconds (e.g., 1682000000)
siteIdNoOptional site ID. If not provided, uses the default site from configuration.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real value by describing the return shape (per-snapshot counts of new, active, and disconnected clients split by EAP vs switch), but it says nothing about default time window behavior, pagination, or sampling granularity.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core action and scope. The final sentence largely restates the earlier 'activity statistics over time' framing, so there is minor redundancy but nothing bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must carry the return-value burden, and it does so by enumerating the metrics per time snapshot. For a read-only, three-optional-parameter tool this is close to sufficient; only default time-range behavior and the granularity of snapshots are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (start, end, siteId) are documented in the schema with units and defaults. The description adds no further parameter meaning — it never mentions the time range or site scoping — so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Get client activity statistics over time from the dashboard') and even narrows the payload to new/active/disconnected clients across wireless and wired. It does not, however, contrast itself with close siblings such as listMostActiveClients, getClientsDistribution, or getPastClientNum, so an agent still has to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for monitoring client connection trends and activity patterns' implies the monitoring use case but never states when to pick this over the many other client-statistics siblings, nor any exclusions or prerequisites. Usage is implied rather than directed.

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

listClientsPastConnectionsA
Read-only

Get client past connection list with historical connection data. Returns information about clients that have previously connected to the network, including connection timestamps, traffic data, duration, and device details. Supports pagination, filtering by time range and guest status, sorting by last seen time, and fuzzy search by name/MAC/SSID.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
guestNoFilter by guest status (true/false).
siteIdNoOptional site ID. If not provided, uses the default site from configuration.
timeEndNoFilter by time range end timestamp (milliseconds).
pageSizeNoNumber of entries per page. Range: 1-1000.
searchKeyNoFuzzy search by name, MAC address, or SSID.
timeStartNoFilter by time range start timestamp (milliseconds).
sortLastSeenNoSort by last seen time. Values: asc or desc. When multiple sorts exist, first one takes effect.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the nature of the returned data (timestamps, traffic, duration, device details), but says nothing about rate limits, permissions, empty-result behavior, or whether history retention is bounded.

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

Conciseness4/5

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

Three sentences, front-loaded with the core purpose and followed by return contents and capabilities. Every sentence carries information; only the capability sentence partially duplicates the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with eight fully documented parameters and no output schema, the description covers purpose, returned fields, and available filtering/sorting, which is sufficient to invoke it correctly. Minor gaps (siteId defaulting, result ordering default) are the only omissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters, their ranges, defaults, and the enum are already documented structurally. The description only restates those capabilities in aggregate (filtering, sorting, search) without adding format or interaction details, and it omits mention of siteId's default-site fallback.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Get client past connection list') and immediately clarifies that these are historical connections, which separates it conceptually from live-client siblings like listClients or getClientDetail. It never names an alternative tool explicitly, so the differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It lists the capabilities (pagination, time-range and guest filtering, sorting, fuzzy search), which implies when the tool is useful, but gives no explicit when-to-use/when-not guidance and does not route the agent to or away from any of the many sibling client tools.

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

listDevicesA
Read-only

List all provisioned (adopted) network devices in a site: gateways, switches, and access points. Returns MAC address, model, firmware version, IP, uptime, CPU/memory usage, and status for each device. Use MAC addresses from this response as input to getGatewayDetail, getSwitchDetail, getApDetail, etc.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4.3/5.0
Behavior4/5

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

With readOnlyHint=true and destructiveHint=false already covering the safety profile, the description still adds real value by scoping the result to adopted devices only and predicting the exact fields returned (MAC, model, firmware, IP, uptime, CPU/memory, status). It does not mention pagination or result-size behavior for large sites, which is the main remaining gap.

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

Conciseness5/5

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

Three sentences, front-loaded with the verb and scope, then the return payload, then the follow-up routing. Every sentence supplies information the agent needs and none repeats the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only listing tool with no output schema, the description supplies the scope, the shape of the response, and the natural next call. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the siteId property already documents the default-site fallback and the listSites discovery path, so the description carries no additional parameter burden. Its phrase 'in a site' merely restates the parameter's role, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List all provisioned (adopted) network devices in a site') and enumerates the three device classes covered. The word 'provisioned (adopted)' distinguishes it from the sibling listPendingDevices, and the whole-site enumeration distinguishes it from per-device getters like getSwitchDetail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear downstream guidance: the MAC addresses returned should be fed into getGatewayDetail, getSwitchDetail, getApDetail or similar. It does not explicitly contrast with searchDevices or listDevicesStats, so the agent must infer when to prefer searching or stats over a full listing, but the intended workflow is unambiguous.

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

listDevicesStatsA
Read-only

Query statistics for global adopted devices with pagination and filtering. Supports fuzzy search by MAC address, name, model, or serial number, and filtering by tag or device series type (0: basic, 1: pro).

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.
filterTagNo
searchSnsNo
searchMacsNo
searchNamesNo
searchModelsNo
filterDeviceSeriesTypeNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already establish that this is a read-only, non-destructive operation. The description adds pagination and fuzzy-search behavior, but it does not explain the returned statistics, permissions, scope constraints, or limits beyond filtering.

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

Conciseness5/5

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

The description is two tight sentences, front-loaded with the main purpose and then the supported search/filter dimensions. 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an eight-parameter read-only tool with no output schema, the description covers the main filtering and search parameters but leaves the nature of the returned statistics vague. An agent can invoke it, but may not fully know what statistical output to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25%, so the description must compensate for undocumented parameters. It does so well by mapping fuzzy search to MAC address, name, model, and serial number, and by explaining tag and device-series filtering with the 0/1 series codes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: query statistics for global adopted devices. It implies a statistical view rather than a plain device listing, but it does not explicitly differentiate itself from siblings such as listDevices, searchDevices, or getAllDeviceBySite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains supported search and filtering capabilities, which implies usage for filtered device-stat queries. However, it gives no explicit when-to-use guidance or comparison against the many sibling device-listing and search tools.

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

listEapAclsA
Read-only

List EAP (access point) ACL rules for a site: wireless client access control rules. Returns rule name, action (allow/deny), SSID scope, source/destination, protocol, and enabled state.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish that this is a safe read-only operation, and the description adds useful behavioral detail by naming the returned fields: rule name, action, SSID scope, source/destination, protocol, and enabled state. It does not discuss pagination or ordering, but it substantially improves visibility into the result beyond what the annotations provide.

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

Conciseness5/5

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

The description is front-loaded and compact: it states the resource scope first, then lists the returned fields in one concise clause. 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with one optional parameter, annotations covering safety, and no output schema, the description is nearly complete because it explains the resource and enumerates returned fields. It could mention whether results are paginated or unfiltered, but the core context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single siteId parameter is fully documented there, including its pattern, default-site behavior, and discovery via listSites. The description adds no parameter-specific semantics, so the schema baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list EAP ACL rules for a site, and clarifies that these are wireless client access control rules. This distinguishes it from generic ACL and firewall siblings by naming the EAP/wireless ACL scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The site scope implies when to use it, but the description gives no explicit guidance on choosing between this and ACL-related siblings such as getGridEapRule, getOswAclList, or listOsgAcls. Usage is inferable from the name and purpose but not routed against alternatives.

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

listMostActiveClientsA
Read-only

Get the most active clients in a site, sorted by total traffic. Returns client name, MAC address, type, model, wireless status, and total traffic. This is a dashboard endpoint that provides a quick overview of top clients by traffic usage.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that this is a dashboard/overview endpoint returning a ranked list, which is useful context, but it does not disclose how many clients are returned, whether the list is capped or truncated, or what happens when a site has no traffic data.

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

Conciseness4/5

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

Three sentences, front-loaded with the core behavior and return fields. The final sentence ('quick overview of top clients by traffic usage') largely restates what the first two sentences already said, so it does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description usefully enumerates the returned fields (name, MAC, type, model, wireless status, total traffic), which is exactly what an agent needs to decide relevance. The only meaningful gap is the absence of any indication of how many 'most active' clients are returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single siteId parameter is already fully documented, including the OMADA_SITE_ID default and the pointer to listSites. The description adds nothing about the parameter, but at full coverage and with the schema handling defaults and discovery, this is adequate; the description's enumeration of return fields partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get the most active clients in a site') plus the sort order ('sorted by total traffic'), and enumerates the returned fields. That distinguishes it from generic siblings like listClients and from the sibling dashboard tools getDashboardMostActiveSwitches and getDashboardMostActiveEaps, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'This is a dashboard endpoint that provides a quick overview' implies the use case is a summarized view rather than exhaustive enumeration, which implicitly points away from listClients. There is no explicit when-to-use or when-not statement and no named alternative, so the routing guidance is only implied.

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

listOsgAclsA
Read-only

List gateway (OSG) ACL rules for a site: firewall rules controlling traffic between WAN, LAN, and guest networks. Returns rule name, action (allow/deny), source/destination, protocol, and enabled state.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.6/5.0
Behavior4/5

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

With readOnlyHint/destructiveHint already supplied, the description still adds real value by enumerating the shape of the result: rule name, action (allow/deny), source/destination, protocol, and enabled state. That tells the agent the call is safe and what content it will get back without an output schema. It stops short of noting ordering, pagination, or 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.

Conciseness5/5

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

Two sentences, zero filler, and the core action is front-loaded before the explanatory gloss. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-parameter list tool with full schema coverage and annotations, the definition covers purpose, domain meaning, and returned fields, which is nearly everything an agent needs. Minor omissions are result ordering and how a missing/invalid site resolves, but nothing blocks a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single siteId parameter already documents its pattern, the OMADA_SITE_ID fallback, and the pointer to listSites. The description adds nothing about parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List gateway (OSG) ACL rules for a site') and then defines what those rules are ('firewall rules controlling traffic between WAN, LAN, and guest networks'). The '(OSG)' qualifier implicitly separates it from switch/EAP ACL siblings, but it never names or contrasts with getOsgCustomAclList, getOswAclList, or listEapAcls, which is the most likely source of a mis-selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use statement, no preconditions, and no routing to alternatives, despite three close siblings (getOsgCustomAclList, getOswAclList, listEapAcls) plus getAclConfigTypeSetting. The only usage signal is implicit: the definition of ACLs implies you call this to inspect firewall rules, which the agent must infer.

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

listPendingDevicesA
Read-only

List devices discovered on the network but not yet adopted into this site. Returns device type, MAC, IP, and model. These are devices waiting to be provisioned.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds scoping context ('this site') and the return shape, but says nothing about whether unadopted devices are filtered by discovery window, pagination, or permissions.

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

Conciseness4/5

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

Three short sentences, purpose front-loaded. Minor redundancy: 'not yet adopted' and 'waiting to be provisioned' say the same thing, so the final sentence does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully enumerates returned fields (device type, MAC, IP, model), which is exactly the kind of detail an agent needs. For a simple read-only one-parameter tool that is close to sufficient; only sibling differentiation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single siteId parameter has 100% schema coverage with a pattern and default-site fallback already documented, so the schema does the heavy lifting. The description's reference to 'this site' loosely reinforces site scoping but adds no new meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List devices discovered on the network but not yet adopted into this site'), and the adoption status makes it distinguishable from the many other device tools. It stops short of naming the closest sibling (listDevices) as the alternative for already-adopted devices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'devices waiting to be provisioned' implies the use case (pre-adoption onboarding checks), but there is no explicit when-to-use vs. when-not guidance and no routing to listDevices or searchDevices for the adopted-device case.

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

listSitesApsPortsC
Read-only

List ports on an AP.

NameRequiredDescriptionDefault
apMacYesMAC address of the access point (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find AP MACs.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered, but the description adds essentially nothing beyond that bar: no indication of what a port record contains, whether results are paginated, or whether the AP must be online/connected for data to be returned. It largely restates 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.

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is efficient, though the brevity borders on under-specification rather than true conciseness, which is penalized in the other dimensions rather than here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is low-complexity, has only two fully documented parameters, and carries annotations covering its safety profile, so the description is minimally sufficient to call it correctly. It still leaves gaps about what port data is returned and any preconditions (e.g., AP reachability), which matters given there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both apMac (format plus a pointer to listDevices) and siteId (default-site fallback to OMADA_SITE_ID plus a pointer to listSites) fully documented in the schema. The description contributes no additional parameter meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('List') and resource ('ports on an AP'), so an agent immediately knows this is a read of physical/logical port data for a given access point. It does not, however, distinguish it from port-oriented siblings such as getSwitchPorts or getStackPorts, nor clarify what 'ports' means for an AP (Ethernet uplinks vs. LAN ports).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no alternative tool is named. The only routing hints ('Use listDevices to find AP MACs', 'Use listSites to discover site IDs') live in the schema parameter descriptions, not the tool description, and they concern parameter sourcing 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.

listSitesCableTestSwitchesIncrementResultsB
Read-only

Get cable test incremental results for a switch.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare this is a read-only, non-destructive operation. The description adds only the ambiguous term 'incremental' without explaining what incremental means, whether it returns a delta or paginated data, or any rate-limit/auth context.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no filler. Every word contributes to identifying the operation, though the brevity leaves gaps handled elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity two-parameter read tool, the schema and annotations cover most invocation needs. However, the description never clarifies the relationship to full-results siblings or what 'incremental' returns, leaving a meaningful gap for an agent choosing among cable-test tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so switchMac and siteId are fully documented in the schema, including cross-references to listDevices and listSites. The description adds no meaning beyond the schema, which is acceptable at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: get cable test incremental results for a switch. It distinguishes the result type as 'incremental,' but does not explicitly differentiate from siblings like getCableTestFullResults or getCableTestLogs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 getCableTestFullResults or getCableTestLogs. It also omits any prerequisites or conditions for requesting incremental rather than full results.

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

listSitesCableTestSwitchesPortsC
Read-only

List ports available for cable test on a switch.

NameRequiredDescriptionDefault
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

C2.9/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: no note about whether the switch must support cable test, whether an empty list is possible, or how results relate to getCableTestFullResults, making it essentially a restatement of 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.

Conciseness4/5

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

A single short sentence with the resource and constraint front-loaded and zero wasted words. Its brevity is efficient, though it borders on under-specification for a tool embedded in a multi-step cable-test workflow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (two params, full schema coverage, read-only annotations, no output schema), so the minimal description is not crippling. However, it omits the workflow context that would let an agent know why and when to call it before getCableTestFullResults or getCableTestLogs, leaving the definition only minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains siteId defaulting to OMADA_SITE_ID and the switchMac MAC format with discovery hints. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('List ports available for cable test on a switch'), which is clear and distinct from siblings like getCableTestLogs or getCableTestFullResults. It stops short of naming any sibling or stating scope boundaries, so the 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance is given: the description never says this is the prerequisite step before running a cable test on a switch port, nor does it distinguish itself from the other cable-test tools in the sibling list. The agent must infer the workflow position 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.

listSitesStacksB
Read-only

List switch stacks in a site.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

B3.1/5.0
Behavior2/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that — no mention of pagination behavior, empty-site behavior, or what a returned stack record contains — so it contributes almost nothing the agent could not infer.

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

Conciseness5/5

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

One short, front-loaded sentence with zero filler or redundancy. Nothing could be removed without losing the stated purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only list tool with all three parameters documented in the schema and no output schema, so the description is minimally sufficient. It is still thin: it does not clarify what a 'switch stack' entity is or how results relate to the stack-detail sibling, which an agent selecting among 80+ switch tools would benefit from.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: page, pageSize ranges and the siteId default/pattern are all fully documented in the schema. The description adds no additional meaning about these parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (list switch stacks) and scopes it to a site, so an agent can tell it is a collection-listing call. It does not distinguish itself from close siblings such as getSwitchStackDetail, getOswStackLagList, or getStackNetworkList, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: nothing says to call this to enumerate stacks versus getSwitchStackDetail to drill into one, and no prerequisite or pagination context is given. The schema does mention listSites for discovering site IDs, but that is a schema note, not description guidance.

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

listSwitchNetworksA
Read-only

List VLAN network assignments for a switch. Returns which VLANs are assigned to which ports, including tagged and untagged configurations. Use listDevices to get switchMac values.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
siteIdNoSite ID to target. If omitted, uses the default site from OMADA_SITE_ID config. Use listSites to discover available site IDs.
pageSizeNoNumber of entries per page. Range: 1-1000.
switchMacYesMAC address of the switch (e.g. "AA-BB-CC-DD-EE-FF"). Use listDevices to find switch MACs.

TDQS

A4/5.0
Behavior4/5

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

The readOnlyHint and destructiveHint annotations already establish the safe read-only behavior. Beyond that, the description adds useful output context by saying the result shows which VLANs are assigned to which ports, including tagged and untagged configurations. It does not discuss pagination or default-site behavior, but those are covered by 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.

Conciseness5/5

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

The description is three short sentences with no redundant wording. It front-loads the core purpose and follows with output details and the prerequisite lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with full schema coverage and annotations, the description is largely complete: it states the purpose, summarizes return content, and points to listDevices for the required MAC. It could be slightly stronger by clarifying pagination or how this differs from adjacent switch-detail tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents switchMac, siteId, page, and pageSize in detail. The description only repeats the switchMac guidance already present in the schema and adds no further meaning for the pagination or site parameters. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing VLAN network assignments for a switch, and it clarifies the returned content includes port-level tagged and untagged configurations. It does not explicitly distinguish this tool from related switch detail or stack network tools, so it falls short of 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context by explaining that the tool lists VLAN-to-port assignments and that listDevices should be used to obtain switchMac values. It does not name when-not-to-use conditions or alternative tools for overlapping switch information, but the primary prerequisite is clear.

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

listUpgradeFirmwaresB
Read-only

List uploaded firmware files available for manual upgrade.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description usefully discloses that only *uploaded* firmware eligible for manual upgrade is returned, but it says nothing about result format, ordering, or whether pagination metadata is returned despite exposing page/pageSize.

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

Conciseness4/5

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

A single short sentence with the scope qualifier front-loaded and no filler. It is efficient, though its brevity is partly the reason other gaps (pagination, differentiation) exist rather than a sign of completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter, read-only list tool with full schema coverage and annotations, the description covers the essentials. It falls short on how results relate to the sibling firmware tools and on any hint about pagination or volume, which matters at pageSize up to 1000.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with page and pageSize both documented (defaults, ranges) in the schema itself. The description adds no syntax, default, or filtering semantics beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') plus a qualified resource ('uploaded firmware files available for manual upgrade'), which is much clearer than the bare name. It does not, however, distinguish itself from the similarly named sibling 'listUpgradeOverviewFirmwares' or from 'getFirmwareInfo', so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'available for manual upgrade' implies the usage context (choosing a firmware image to push manually), but there is no explicit when-to-use, when-not-to-use, or named alternative. The reader must infer that this is the source list feeding a manual upgrade action.

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

listUpgradeOverviewFirmwaresC
Read-only

List firmware pool entries in the upgrade overview.

NameRequiredDescriptionDefault
pageNoStart page number. Start from 1.
pageSizeNoNumber of entries per page. Range: 1-1000.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Beyond that the description adds almost nothing: it doesn't say whether results are site-scoped or org-wide, how pagination totals behave, or what an entry contains, leaving the agent to infer behavior from the name alone.

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

Conciseness4/5

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

A single front-loaded sentence with no redundant wording — the resource and its scope come first. It is efficient, though its terseness borders on under-specification rather than exemplary conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter paginated list tool with annotations and no output schema, the essentials are present and the schema documents paging. Still missing is any signal about the result set's scope (which sites, which firmware pool) or how it differs from the closely named sibling list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (page, pageSize) have descriptions with defaults and bounds, so the description adds no parameter meaning of its own. Baseline 3 is appropriate when the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('List') and resource ('firmware pool entries') scoped to the 'upgrade overview', so the agent knows exactly what is returned. It does not, however, differentiate this from the near-identical sibling listUpgradeFirmwares, which an agent could easily confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no pointer to alternatives. With siblings such as listUpgradeFirmwares, getUpgradeOverviewCritical, and getUpgradeOverviewTryBeta in the same family, the absence of routing guidance is a real gap.

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

searchDevicesB
Read-only

Search for devices globally across all sites the user has access to. Returns devices matching the search key.

NameRequiredDescriptionDefault
searchKeyYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful permission scoping ('all sites the user has access to'), but says nothing about result caps, pagination, or whether matching is substring or exact — meaningful gaps for a search tool.

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

Conciseness4/5

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

Two tight sentences with no filler, and the scope constraint is stated before the return behavior. It is arguably slightly too terse given the unexplained parameter, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is structurally simple (one required string, flat schema, no output schema to explain), but the one thing an agent must know — what to put in searchKey — is absent from both schema and description. Adequate on scope, incomplete on invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single required parameter has 0% schema description coverage, so the description carries the full burden and does not meet it. It never says what searchKey matches (device name, MAC, serial, model) or whether matching is exact or case-insensitive partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Search for devices') plus a scope qualifier ('globally across all sites the user has access to'). This implicitly separates it from the site-scoped sibling getAllDeviceBySite and from listDevices, though neither is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'globally across all sites' implies the right context for use, but no alternative tool is named and no when-not-to-use condition is stated. An agent must infer that listDevices/getAllDeviceBySite are the narrower options.

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

searchOperationsA
Read-only

Search only enabled, implemented Omada tools. Results do not expand permissions. Inspect a result with describeOperation.

NameRequiredDescriptionDefault
limitNo
queryNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the read-only safety profile, so the description's real contribution is the disclosure that only enabled and implemented tools surface and that results do not expand permissions. That permission-boundary note is meaningful behavioral context an agent could otherwise get wrong. It does not describe result shape or ordering, which keeps it short of a 5.

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

Conciseness5/5

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

Three short sentences, each doing distinct work: scope, permission semantics, and next step. No filler and the scope constraint is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description says nothing about what a result looks like, how matches are ranked, or whether results are truncated by the limit. For a discovery tool whose output feeds describeOperation, that leaves a real gap, though the permission and follow-up notes cover the riskiest parts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have 0% schema description coverage, so the description carries the full burden of explaining them and it does not mention query or limit at all. An agent must guess that query is a free-text match string and that limit caps result count.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (search Omada tools) and narrows the scope to enabled, implemented ones, which distinguishes it from the many concrete get/list siblings. It does not fully explain what an 'operation' record contains, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an implied discovery workflow by naming describeOperation as the follow-up step for inspecting a result. It never says when to search instead of calling a known sibling tool directly, or what to do when a search returns nothing.

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.

  1. 113 tool updatesv0.19.0-rc.1
    • First observeddescribeOperation
    • First observeddiagnoseCameraConnectivity
    • First observeddiagnoseClient
    • First observedgetAclConfigTypeSetting
    • First observedgetAllDeviceBySite
    • First observedgetApDetail
    • First observedgetApGeneralConfig
    • First observedgetApIpv6Config
    • First observedgetApLldpConfig
    • First observedgetAppControlCategories
    • First observedgetAppControlRules
    • First observedgetApplicationControlStatus
    • First observedgetApQosConfig
    • First observedgetApRadios
    • First observedgetApSnmpConfig
    • First observedgetApUplinkConfig
    • First observedgetApVlanConfig
    • First observedgetAttackDefenseSetting
    • First observedgetBandwidthCtrlDetail
    • First observedgetCableTestFullResults
    • First observedgetCableTestLogs
    • First observedgetClientDetail
    • First observedgetClientsDistribution
    • First observedgetDashboardMostActiveEaps
    • First observedgetDashboardMostActiveSwitches
    • First observedgetDashboardOverview
    • First observedgetDashboardPoEUsage
    • First observedgetDashboardSwitchSummary
    • First observedgetDashboardTopCpuUsage
    • First observedgetDashboardTopMemoryUsage
    • First observedgetDashboardTrafficActivities
    • First observedgetDashboardWifiSummary
    • First observedgetDeviceTagList
    • First observedgetDot1xConfig
    • First observedgetDownlinkWiredDevices
    • First observedgetFirewallSetting
    • First observedgetFirmwareInfo
    • First observedgetFirmwareUpgradePlan
    • First observedgetGatewayDetail
    • First observedgetGatewayHealth
    • First observedgetGatewayLanStatus
    • First observedgetGatewayPorts
    • First observedgetGatewayQosClassRules
    • First observedgetGatewayWanStatus
    • First observedgetGridAllowList
    • First observedgetGridAutoCheckUpgrade
    • First observedgetGridBlockList
    • First observedgetGridClientHistory
    • First observedgetGridEapRule
    • First observedgetGridGatewayRule
    • First observedgetGridKnownClients
    • First observedgetIspLoad
    • First observedgetMacFilterDetail
    • First observedgetMeshStatistics
    • First observedgetNetworkHealthSummary
    • First observedgetOsgCustomAclList
    • First observedgetOswAclList
    • First observedgetOswStackLagList
    • First observedgetPastClientNum
    • First observedgetQosPolicy
    • First observedgetRadiosConfig
    • First observedgetRadiusProxyConfig
    • First observedgetServerCapabilities
    • First observedgetSitesApsAvailableChannel
    • First observedgetSitesApsBridge
    • First observedgetSitesApsChannelLimit
    • First observedgetSitesApsIpSetting
    • First observedgetSitesApsLoadBalance
    • First observedgetSitesApsOfdma
    • First observedgetSitesApsPowerSaving
    • First observedgetSitesApsTrunkSetting
    • First observedgetSitesDeviceWhiteList
    • First observedgetSitesGatewaysGeneralConfig
    • First observedgetSitesGatewaysPin
    • First observedgetSitesGatewaysSimCardUsed
    • First observedgetSitesHealthGatewaysWansDetails
    • First observedgetSitesSwitchesEs
    • First observedgetSitesSwitchesEsGeneralConfig
    • First observedgetSpeedTestResults
    • First observedgetStackNetworkList
    • First observedgetStackPorts
    • First observedgetSwitchDetail
    • First observedgetSwitchDot1xSetting
    • First observedgetSwitchGeneralConfig
    • First observedgetSwitchStackDetail
    • First observedgetTrafficDistribution
    • First observedgetTrafficPriority
    • First observedgetUpgradeLogs
    • First observedgetUpgradeOverviewCritical
    • First observedgetUpgradeOverviewTryBeta
    • First observedgetUplinkWiredDetail
    • First observedgetUrlFilterBlacklist
    • First observedgetUrlFilterGeneral
    • First observedgetUrlFilterRules
    • First observedgetUrlFilterWhitelist
    • First observedlistClients
    • First observedlistClientsActivity
    • First observedlistClientsPastConnections
    • First observedlistDevices
    • First observedlistDevicesStats
    • First observedlistEapAcls
    • First observedlistMostActiveClients
    • First observedlistOsgAcls
    • First observedlistPendingDevices
    • First observedlistSitesApsPorts
    • First observedlistSitesCableTestSwitchesIncrementResults
    • First observedlistSitesCableTestSwitchesPorts
    • First observedlistSitesStacks
    • First observedlistSwitchNetworks
    • First observedlistUpgradeFirmwares
    • First observedlistUpgradeOverviewFirmwares
    • First observedsearchDevices
    • First observedsearchOperations

TDQS

C2.7/5.0

Scored across 113 tools

Disambiguation2/5

Many tools have overlapping purposes: listDevices, getAllDeviceBySite, listDevicesStats, and searchDevices all return device inventories; getGatewayWanStatus, getGatewayLanStatus, and getGatewayPorts overlap heavily; cable-test tools and numerous AP config getters are hard to distinguish without reading full descriptions. Composite tools like getNetworkHealthSummary and getGatewayHealth help, but the set still presents multiple plausible choices for the same question.

Naming Consistency3/5

All names are camelCase, but conventions vary: getApDetail vs getSitesApsIpSetting vs getGridClientHistory vs listSitesCableTestSwitchesPorts mix resource-first and path-derived naming. Verbs are mostly get/list/search/diagnose, though the same resource can be addressed through different prefixes, making the pattern only partially predictable.

Tool Count1/5

113 tools is an extreme mismatch for a coherent MCP surface. The set is a broad mirror of controller endpoints rather than a curated set of operations, and many near-duplicate read endpoints make it difficult for an agent to choose correctly.

Completeness2/5

Coverage is heavily read-only: there are extensive getters for devices, clients, APs, switches, gateways, and firewall settings, but almost no create/update/delete operations for core lifecycle tasks such as adopting devices, upgrading firmware, configuring SSIDs, or editing ACLs. The searchOperations/describeOperation pair helps discovery but does not fill the missing mutation surface.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to read and safely modify TP-Link Omada networks through capability-gated tools, with a default read-only profile and dry-run writes for security.
    11
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Lets an AI assistant inspect and adjust TP-Link Omada WiFi networks by searching, describing, and calling any of roughly 1,650 Omada Open API operations through nine tools. It is read-only by default, refusing every non-GET request unless writes are explicitly unlocked, and even then returning a dry-run preview until a change is confirmed.
    9
    4
    MIT