Skip to main content
Glama
enuno

UniFi MCP Server

by enuno

UniFi MCP Server

CI Security codecov PyPI Python License Ask DeepWiki

A Model Context Protocol (MCP) server that exposes the UniFi Network Controller API today and is evolving into a production-grade multi-domain platform for Protect, Access, and enterprise-scale orchestration.

See SPEC.md for the architecture target and DEVELOPMENT_PLAN.md for the phase roadmap.

Operator quick start

Objective

Give operators a fast, safe reading order for understanding what the server does today, what it is becoming, and which docs govern rollout decisions.

Prerequisites

  • You know which UniFi API mode the deployment uses: local, cloud-ea, or cloud-v1.

  • You know whether the runtime is stdio, HTTP, SSE, or streamable HTTP.

  • You have read the phase target in SPEC.md and the current work item in DEVELOPMENT_PLAN.md.

Procedure

  1. Confirm the current stable release and current phase focus.

  2. Read SPEC.md for architecture intent and DEVELOPMENT_PLAN.md for sequencing.

  3. Use API.md and docs/UNIFI_API.md for implementation surface details.

  4. Use the phase runbooks in NETWORK_PLAYBOOK.md, HARBOR_SETUP.md, MULTI_CONTROLLER.md, METRICS.md, WEBHOOK_SETUP.md, and A2A.md when operating or extending phase 5 systems.

  5. For release work, consult RELEASE_CHECKLIST.md and docs/RELEASE_PROCESS.md before tagging or publishing.

Verification

  • The chosen API mode matches the runtime configuration.

  • The current phase and the documented roadmap agree.

  • The operator can point to the correct runbook before making a change.

Rollback

  • If the selected runbook does not match the deployed capability, stop and reconcile docs before changing production state.

Common failure modes

  • README claims outrun the codebase.

  • Operators follow phase language without checking the specific runbook.

  • Release or rollout decisions are made from the README alone instead of the canonical docs.

Related MCP server: UniFi Network MCP Server

πŸ“‹ Version Notice

Current Stable Release: 0.2.5 (May 1, 2026) πŸŽ‰

Installation:

pip install unifi-mcp-server

Roadmap focus:

  • Phase 3: native Protect API integration (camera/NVR/device/view/event read tools and resources now wired; PTZ and media streams still in progress)

  • Phase 4: testing, polish, minor gaps, runbooks, skills, and developer workflow hardening

  • Phase 5: multi-controller orchestration, dry-run, RBAC, audit logging, metrics, A2A, webhooks, Access API work, and tool exposure profiles

See: RELEASE_NOTES_0.2.5.md for complete changelog.

Current Development Posture

  • Current repo codebase: ~220 async tool functions across 40+ modules

  • Phases 0–2 are complete

  • Phase 3 (Protect API integration) is the active implementation target

  • The architectural target is documented in SPEC.md

  • The canonical roadmap is DEVELOPMENT_PLAN.md

Previous Release - v0.2.4 (2026-02-19):

  • 🚨 Critical Startup Fix (issue #42) - ImportError: cannot import 'config' from 'agnost' prevented startup. Fixed by moving agnost imports inside the conditional block.

  • πŸ“Œ Dependency Pin - Excluded broken agnost==0.1.13 from version range (>=0.1.12,!=0.1.13)

  • πŸ§ͺ 1,325 Tests Passing - 1219 unit + 106 integration tests, cloud-ea API compatibility fixes, Site Manager endpoint hardening

Previous Release - v0.2.3 (2026-02-18):

  • βœ… P1 API bug fixes (QoS audit_action, Site Manager decorator, Topology warnings, Backup client methods)

  • βœ… P2 RADIUS & Guest Portal β€” Complete CRUD (get/update for RADIUS accounts and hotspot packages)

Previous Release - v0.2.2 (2026-02-16):

  • πŸ”Œ Port Profile Management - 8 new tools for switch port configuration (PoE, VLAN, 802.1X, LLDP-MED)

  • πŸ”’ Security Updates - Critical dependency updates (FastMCP 2.14.5, MCP 1.26.0, cryptography 46.0.5)

  • πŸ§ͺ 1,068 Tests Passing - 75 new tests, all passing across Python 3.10, 3.11, 3.12

Major Release - v0.2.0 (2026-01-25):

  • ✨ 74 MCP Tools - All 7 feature phases complete

  • πŸ“¦ Published on PyPI - Easy installation with pip/uv

  • πŸ“Š QoS Management - Traffic prioritization and bandwidth control (11 tools)

  • πŸ’Ύ Backup & Restore - Automated scheduling and verification (8 tools)

  • 🌐 Multi-Site Aggregation - Cross-site analytics and management (4 tools)

  • πŸ”’ ACL & Traffic Filtering - Advanced traffic control (7 tools)

  • 🏒 Site Management - Multi-site provisioning and VPN (9 tools)

  • πŸ” RADIUS & Guest Portal - 802.1X authentication (6 tools)

  • πŸ—ΊοΈ Network Topology - Complete topology mapping and visualization (5 tools)

See CHANGELOG.md for complete release notes and VERIFICATION_REPORT.md for detailed verification.

🌐 API Mode Support

The UniFi MCP Server supports three distinct API modes with different capabilities:

Full feature support - Direct access to your UniFi gateway.

  • βœ… All Features Available: Device management, client control, network configuration, firewall rules, WiFi management

  • βœ… Real-time Data: Access to live device/client statistics and detailed information

  • βœ… Configuration Changes: Create, update, delete networks, VLANs, firewall rules, SSIDs

  • πŸ“ Requirement: Local network access to your UniFi gateway (e.g., 192.168.2.1)

  • βš™οΈ Configuration: UNIFI_API_TYPE=local + UNIFI_LOCAL_HOST=<gateway-ip>

Cloud Early Access API ⚠️

Site-centric access - UniFi cloud API with limited but functional read-only capabilities.

  • βœ… Site Management: List sites, get site details (matches by siteId, _id, name, or meta.name)

  • βœ… Site Manager API (optional): Multi-site aggregation, host inventory, cross-site statistics

    • Enable with UNIFI_SITE_MANAGER_ENABLED=true

    • Gracefully degrades when endpoints are unavailable

  • ⚠️ No Individual Device/Client Access: Cannot query specific devices or clients

  • ⚠️ No Configuration Changes: Cannot modify networks, firewall rules, or settings

  • βš™οΈ Configuration: UNIFI_API_TYPE=cloud-ea + optional UNIFI_SITE_MANAGER_ENABLED=true

  • πŸ“Š Rate Limit: 100 requests/minute

Cloud V1 API ⚠️

Limited to aggregate statistics - UniFi stable v1 cloud API.

  • βœ… Site Information: List sites with aggregate statistics (device counts, client counts, bandwidth)

  • ⚠️ No Individual Device/Client Access: Cannot query specific devices or clients

  • ⚠️ No Configuration Changes: Cannot modify networks, firewall rules, or settings

  • βš™οΈ Configuration: UNIFI_API_TYPE=cloud-v1

  • πŸ“Š Rate Limit: 10,000 requests/minute

πŸ’‘ Recommendation: Use Local Gateway API (UNIFI_API_TYPE=local) for full functionality. Cloud APIs are suitable only for high-level monitoring dashboards.

πŸ”Œ Transport Modes

The UniFi MCP Server supports multiple transport modes for different deployment scenarios:

STDIO (Default) βœ…

Local subprocess communication β€” Best for Claude Desktop, Cursor, and local AI clients.

  • βœ… Default mode: No configuration needed

  • βœ… Zero network overhead: Direct stdin/stdout communication

  • βœ… No port required: Runs as a subprocess of the MCP client

  • βš™οΈ Configuration: MCP_SERVER_TRANSPORT=stdio (default)

SSE (Server-Sent Events) 🌐 ⚠️ Deprecated

Network-accessible HTTP server β€” legacy transport, kept for backward compatibility.

  • ⚠️ Known issue: client proxies such as mcp-remote can send the first tool call before the SSE initialize handshake finishes, which the MCP SDK rejects with Received request before initialization was complete (see #96). This is a timing issue in the SSE transport itself (upstream in the mcp SDK / client proxy, not this server's tool logic), so it cannot be fixed from this codebase.

  • βœ… Network access: Connect from any MCP client over HTTP

  • βœ… MCP gateway compatible: Works with MCP gateways that consolidate servers

  • βš™οΈ Configuration: MCP_SERVER_TRANSPORT=sse + MCP_SERVER_PORT=3000

  • πŸ‘‰ Prefer Streamable HTTP below for any new network-accessible deployment.

HTTP 🌐

Standard HTTP transport β€” Alternative network mode.

  • βš™οΈ Configuration: MCP_SERVER_TRANSPORT=http + MCP_SERVER_PORT=3000

Modern HTTP transport β€” the current MCP transport standard, and the successor to SSE.

  • βœ… Network access: Connect from any MCP client over HTTP

  • βœ… MCP gateway compatible: Works with MCP gateways that consolidate servers

  • βœ… No SSE handshake race: session initialization is part of the same request/response cycle, avoiding the class of timing issue SSE has with proxies like mcp-remote

  • βš™οΈ Configuration: MCP_SERVER_TRANSPORT=streamable_http + MCP_SERVER_PORT=3000 + MCP_AUTH_TOKEN=<token>

⚠️ Authentication is required for network transports. The MCP endpoint exposes every registered tool, including destructive ones. http, sse, and streamable_http will refuse to start unless MCP_AUTH_TOKEN is set; clients then send Authorization: Bearer <token>. The server binds to 127.0.0.1 by default β€” terminate TLS and authenticate at a reverse proxy before widening MCP_SERVER_HOST to 0.0.0.0.

πŸ’‘ Recommendation: Use STDIO for local AI clients (Claude Desktop, Cursor). Use Streamable HTTP when running behind an authenticating MCP gateway or reverse proxy β€” prefer it over SSE, which is kept only for backward compatibility.

🧭 Tool Exposure Profiles

To reduce context-window bloat, the server will support named exposure profiles that register only the tools relevant to a given UniFi application area.

Planned profiles

  • network β€” network, switching, WiFi, DHCP, DNS, traffic, and client tools

  • protect β€” cameras, NVRs, devices, views, events, talkback, and Protect workflows (read surfaces wired; PTZ/media streams still in progress)

  • access β€” doors, readers, credentials, visitors, and access-control workflows

  • talk β€” UniFi Talk devices, calls, lines, and telephony workflows

  • drive β€” UniFi Drive storage, files, sharing, and drive workflows

  • read-only β€” get_*, list_*, stat_*, and search_* tools only

Intended behavior

  • Keep the full tool surface available when no profile is selected

  • Expose fewer tools per session so agents do not carry unrelated UniFi modules in context

  • Make the server easier to use in application-specific deployments and focused agent workflows

  • Pair with UNIFI_PROFILE so profile selection is explicit and repeatable

# Set transport to Streamable HTTP
export MCP_SERVER_TRANSPORT=streamable_http
export MCP_SERVER_PORT=3000
# Required β€” the server refuses to start a network transport without it
export MCP_AUTH_TOKEN=$(openssl rand -hex 32)

# Start the server (binds to 127.0.0.1 by default)
unifi-mcp-server
# Server listening on 127.0.0.1:3000 via streamable_http
# Clients send: Authorization: Bearer $MCP_AUTH_TOKEN

Docker Compose for Streamable HTTP Mode

services:
  unifi-mcp:
    image: ghcr.io/enuno/unifi-mcp-server:latest
    environment:
      UNIFI_API_KEY: your-api-key
      UNIFI_API_TYPE: local
      UNIFI_LOCAL_HOST: 192.168.2.1
      MCP_SERVER_TRANSPORT: streamable_http
      MCP_SERVER_PORT: 3000
      MCP_SERVER_HOST: 0.0.0.0            # container-internal; keep the published port on loopback
      MCP_AUTH_TOKEN: ${MCP_AUTH_TOKEN}   # required β€” clients send Authorization: Bearer <token>
    ports:
      # Published on loopback; put an authenticating TLS proxy in front to expose it further.
      - "127.0.0.1:3000:3000"

Connecting via MCP Gateway

Once running in Streamable HTTP mode, configure your MCP gateway to connect:

{
  "mcpServers": {
    "unifi": {
      "url": "http://your-server-ip:3000/mcp"
    }
  }
}

Running in SSE Mode (deprecated)

SSE is kept for backward compatibility only β€” see the transport modes section above for why Streamable HTTP is preferred. To run it anyway:

export MCP_SERVER_TRANSPORT=sse
export MCP_SERVER_PORT=3000
unifi-mcp-server
# Server listening on 127.0.0.1:3000 via sse (MCP_AUTH_TOKEN required)

Features

Core Network Management

  • Device Management: List, monitor, restart, locate, and upgrade UniFi devices (APs, switches, gateways)

  • Network Configuration: Create, update, and delete networks, VLANs, and subnets with DHCP configuration

  • Client Management: Query, block, unblock, and reconnect clients with detailed analytics

  • WiFi/SSID Management: Create and manage wireless networks with WPA2/WPA3, guest networks, and VLAN isolation

  • Port Profile Management (v0.2.2): Switch port configuration with PoE, VLAN trunking, 802.1X, LLDP-MED, speed/duplex

  • Device Port Overrides (v0.2.2): Per-port configuration on individual switches with smart merge capabilities

  • Port Forwarding: Configure port forwarding rules for external access

  • DPI Statistics: Deep Packet Inspection analytics for bandwidth usage by application and category

  • Multi-Site Support: Work with multiple UniFi sites seamlessly

  • Real-time Monitoring: Access device, network, client, and WiFi statistics

Security & Firewall (v0.2.0)

  • Firewall Rules: Create, update, and delete firewall rules with advanced traffic filtering

  • ACL Management: Layer 3/4 access control lists with rule ordering and priority

  • Traffic Matching Lists: IP, MAC, domain, and port-based traffic classification

  • Zone-Based Firewall: Modern zone-based security with zone management and zone-to-zone policies

  • RADIUS Authentication: 802.1X authentication with RADIUS server configuration

  • Guest Portal: Customizable captive portals with hotspot billing and voucher management

Quality of Service (v0.2.0)

  • QoS Profiles: Create and manage QoS profiles for traffic prioritization

  • Traffic Routes: Time-based routing with schedules and application awareness

  • Bandwidth Management: Upload/download limits with guaranteed minimums

  • ProAV Mode: Professional audio/video QoS templates

  • Reference Profiles: Built-in QoS templates for common applications

Backup & Operations (v0.2.0)

  • Automated Backups: Schedule backups with cron expressions

  • Backup Management: Create, download, restore, and delete backups

  • Cloud Sync Tracking: Monitor backup cloud synchronization status

  • Checksum Verification: Ensure backup integrity with SHA-256 checksums

  • Multiple Backup Types: Network configurations and full system backups

Multi-Site Management (v0.2.0)

  • Site Provisioning: Create, update, and delete UniFi sites

  • Site-to-Site VPN: Configure VPN tunnels between sites

  • Device Migration: Move devices between sites seamlessly

  • Site Health Monitoring: Track site health scores and metrics

  • Cross-Site Analytics: Aggregate device and client statistics across locations

  • Configuration Export: Export site configurations for backup/documentation

Network Topology (v0.2.0)

  • Topology Discovery: Complete network graph with devices and clients

  • Connection Mapping: Port-level device interconnections

  • Multi-Format Export: JSON, GraphML (Gephi), and DOT (Graphviz) formats

  • Network Depth Analysis: Identify network hierarchy and uplink relationships

  • Visual Coordinates: Optional device positioning for diagrams

Phase 5: Enterprise scale and operational excellence

  • Redis Caching: Optional Redis-based caching for improved performance (configurable TTL per resource type)

  • Webhook Support: Real-time event processing with HMAC signature verification

  • Automatic Cache Invalidation: Smart cache invalidation when configuration changes

  • Event Handlers: Built-in handlers for device, client, and alert events

  • Performance Tracking: Optional agnost.ai integration for monitoring MCP tool performance and usage analytics

  • Operator Memory: Optional Supermemory integration for persisting operator notes/context across tool calls, scoped per site

  • Roadmap-aligned controls: planned dry-run, RBAC, audit logging, metrics, and A2A discovery

Safety & Security

  • Read-Only Mode: Set UNIFI_READ_ONLY=true to register only non-mutating tools β€” state-changing tools are then absent from the MCP tool list entirely, rather than relying on a caller-supplied confirm flag

  • Confirmation Required: All mutating operations require explicit confirm=True flag

  • Dry-Run Mode: Planned change-safe preview path for all write and destructive operations

  • Audit Logging: Planned append-only audit trail for mutation paths

  • Tool Scoping: Planned API-key-based RBAC for least-privilege access

  • Input Validation: Comprehensive parameter validation with detailed error messages

  • Password Masking: Sensitive data automatically masked in logs

  • Type-Safe: Full type hints and Pydantic validation throughout

  • Security Scanners: CodeQL, Trivy, Bandit, Safety, and detect-secrets integration

Technical Excellence

  • Async Support: Built with async/await for high performance and concurrency

  • MCP Protocol: Standard Model Context Protocol for AI agent integration

  • Comprehensive Testing: 1,236 tests with high coverage, all passing across Python 3.10–3.13

  • CI/CD Pipelines: Automated testing, security scanning, and Docker builds (18 checks)

  • Multi-Architecture: Docker images for amd64, arm64, arm/v7 (32-bit ARM), and arm64/v8

  • Security Hardened: Updated critical dependencies (FastMCP, MCP SDK, cryptography)

  • Quality Metrics: Black formatting, Ruff linting, comprehensive type hints, Pydantic validation

Quick Start

Prerequisites

  • Python 3.10 or higher

  • A UniFi account at unifi.ui.com

  • UniFi API key (obtain from Settings β†’ Control Plane β†’ Integrations)

  • Access to UniFi Cloud API or local gateway

Installation

The UniFi MCP Server is published on PyPI and can be installed with pip or uv:

# Install from PyPI
pip install unifi-mcp-server

# Or using uv (faster)
uv pip install unifi-mcp-server

# Install specific version
pip install unifi-mcp-server==0.2.5

After installation, the unifi-mcp-server command will be available globally.

PyPI Package: https://pypi.org/project/unifi-mcp-server/

Using Docker (Alternative)

# Pull the latest release
docker pull ghcr.io/enuno/unifi-mcp-server:0.2.5

# Multi-architecture support: amd64, arm64, arm/v7, arm64/v8

Build from Source (Development)

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone the repository
git clone https://github.com/enuno/unifi-mcp-server.git
cd unifi-mcp-server

# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"

Using pip

# Clone the repository
git clone https://github.com/enuno/unifi-mcp-server.git
cd unifi-mcp-server

# Create virtual environment
python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -e ".[dev]"

The recommended way to run the UniFi MCP Server with full monitoring capabilities:

# 1. Copy and configure environment variables
cp .env.docker.example .env
# Edit .env with your UNIFI_API_KEY and AGNOST_ORG_ID

# 2. Start all services (MCP Server + Redis + MCP Toolbox)
docker-compose up -d

# 3. Check service status
docker-compose ps

# 4. View logs
docker-compose logs -f unifi-mcp

# 5. Access MCP Toolbox dashboard
open http://localhost:8080

# 6. Stop all services
docker-compose down

Included Services:

  • UniFi MCP Server: Main MCP server with ~220 async tool functions

  • MCP Toolbox: Web-based analytics dashboard (port 8080)

  • Redis: High-performance caching layer

See MCP_TOOLBOX.md for detailed Toolbox documentation.

Using Docker (Standalone)

For standalone Docker usage (not with MCP clients):

# Pull the image
docker pull ghcr.io/enuno/unifi-mcp-server:latest

# Run the container in background (Cloud API)
# Note: -i flag keeps stdin open for STDIO transport
docker run -i -d \
  --name unifi-mcp \
  -e UNIFI_API_KEY=your-api-key \
  -e UNIFI_API_TYPE=cloud \
  ghcr.io/enuno/unifi-mcp-server:latest

# OR run with local gateway proxy
docker run -i -d \
  --name unifi-mcp \
  -e UNIFI_API_KEY=your-api-key \
  -e UNIFI_API_TYPE=local \
  -e UNIFI_HOST=192.168.2.1 \
  ghcr.io/enuno/unifi-mcp-server:latest

# Check container status
docker ps --filter name=unifi-mcp

# View logs
docker logs unifi-mcp

# Stop and remove
docker rm -f unifi-mcp

Note: For MCP client integration (Claude Desktop, etc.), see the Usage section below for the correct configuration without -d flag.

Build from Source

Prerequisites

  • Python 3.10+: Required for running the server

  • Git: For cloning the repository

  • uv (recommended) or pip: For dependency management

  • Docker (optional): For containerized builds

  • Node.js & npm (optional): For npm package publishing

Development Build

1. Clone the Repository

git clone https://github.com/enuno/unifi-mcp-server.git
cd unifi-mcp-server

2. Set Up Development Environment

Using uv (Recommended):

# Install uv if not already installed
curl -LsSf https://astral.sh/uv/install.sh | sh

# Create virtual environment
uv venv

# Activate virtual environment
source .venv/bin/activate  # Linux/macOS
# Or on Windows: .venv\Scripts\activate

# Install development dependencies
uv pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install
pre-commit install --hook-type commit-msg

Using pip:

# Create virtual environment
python -m venv .venv

# Activate virtual environment
source .venv/bin/activate  # Linux/macOS
# Or on Windows: .venv\Scripts\activate

# Upgrade pip
pip install --upgrade pip

# Install development dependencies
pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install
pre-commit install --hook-type commit-msg

3. Configure Environment

# Copy example configuration
cp .env.example .env

# Edit .env with your UniFi credentials
# Required: UNIFI_API_KEY
# Recommended: UNIFI_API_TYPE=local, UNIFI_LOCAL_HOST=<gateway-ip>

4. Run Tests

# Run all unit tests
pytest tests/unit/ -v

# Run with coverage report
pytest tests/unit/ --cov=src --cov-report=html --cov-report=term-missing

# View coverage report
open htmlcov/index.html  # macOS
# Or: xdg-open htmlcov/index.html  # Linux

5. Run the Server

# Development mode with MCP Inspector
uv run mcp dev src/main.py

# Production mode
uv run python -m src.main

# The MCP Inspector will be available at http://localhost:5173

Production Build

Build Python Package

# Install build tools
uv pip install build

# Build wheel and source distribution
python -m build

# Output: dist/unifi_mcp_server-0.2.0-py3-none-any.whl
#         dist/unifi_mcp_server-0.2.0.tar.gz

Build Docker Image

# Build for current architecture
docker build -t unifi-mcp-server:0.2.0 .

# Build multi-architecture (requires buildx)
docker buildx create --use
docker buildx build \
  --platform linux/amd64,linux/arm64,linux/arm/v7 \
  -t ghcr.io/enuno/unifi-mcp-server:0.2.0 \
  --push .

# Test the image
docker run -i --rm \
  -e UNIFI_API_KEY=your-key \
  -e UNIFI_API_TYPE=cloud \
  unifi-mcp-server:0.2.0

Publishing

Publish to PyPI

# Install twine
uv pip install twine

# Check distribution
twine check dist/*

# Upload to PyPI (requires PyPI account and token)
twine upload dist/*

# Or upload to Test PyPI first
twine upload --repository testpypi dist/*

Publish to npm (Metadata Wrapper)

# Ensure package.json is up to date
cat package.json

# Login to npm (if not already)
npm login

# Publish package
npm publish --access public

# Verify publication
npm view unifi-mcp-server

Publish to MCP Registry

# Install mcp-publisher
brew install mcp-publisher
# Or: curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher && sudo mv mcp-publisher /usr/local/bin/

# Authenticate with GitHub (for io.github.enuno namespace)
mcp-publisher login github

# Publish to registry (requires npm package published first)
mcp-publisher publish

# Verify
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.enuno/unifi-mcp-server"

Release Process

See docs/RELEASE_PROCESS.md for the complete release workflow, including automated GitHub Actions, manual PyPI/npm publishing, and MCP registry submission.

Configuration

Obtaining Your API Key

  1. Log in to UniFi Site Manager

  2. Navigate to Settings β†’ Control Plane β†’ Integrations

  3. Click Create API Key

  4. Save the key immediately - it's only shown once!

  5. Store it securely in your .env file

Configuration File

Create a .env file in the project root:

# Required: Your UniFi API Key
UNIFI_API_KEY=your-api-key-here

# API Mode Selection (choose one):
# - 'local': Full access via local gateway (RECOMMENDED)
# - 'cloud-ea': Early Access cloud API (limited to statistics)
# - 'cloud-v1': Stable v1 cloud API (limited to statistics)
UNIFI_API_TYPE=local

# Local Gateway Configuration (for UNIFI_API_TYPE=local)
UNIFI_LOCAL_HOST=192.168.2.1
UNIFI_LOCAL_PORT=443
UNIFI_LOCAL_VERIFY_SSL=false

# Cloud API Configuration (for cloud-ea or cloud-v1)
# UNIFI_CLOUD_API_URL=https://api.ui.com

# Site Manager API (cloud-ea only, optional)
# UNIFI_SITE_MANAGER_ENABLED=true

# Optional settings
UNIFI_DEFAULT_SITE=default

# Redis caching (optional - improves performance)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_DB=0
# REDIS_PASSWORD=your-password  # If Redis requires authentication

# Webhook support (optional - for real-time events)
WEBHOOK_SECRET=your-webhook-secret-here

# Performance tracking with agnost.ai (optional - for analytics)
# Get your Organization ID from https://app.agnost.ai
# AGNOST_ENABLED=true
# AGNOST_ORG_ID=your-organization-id-here
# AGNOST_ENDPOINT=https://api.agnost.ai
# AGNOST_DISABLE_INPUT=false  # Set to true to disable input tracking
# AGNOST_DISABLE_OUTPUT=false # Set to true to disable output tracking

# Supermemory (optional - operator notes/context storage, scoped per site)
# Requires: pip install supermemory
# Get your API key from https://console.supermemory.ai
# SUPERMEMORY_ENABLED=true
# SUPERMEMORY_API_KEY=your-supermemory-api-key-here

See .env.example for all available options.

Running the Server

# Development mode with MCP Inspector
uv run mcp dev src/main.py

# Production mode
uv run python src/main.py

The MCP Inspector will be available at http://localhost:5173 for interactive testing.

Usage

With Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

After installing via pip install unifi-mcp-server:

{
  "mcpServers": {
    "unifi": {
      "command": "unifi-mcp-server",
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      }
    }
  }
}

For cloud API access, use:

{
  "mcpServers": {
    "unifi": {
      "command": "unifi-mcp-server",
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "cloud-v1"
      }
    }
  }
}

Option 2: Using uv with PyPI Package

{
  "mcpServers": {
    "unifi": {
      "command": "uvx",
      "args": ["unifi-mcp-server"],
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      }
    }
  }
}

Option 3: Using Docker

{
  "mcpServers": {
    "unifi": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "UNIFI_API_KEY=your-api-key-here",
        "-e",
        "UNIFI_API_TYPE=cloud",
        "ghcr.io/enuno/unifi-mcp-server:latest"
      ]
    }
  }
}

Important: Do NOT use -d (detached mode) in MCP client configurations. The MCP client needs to maintain a persistent stdin/stdout connection to the container.

With Cursor

Add to your Cursor MCP configuration (mcp.json via "View: Open MCP Settings β†’ New MCP Server"):

After installing via pip install unifi-mcp-server:

{
  "mcpServers": {
    "unifi-mcp": {
      "command": "unifi-mcp-server",
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1",
        "UNIFI_LOCAL_VERIFY_SSL": "false"
      },
      "disabled": false
    }
  }
}

Option 2: Using uv with PyPI Package

{
  "mcpServers": {
    "unifi-mcp": {
      "command": "uvx",
      "args": ["unifi-mcp-server"],
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      },
      "disabled": false
    }
  }
}

Option 3: Using Docker

{
  "mcpServers": {
    "unifi-mcp": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--name", "unifi-mcp-server",
        "-e", "UNIFI_API_KEY=your_unifi_api_key_here",
        "-e", "UNIFI_API_TYPE=local",
        "-e", "UNIFI_LOCAL_HOST=192.168.2.1",
        "-e", "UNIFI_LOCAL_VERIFY_SSL=false",
        "ghcr.io/enuno/unifi-mcp-server:latest"
      ],
      "disabled": false
    }
  }
}

Configuration Notes:

  • Replace UNIFI_API_KEY with your actual UniFi API key

  • For local gateway access, set UNIFI_API_TYPE=local and provide UNIFI_LOCAL_HOST

  • For cloud API access, use UNIFI_API_TYPE=cloud-v1 or cloud-ea

  • After saving, restart Cursor to activate the server

  • Invoke tools in the Chat sidebar (e.g., "List my UniFi devices")

With Other MCP Clients

The UniFi MCP Server works with any MCP-compatible client. Here are generic configuration patterns:

Using the Installed Command

After installing from PyPI (pip install unifi-mcp-server):

{
  "mcpServers": {
    "unifi": {
      "command": "unifi-mcp-server",
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      }
    }
  }
}

Using uvx (Run from PyPI without installation)

{
  "mcpServers": {
    "unifi": {
      "command": "uvx",
      "args": ["unifi-mcp-server"],
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      }
    }
  }
}

Using Python Module Directly

{
  "mcpServers": {
    "unifi": {
      "command": "python3",
      "args": ["-m", "src.main"],
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1"
      }
    }
  }
}

Using as a Claude Code Skill

The repo ships a SKILL.md and four categorized skill files in skills/ that let AI agents load UniFi context on-demand β€” without keeping all 215+ tool definitions in the LLM context for every conversation.

Install the skill

# Personal skill (available in all Claude Code sessions)
cp SKILL.md ~/.claude/skills/unifi.md

# Or install all four domain skills individually
cp skills/unifi-network.md   ~/.claude/skills/
cp skills/unifi-devices.md   ~/.claude/skills/
cp skills/unifi-security.md  ~/.claude/skills/
cp skills/unifi-system.md    ~/.claude/skills/

Once installed, Claude Code will automatically reference the skill when you ask about UniFi topics, without loading the full MCP server into every conversation.

Scoped MCP profiles (reduce context footprint)

You can run the MCP server with only the tools you need by setting UNIFI_PROFILE:

Profile

Tools loaded

Best for

network

Clients, VLANs, WiFi, DHCP, DNS, vouchers

Day-to-day network ops

devices

Inventory, control, ports, switching, topology

Hardware management

security

Firewall, ZBF, ACLs, VPN, content filtering

Security audits

system

Sites, backups, traffic flows, DPI, RADIUS

Monitoring & ops

minimal

Sites + clients + devices only

Quick checks

{
  "mcpServers": {
    "unifi-security": {
      "command": "uvx",
      "args": ["unifi-mcp-server"],
      "env": {
        "UNIFI_API_KEY": "your-api-key-here",
        "UNIFI_API_TYPE": "local",
        "UNIFI_LOCAL_HOST": "192.168.2.1",
        "UNIFI_PROFILE": "security"
      }
    }
  }
}

See docs/SKILLS.md for the full guide.

Environment Variables (All Clients):

  • UNIFI_API_KEY (required): Your UniFi API key from unifi.ui.com

  • UNIFI_API_TYPE (required): local, cloud-v1, or cloud-ea

  • For Local Gateway API:

    • UNIFI_LOCAL_HOST: Gateway IP (e.g., 192.168.2.1)

    • UNIFI_LOCAL_PORT: Gateway port (default: 443)

    • UNIFI_LOCAL_VERIFY_SSL: SSL verification (default: false)

  • For Cloud APIs:

    • UNIFI_CLOUD_API_URL: Cloud API URL (default: https://api.ui.com)

    • UNIFI_DEFAULT_SITE: Default site ID (default: default)

    • UNIFI_SITE_MANAGER_ENABLED: Enable Site Manager multi-site tools for cloud-ea (default: false)

  • Tool Scope (reduces LLM context size):

    • UNIFI_PROFILE: Load only a subset of tools β€” network, devices, security, system, or minimal (default: all tools)

  • MCP Server Transport:

    • MCP_SERVER_TRANSPORT: Transport mode (stdio, sse, http, streamable_http; default: stdio)

    • MCP_SERVER_HOST: Bind address for network transports (default: 127.0.0.1)

    • MCP_SERVER_PORT: Server port (default: 3000)

    • MCP_AUTH_TOKEN: Bearer token required for network transports; comma-separate for several (default: unset β€” network transports refuse to start without it)

Programmatic Usage

from mcp import MCP
import asyncio

async def main():
    mcp = MCP("unifi-mcp-server")

    # List all devices
    devices = await mcp.call_tool("list_devices", {
        "site_id": "default"
    })

    for device in devices:
        print(f"{device['name']}: {device['status']}")

    # Get network information via resource
    networks = await mcp.read_resource("sites://default/networks")
    print(f"Networks: {len(networks)}")

    # Create a guest WiFi network with VLAN isolation
    wifi = await mcp.call_tool("create_wlan", {
        "site_id": "default",
        "name": "Guest WiFi",
        "security": "wpapsk",
        "password": "GuestPass123!",
        "is_guest": True,
        "vlan_id": 100,
        "confirm": True  # Required for safety
    })
    print(f"Created WiFi: {wifi['name']}")

    # Get DPI statistics for top bandwidth users
    top_apps = await mcp.call_tool("list_top_applications", {
        "site_id": "default",
        "limit": 5,
        "time_range": "24h"
    })

    for app in top_apps:
        gb = app['total_bytes'] / 1024**3
        print(f"{app['application']}: {gb:.2f} GB")

    # Create Zone-Based Firewall zones (UniFi Network 9.0+)
    lan_zone = await mcp.call_tool("create_firewall_zone", {
        "site_id": "default",
        "name": "LAN",
        "description": "Trusted local network",
        "confirm": True
    })

    iot_zone = await mcp.call_tool("create_firewall_zone", {
        "site_id": "default",
        "name": "IoT",
        "description": "Internet of Things devices",
        "confirm": True
    })

    # Set zone-to-zone policy (LAN can access IoT, but IoT cannot access LAN)
    await mcp.call_tool("update_zbf_policy", {
        "site_id": "default",
        "source_zone_id": lan_zone["_id"],
        "destination_zone_id": iot_zone["_id"],
        "action": "accept",
        "confirm": True
    })

asyncio.run(main())

API Documentation

See API.md for complete API documentation, including:

  • Available MCP tools

  • Resource URI schemes

  • Request/response formats

  • Error handling

  • Examples

Development

Command reference: commands.md

Setup Development Environment

# Install development dependencies
uv pip install -e ".[dev]"

# Install pre-commit hooks
pre-commit install
pre-commit install --hook-type commit-msg

Running Tests

# Run all tests
pytest tests/unit/

# Run with coverage report
pytest tests/unit/ --cov=src --cov-report=html --cov-report=term-missing

# Run specific test file
pytest tests/unit/test_zbf_tools.py -v

# Run tests for the current feature set
pytest tests/unit/test_new_models.py tests/unit/test_zbf_tools.py tests/unit/test_traffic_flow_tools.py

# Run only unit tests (fast)
pytest -m unit

# Run only integration tests (requires UniFi controller)
pytest -m integration

Current Test Coverage:

  • 1,236 tests passing across Python 3.10-3.13

  • Coverage and module-level reporting are tracked in Codecov and CI

  • Module-specific targets are maintained in DEVELOPMENT_PLAN.md and the test suite

Coverage Sunburst

Coverage focus areas:

  • Models and validation layers

  • Core tool paths and safety controls

  • Network, security, and operations surfaces

  • Utilities and helpers

Top Coverage Performers (>95%):

  • clients.py: 98.72%

  • devices.py: 98.44%

  • device_control.py: 99.10%

  • topology.py: 95.83% ⭐ (v0.2.0)

  • vouchers.py: 96.36%

  • firewall.py: 96.11%

See VERIFICATION_REPORT.md for complete coverage details and TESTING_PLAN.md for testing strategy.

Code Quality

# Format code
black src/ tests/
isort src/ tests/

# Lint code
ruff check src/ tests/ --fix

# Type check
mypy src/

# Run all pre-commit checks
pre-commit run --all-files

Testing with MCP Inspector

# Start development server with inspector
uv run mcp dev src/main.py

# Open http://localhost:5173 in your browser

Project Structure

unifi-mcp-server/
β”œβ”€β”€ .github/
β”‚   └── workflows/          # CI/CD pipelines (CI, security, release)
β”œβ”€β”€ .claude/
β”‚   └── commands/          # Custom slash commands for development
β”œβ”€β”€ bin/
β”‚   └── unifi-cli          # Shell wrapper for CLI invocation
β”œβ”€β”€ skills/                # Categorized skill files for AI agents
β”‚   β”œβ”€β”€ unifi-network.md   # Clients, VLANs, WiFi, DHCP, DNS, vouchers
β”‚   β”œβ”€β”€ unifi-devices.md   # Device management, ports, switching, topology
β”‚   β”œβ”€β”€ unifi-security.md  # Firewall, ZBF, ACLs, VPN, content filtering
β”‚   └── unifi-system.md    # Sites, backups, traffic flows, DPI, RADIUS
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.py            # MCP server entry point (215+ tools registered)
β”‚   β”œβ”€β”€ cache.py           # Redis caching implementation
β”‚   β”œβ”€β”€ memory.py          # Supermemory operator notes/context storage
β”‚   β”œβ”€β”€ config/            # Configuration management
β”‚   β”œβ”€β”€ api/               # UniFi API client with rate limiting
β”‚   β”œβ”€β”€ models/            # Pydantic data models
β”‚   β”‚   └── zbf.py         # Zone-Based Firewall models
β”‚   β”œβ”€β”€ tools/             # MCP tool definitions
β”‚   β”‚   β”œβ”€β”€ clients.py     # Client query tools
β”‚   β”‚   β”œβ”€β”€ devices.py     # Device query tools
β”‚   β”‚   β”œβ”€β”€ networks.py    # Network query tools
β”‚   β”‚   β”œβ”€β”€ sites.py       # Site query tools
β”‚   β”‚   β”œβ”€β”€ firewall.py    # Firewall management (Phase 4)
β”‚   β”‚   β”œβ”€β”€ firewall_zones.py  # Zone-Based Firewall zone management (v0.1.4)
β”‚   β”‚   β”œβ”€β”€ zbf_matrix.py  # Zone-Based Firewall policy matrix (v0.1.4)
β”‚   β”‚   β”œβ”€β”€ network_config.py  # Network configuration (Phase 4)
β”‚   β”‚   β”œβ”€β”€ device_control.py  # Device control (Phase 4)
β”‚   β”‚   β”œβ”€β”€ client_management.py  # Client management (Phase 4)
β”‚   β”‚   β”œβ”€β”€ wifi.py        # WiFi/SSID management (Phase 5)
β”‚   β”‚   β”œβ”€β”€ port_forwarding.py  # Port forwarding (Phase 5)
β”‚   β”‚   └── dpi.py         # DPI statistics (Phase 5)
β”‚   β”œβ”€β”€ resources/         # MCP resource definitions
β”‚   β”œβ”€β”€ webhooks/          # Webhook receiver and handlers (Phase 5)
β”‚   └── utils/             # Utility functions and validators
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ unit/              # Unit tests (213 tests, 37% coverage)
β”‚   β”œβ”€β”€ integration/       # Integration tests (planned)
β”‚   └── performance/       # Performance benchmarks (planned)
β”œβ”€β”€ docs/                  # Additional documentation
β”‚   └── AI-Coding/         # AI coding guidelines
β”œβ”€β”€ .env.example           # Environment variable template
β”œβ”€β”€ pyproject.toml         # Project configuration
β”œβ”€β”€ README.md              # This file
β”œβ”€β”€ SKILL.md               # Top-level AI agent skill manifest
β”œβ”€β”€ API.md                 # Complete API documentation
β”œβ”€β”€ DEVELOPMENT_PLAN.md    # Development roadmap
β”œβ”€β”€ docs/archive/          # Archived planning & session docs
β”œβ”€β”€ CONTRIBUTING.md        # Contribution guidelines
β”œβ”€β”€ SECURITY.md            # Security policy and best practices
β”œβ”€β”€ AGENTS.md              # AI agent guidelines
└── LICENSE                # Apache 2.0 License

Contributing

We welcome contributions from both human developers and AI coding assistants! Please see:

Quick Contribution Guide

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/your-feature-name

  3. Make your changes

  4. Run tests and linting: pytest && pre-commit run --all-files

  5. Commit with conventional commits: feat: add new feature

  6. Push and create a pull request

Automated Bug Reports

Found a bug? Issues with [Bug] in the title are automatically analyzed by our AI bug handler:

  • Instant Response: Get immediate feedback on your bug report

  • Smart Analysis: AI determines if it's a real bug or usage issue

  • Auto-Fix: Simple bugs may be automatically fixed with a PR

  • Helpful Guidance: Usage issues receive documentation and examples

See CONTRIBUTING.md for more details.

Security

Security is a top priority. Please see SECURITY.md for:

  • Reporting vulnerabilities

  • Security best practices

  • Supported versions

Never commit credentials or sensitive data!

Roadmap

Version 0.2.0 (Current - Complete βœ… 2026-01-25)

All 7 Feature Phases Complete - 74 MCP Tools

Phase 3: Read-Only Operations (16 tools)

  • Device management (list, details, statistics, search by type)

  • Client management (list, details, statistics, search)

  • Network information (details, VLANs, subnets, statistics)

  • Site management (list, details, statistics)

  • MCP resources (sites, devices, clients, networks)

Phase 4: Mutating Operations with Safety (13 tools)

  • Firewall rule management (create, update, delete)

  • Network configuration (create, update, delete networks/VLANs)

  • Device control (restart, locate, upgrade)

  • Client management (block, unblock, reconnect)

  • Safety mechanisms (confirmation, dry-run, audit logging)

Phase 5: Enterprise scale and operational excellence (11 tools)

  • WiFi/SSID management (create, update, delete, statistics)

  • Port forwarding configuration (create, delete, list)

  • DPI statistics (site-wide, top apps, per-client)

  • Redis caching with automatic invalidation

  • Webhook support for real-time events

Phase 6: Zone-Based Firewall (12 working tools)

  • Zone management (create, update, delete, list, assign networks) - 7 tools βœ… WORKING

  • Zone-to-zone policies via Firewall Policies v2 API - 5 tools βœ… WORKING (PR #13)

  • Legacy zone matrix endpoints - 5 tools ❌ ENDPOINTS DO NOT EXIST (use v2 API instead)

  • Application blocking per zone (DPI-based blocking) - 2 tools ❌ ENDPOINTS DO NOT EXIST

  • Zone statistics and monitoring - 1 tool ❌ ENDPOINT DOES NOT EXIST

  • Type-safe Pydantic models for ZBF and Firewall Policies

  • Comprehensive unit tests (84% coverage)

  • Endpoint verification on U7 Express and UDM Pro (v10.0.156)

Phase 7: Traffic Flow Monitoring (15 tools) βœ… COMPLETE

  • Real-time traffic flow monitoring and analysis

  • Flow filtering by IP, protocol, application, time range

  • Connection state tracking (active, closed, timed-out)

  • Client traffic aggregation with top applications/destinations

  • Bandwidth rate calculations for streaming flows

  • Security quick-response capabilities (block suspicious IPs)

  • Type-safe Pydantic models for traffic flows

  • Comprehensive unit tests (86.62% coverage)

  • Advanced analytics and reporting capabilities

ZBF Implementation Notes (Verified 2025-11-18):

  • βœ… Zone CRUD operations work (local gateway API only)

  • βœ… Zone-to-zone policies work via Firewall Policies v2 API (local gateway API only)

  • ❌ Legacy zone matrix endpoints NOT available via API (use v2 API instead)

  • ❌ Application blocking per zone NOT available via API

  • ❌ Zone statistics NOT available via API

  • See docs/archive/ZBF_STATUS.md for complete details and examples

Phase 1: QoS Enhancements (11 tools) βœ…

  • QoS profile management (CRUD operations)

  • Reference profiles and ProAV templates

  • Traffic routing with time-based schedules

  • Application-based QoS configuration

  • Coverage: 82.43% (46 tests passing)

Phase 2: Backup & Restore (8 tools) βœ…

  • Manual and automated backup creation

  • Backup listing, download, and verification

  • Backup restore functionality

  • Automated scheduling with cron expressions

  • Cloud synchronization tracking

  • Coverage: 86.32% (10 tests passing)

Phase 3: Multi-Site Aggregation (4 tools) βœ…

  • Cross-site device and client analytics

  • Site health monitoring with scoring

  • Side-by-side site comparison

  • Consolidated reporting across locations

  • Coverage: 92.95% (10 tests passing)

Phase 4: ACL & Traffic Filtering (7 tools) βœ…

  • Layer 3/4 access control list management

  • Traffic matching lists (IP, MAC, domain, port)

  • Firewall policy automation

  • Rule ordering and priority

  • Coverage: 89.30-93.84%

Phase 5: Site Management Enhancements (9 tools) βœ…

  • Multi-site provisioning and configuration

  • Site-to-site VPN setup

  • Device migration between sites

  • Advanced site settings management

  • Configuration export for backup

  • Coverage: 92.95% (10 tests passing)

Phase 6: RADIUS & Guest Portal (6 tools) βœ…

  • RADIUS profile configuration (802.1X)

  • RADIUS accounting server support

  • Guest portal customization

  • Hotspot billing and voucher management

  • Session timeout and redirect control

  • Coverage: 69.77% (17 tests passing)

Phase 7: Network Topology (5 tools) βœ…

  • Complete topology graph retrieval

  • Multi-format export (JSON, GraphML, DOT)

  • Device interconnection mapping

  • Port-level connection tracking

  • Network depth analysis

  • Coverage tracked in Codecov and CI

Quality Achievements:

  • 1,236 tests passing

  • 18/18 CI/CD checks passing

  • Zero security vulnerabilities

  • 30+ AI assistant example prompts

  • Comprehensive documentation (docs/archive/VERIFICATION_REPORT.md, API.md)

Total: 74 MCP tools + Comprehensive documentation and verification

Version 0.3.0 (Future - Planned)

  • VPN Management (site_vpn.py - 0% coverage currently)

  • WAN Management (wans.py - 0% coverage currently)

  • Enhanced ZBF Matrix (zbf_matrix.py - improve 65% coverage)

  • Integration tests for caching and webhooks

  • Performance benchmarks and optimization

  • Additional DPI analytics (historical trends)

  • Bulk device/client operations

  • Advanced traffic flow analytics

Version 1.0.0 (Future)

  • Complete UniFi API coverage (remaining endpoints)

  • Advanced analytics dashboard

  • VPN configuration management

  • Alert and notification management

  • Bulk operations for devices

  • Traffic shaping and QoS management

Acknowledgments

This project is inspired by and builds upon:

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Support

🌟 Star History

If you find this project useful, please consider starring it on GitHub to help others discover it!

Star History Chart


Made with ❀️ for the UniFi and AI communities

Available Tools

43 tools
compare_site_performanceC

Compare performance metrics across all sites.

Analyzes uptime, latency, bandwidth, and health status to identify best and worst performing sites.

Args: settings: Application settings

Returns: Performance comparison with rankings and metrics

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavioral traits. It implies read-only analysis but does not explicitly state safety, idempotency, or side effects. The mention of 'analyzes' suggests no mutations, but it is not explicit.

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

Conciseness3/5

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

The description is reasonably concise with the core purpose front-loaded, but the inclusion of a conflicting args section and a 'Returns' line that likely duplicates output schema info reduces efficiency. Every sentence should be earned.

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?

Even with an output schema, the tool fails to provide context on when to compare performance vs. get individual metrics. The misleading args section and lack of usage guidance leave the agent underinformed for correct invocation.

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

Parameters1/5

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

The input schema declares zero parameters, but the description lists 'Args: settings: Application settings'. This directly contradicts the schema, confusing agents. Schema coverage is 100% but the description adds misleading information.

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 clearly states the tool compares performance metrics across all sites, listing specific metrics like uptime, latency, bandwidth, and health status. However, it does not explicitly distinguish itself from similar sibling tools such as 'get_cross_site_statistics' or 'get_internet_health'.

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 is provided on when to use this tool versus alternatives, nor are there any prerequisites or exclusions mentioned. The description is purely declarative.

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

connector_network_deleteB

Proxy a DELETE request to the Network Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Network API sub-path settings: Application settings confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description discloses the destructive nature (DELETE) and safety mechanisms (confirm required, dry_run available). However, it omits details like authentication needs, rate limits, and consequences of execution. The mention of 'settings' param not in schema is confusing.

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 description is relatively concise but includes an undocumented parameter (settings), which reduces clarity. It could be better structured with separate sections for behavior and parameters.

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?

Given the lack of annotations and the existence of an output schema, the description covers key safety and testing features (confirm, dry_run). However, it does not explain return values beyond 'raw response or preview', and the 'settings' discrepancy undermines completeness.

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 0%, so description adds meaning for three of four actual parameters (console_id, path, confirm, dry_run). It explains dry_run as preview without sending. However, it erroneously includes 'settings' which is not in the schema, and does not clarify the confirm parameter's type mismatch (allows string but description says boolean).

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 clearly states the tool proxies a DELETE request to the Network Application via Cloud Connector, accurately reflecting its purpose and distinguishing it from sibling tools like connector_network_get, patch, post, and put.

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 is provided on when to use this tool versus alternatives (e.g., POST for creation, PUT for updates). The description only explains parameters, not usage context or prerequisites.

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

connector_network_getB

Proxy a GET request to the Network Application via Cloud Connector.

Forwards the request to https://api.ui.com/v1/connector/{console_id}/proxy/network/{path} and returns the raw response.

Args: console_id: UniFi console/host identifier (from list_hosts) path: Network API sub-path, e.g. api/s/default/stat/device settings: Application settings (UNIFI_SITE_MANAGER_ENABLED required) params: Optional query parameters

Returns: Raw response from the proxied Network API endpoint

Raises: ValidationError: If console_id or path is empty ValueError: If Site Manager API is not enabled

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
paramsNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so description carries full burden. It states the request is forwarded and returns raw response, and lists raised exceptions (ValidationError, ValueError). However, it mentions a 'settings' parameter that does not appear in the input schema, creating confusion about tool behavior.

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

Conciseness3/5

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

Description is structured with Args/Returns/Raises sections, which aids readability. However, it includes a parameter ('settings') not present in the schema, adding confusion. It could be more concise by removing the erroneous parameter.

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?

Given the tool's complexity as a proxy GET, the description covers the basic behavior and error cases. It references output schema implicitly ('raw response'), but lacks details on pagination or response structure. More context on how path relates to the Network API would improve completeness.

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 0%, so description must explain parameters. It describes 'console_id' and 'path' with examples and 'params' as optional query parameters. However, it also lists a 'settings' argument that is not in the schema, which is misleading and contradictory. This reduces effectiveness.

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?

Description clearly states it proxies a GET request to the Network Application via Cloud Connector, specifying the verb and resource. It differentiates itself from sibling tools that handle other HTTP methods (DELETE, PATCH, POST, PUT) for the same connector.

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?

Description implies usage for retrieving data from the Network API via proxy but does not explicitly state when to use this tool versus alternatives. It mentions required settings (UNIFI_SITE_MANAGER_ENABLED) but lacks guidance on when not to use it.

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

connector_network_patchC

Proxy a PATCH request to the Network Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Network API sub-path settings: Application settings body: Optional request body confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior3/5

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

Discloses that 'confirm' must be true to execute and supports dry_run. However, lacks annotations and does not detail side effects, authorization requirements, or rate limits. For a PATCH operation, it provides basic but not complete behavioral transparency.

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

Conciseness3/5

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

Relatively concise, listing arguments and return value. However, the inclusion of a non-existent 'settings' parameter wastes words and reduces efficiency.

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?

Given the tool's complexity (5 params, no annotations, output schema exists but not described), the description leaves gaps: no explanation of response format beyond 'raw response', no error handling info, and no context for the 'dry_run' preview.

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?

With 0% schema description coverage, the description attempts to explain parameters but includes 'settings' which is not in the schema, creating confusion. It also fails to describe the 'body' parameter's structure or the exact meaning of 'path' sub-path.

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 clearly states it proxies a PATCH request to the Network Application, which distinguishes it from other HTTP methods like PUT. However, the mention of a 'settings' parameter not present in the schema slightly muddies the purpose.

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 explicit guidance on when to use this tool versus siblings (e.g., connector_network_put). The description implies it's for partial updates, but does not state when-not or provide alternatives.

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

connector_network_postA

Proxy a POST request to the Network Application via Cloud Connector.

Args: console_id: UniFi console/host identifier (from list_hosts) path: Network API sub-path, e.g. api/s/default/rest/wlanconf settings: Application settings body: Optional request body to forward confirm: Must be True to execute (mutating operation) dry_run: If True, preview the request without sending it

Returns: Raw response or dry-run preview

Raises: ValidationError: If console_id/path is empty or confirm not provided ValueError: If Site Manager API is not enabled

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description discloses mutation behavior (confirm required), dry-run capability, and error conditions. However, it omits authentication needs, rate limits, or side effects beyond mutation.

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 well-structured with Args, Returns, Raises sections and a clear summary sentence. It is appropriately detailed without excessive verbosity.

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?

Given 5 parameters and no annotations, the description covers most behaviors (mutation, dry-run, errors) but lacks details on rate limits, network dependencies, and does not clarify the extra 'settings' parameter.

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 description adds meaning to parameters via docstring but introduces a 'settings' parameter not present in the input schema, causing inconsistency. Schema coverage is 0%, so the description partially compensates but with a discrepancy.

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 clearly states 'Proxy a POST request to the Network Application via Cloud Connector,' specifying verb, resource, and distinguishing from sibling HTTP method tools (delete, get, patch, put).

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?

The description explains the need for 'confirm' to execute the mutation and 'dry_run' to preview, but does not explicitly contrast with alternatives like GET or other tools.

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

connector_network_putB

Proxy a PUT request to the Network Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Network API sub-path settings: Application settings body: Optional request body confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions confirm as a safety mechanism and dry_run for preview, but omits details about side effects, idempotency, authentication, or rate limits. Additionally, the description lists a 'settings' parameter that is not present in the input schema, introducing inconsistency.

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 concise and uses a clear bullet list for parameters. However, the inclusion of an undocumented 'settings' parameter slightly reduces clarity. Overall, it is well-structured and efficient.

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?

Given 5 parameters, no annotations, and 0% schema coverage, the description should fully cover usage. It addresses most parameters but misses format guidance (e.g., path syntax, console_id pattern) and has the settings discrepancy. The output schema is mentioned but not detailed.

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?

With 0% schema description coverage, the description must compensate. It explains console_id, path, body, confirm, and dry_run, but includes 'settings' which is not in the schema, causing confusion. The explanations are brief and lack formatting details.

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 clearly states 'Proxy a PUT request to the Network Application via Cloud Connector,' which specifies the verb (PUT), resource (Network Application), and mechanism (Cloud Connector). This distinguishes it from sibling tools like connector_network_get, connector_network_post, etc.

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?

The description explains key usage with parameters: confirm ('Must be True to execute') and dry_run ('Preview without sending'). While it doesn't explicitly compare to other methods, the HTTP method in the name implies its use case for updates/creations.

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

connector_protect_deleteC

Proxy a DELETE request to the Protect Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Protect API sub-path settings: Application settings confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It mentions confirm and dry_run parameters but fails to describe authentication, rate limits, side effects, return value details, or error scenarios. The mention of a non-existent 'settings' parameter further reduces transparency.

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 short and front-loaded, listing arguments and return value efficiently. The structure is clear, but the inclusion of an extra parameter ('settings') introduces unnecessary noise.

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?

Given the complexity of a proxy tool (network request, destructive action) and lack of output schema details, the description is incomplete. It omits error handling, response structure beyond 'raw response or preview', and important behavioral context like idempotency or prerequisites.

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%, so the description must compensate. It explains console_id, path, confirm, and dry_run, adding meaning beyond the schema. However, it includes a 'settings' parameter not in the schema, misleading about available inputs. This inconsistency lowers reliability.

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 clearly states it proxies a DELETE request to the Protect Application via Cloud Connector, distinguishing it from other HTTP methods. However, it mentions a 'settings' argument not present in the input schema, which could cause confusion.

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 does not provide any guidance on when to use this tool versus alternatives (e.g., other HTTP methods). It lacks context on prerequisites, when not to use it, or how it fits into a workflow.

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

connector_protect_getA

Proxy a GET request to the Protect Application via Cloud Connector.

Forwards the request to https://api.ui.com/v1/connector/{console_id}/proxy/protect/{path} and returns the raw response.

Args: console_id: UniFi console/host identifier (from list_hosts) path: Protect API sub-path, e.g. v1/cameras settings: Application settings (UNIFI_SITE_MANAGER_ENABLED required) params: Optional query parameters

Returns: Raw response from the proxied Protect API endpoint

Raises: ValidationError: If console_id or path is empty ValueError: If Site Manager API is not enabled

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
paramsNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Without annotations, the description discloses the forwarding behavior and raises, but does not cover rate limits, idempotency, or side effects. The mention of required site manager settings adds some 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 well-structured with sections for arguments, returns, and raises, and is concise without fluff.

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?

Given the existence of an output schema and the proxy nature, the description covers the main purpose and basic behavior, but lacks detail on authentication and header forwarding.

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 description provides context for console_id and path, and mentions params, but includes a 'settings' parameter not in the input schema, causing confusion. Schema coverage is 0%, so the description adds some but incomplete value.

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 clearly states it proxies a GET request to the Protect Application via Cloud Connector, distinguishing it from sibling tools with different HTTP methods.

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?

The description implicitly differentiates usage via its HTTP method name and sibling names (e.g., connector_protect_delete), but lacks explicit guidance on when to use this tool vs alternatives.

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

connector_protect_patchB

Proxy a PATCH request to the Protect Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Protect API sub-path settings: Application settings body: Optional request body confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Discloses that 'confirm' must be True to execute and 'dry_run' provides preview, but lacks details on mutation effects, authentication needs, or error behavior. With no annotations, more transparency would be beneficial.

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?

Description is concise with clear Args and Returns sections. It efficiently conveys the tool's purpose and key parameters without unnecessary text.

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?

Despite having an output schema (not shown), the description leaves out details about how the proxy works, the meaning of 'path', the role of 'settings', and error handling. The missing schema parameter further reduces completeness.

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?

Adds meaning to schema parameters (e.g., console_id as host identifier, path as sub-path) beyond their names. However, it introduces a 'settings' parameter not in the schema, reducing clarity and consistency.

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 clearly states it proxies a PATCH request to the Protect Application, distinguishing it from GET/POST/DELETE/PUT siblings. However, it lists a 'settings' parameter not present in the input schema, causing minor confusion.

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 tool versus alternatives like connector_protect_put or connector_protect_post. The description implies it's for PATCH operations but doesn't specify use cases or exclusions.

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

connector_protect_postA

Proxy a POST request to the Protect Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Protect API sub-path, e.g. v1/cameras/{id}/snapshot settings: Application settings body: Optional request body confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the need for 'confirm' to execute, the 'dry_run' preview feature, and the proxy nature. However, it lacks details on authentication requirements or error handling.

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 well-structured with separate Args and Returns sections, and the purpose is front-loaded. However, it includes an extraneous parameter ('settings') and could be slightly more concise.

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?

Given no annotations and a moderate complexity (5 params), the description covers the basic operation and preview mode but omits error handling, required permissions, and rate limits. The output schema exists and is partially addressed.

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 description adds meaning for most parameters (e.g., path, body, confirm, dry_run) but includes a 'settings' parameter that does not exist in the input schema, creating confusion. With 0% schema description coverage, this inconsistency reduces usability.

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 clearly states the verb ('Proxy a POST request') and the resource ('Protect Application via Cloud Connector'), distinguishing it from sibling tools like connector_protect_get or connector_protect_delete.

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 implies usage for sending POST requests to Protect API sub-paths but does not explicitly state when to use POST vs other methods (GET, PUT, DELETE) or compare with siblings. No alternative tools are mentioned.

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

connector_protect_putA

Proxy a PUT request to the Protect Application via Cloud Connector.

Args: console_id: UniFi console/host identifier path: Protect API sub-path settings: Application settings body: Optional request body confirm: Must be True to execute dry_run: Preview without sending

Returns: Raw response or dry-run preview

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
pathYes
confirmNo
dry_runNo
console_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses dry_run and confirm behavior, and states the return type. However, it does not cover potential side effects, authentication needs, rate limits, or error handling, leaving gaps in transparency.

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 concise, with a clear purpose statement and bulleted parameters. It is front-loaded and avoids redundancy. Every sentence adds value, though the 'settings' line could be removed or corrected.

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 an output schema present (not shown), the description adds return type info. But it omits prerequisites, error scenarios, and integration details. Given the tool's complexity as a proxy request, it is moderately complete but could include more 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 0%, so description must compensate. It adds meaning for parameters like console_id, path, body, confirm, dry_run, but mentions a 'settings' parameter not present in schema, causing confusion. Overall, it provides useful context but has an inconsistency.

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 clearly states 'Proxy a PUT request to the Protect Application via Cloud Connector,' which is a specific verb and resource. It distinguishes from sibling tools like connector_protect_get, connector_protect_post, etc., by indicating the HTTP method and target application.

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?

The description provides explicit guidelines: confirm must be True to execute, dry_run for preview. It does not explicitly compare to alternatives (e.g., when to use PUT vs POST), but the parameter instructions add clarity for correct usage.

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

get_cross_site_statisticsC

Get aggregate statistics across multiple sites.

Args: settings: Application settings

Returns: Cross-site statistics

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

The description mentions a 'settings' parameter, but the input schema has no properties, creating a contradiction. Without annotations, the description fails to disclose any behavioral traits such as idempotency, side effects, or required permissions.

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 description is short but includes unnecessary docstring formatting. The contradiction between description and schema suggests it was not carefully reviewed. It is not a model of conciseness due to the error.

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?

Despite having an output schema (not shown), the description lacks details about what the aggregate statistics contain or how they are computed. The parameter mismatch further reduces completeness.

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

Parameters1/5

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

The description includes a parameter 'settings: Application settings' that does not exist in the input schema. This is misleading and adds conflict rather than clarity. Schema coverage is 100% because no params, but description adds erroneous information.

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 clearly states the tool gets aggregate statistics across multiple sites. It is specific about the verb 'get' and the resource 'cross-site statistics', but it does not differentiate from potentially similar sibling tools like 'list_all_sites_aggregated' or 'search_across_sites'.

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 tool versus alternatives. There are many sibling tools with overlapping functionality, but the description provides no context for selection.

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

get_hostC

Get host details by ID.

Args: settings: Application settings host_id: Host identifier

Returns: Host details

ParametersJSON Schema
NameRequiredDescriptionDefault
host_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations are absent, so the description carries full burden. It discloses nothing beyond the core action: it's a read operation (get). It does not mention side effects, authentication needs, rate limits, or error handling (e.g., if host_id not found). This is insufficient for a tool with no annotation support.

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 description is very short (one line plus arg/return notes). It is front-loaded with the core action. However, it is under-specified and lacks detail, making it less useful than a longer, more informative description would be.

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?

Given the tool's simplicity (one param, likely returns a host object) and the presence of an output schema, the description could still be more complete. It omits any mention of error cases, response formats, or unique behavior. In a context with many sibling tools, more context would aid selection.

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 input schema has one parameter, host_id, with no description (0% coverage). The description adds 'Host identifier,' which is essentially a restatement of the parameter name. It provides no additional semantic value, such as format, constraints, or examples.

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 clearly states the tool's purpose: 'Get host details by ID.' This distinguishes it from sibling tools like list_hosts (which returns all hosts) and get_site_details (different resource). The verb-resource pair is specific and unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives. There is no mention of prerequisites, exclusions, or scenarios where another tool would be more appropriate. The description simply states what it does without context.

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

get_integration_clientC

Get a single connected client via the integration API.

Args: site_id: Site identifier client_id: Client UUID settings: Application settings

Returns: Client details

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes
client_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior1/5

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

No annotations are present, and the description does not disclose any behavioral traits such as read-only nature, authentication requirements, or rate limits. It merely states what the tool does.

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

Conciseness2/5

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

The description is short but contains unnecessary and incorrect information (the 'settings' arg). It could be more concise by removing the misleading line.

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?

While an output schema exists, the description provides only a vague 'Returns: Client details'. The omission of the 'settings' parameter from the schema is not addressed, leaving the agent confused about parameter expectations.

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

Parameters1/5

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

The description only lists parameter names without adding meaning. Moreover, it includes a non-existent 'settings' parameter, which contradicts the schema and misleads the agent.

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 verb 'get' and resource 'single connected client' clearly indicate the tool's purpose. However, the description mentions a 'settings' parameter that is not in the input schema, causing slight confusion.

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 is provided on when to use this tool versus its sibling 'list_integration_clients'. There is no mention of prerequisites or alternatives.

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

get_integration_deviceC

Get a single adopted device via the integration API.

Args: site_id: Site identifier device_id: Device UUID settings: Application settings

Returns: Device details

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes
device_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

Annotations are absent, so the description must fully disclose behavioral traits. It indicates a read operation ('Get') but adds no details about auth requirements, error handling, rate limits, or consequences. Furthermore, it mentions a 'settings' parameter not present in the input schema, creating a misleading inconsistency.

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 description is relatively short and front-loaded with the main purpose. However, the inclusion of an extra parameter and the 'Args'/'Returns' structure adds unnecessary length. A more streamlined description would be preferable.

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 2 required parameters and no schema descriptions, the description should be more complete. It omits error conditions, required permissions, and relationship to sibling tools. The output schema exists but does not cover behavioral context.

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 0%, so description is critical. It explains site_id and device_id minimally ('Site identifier', 'Device UUID') but also includes a nonexistent 'settings' parameter, which harms clarity and accuracy. The descriptions for actual parameters are too terse to aid correct usage.

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 clearly states the tool retrieves a single adopted device via the integration API. The verb 'get' and the resource 'single adopted device' are specific. It distinguishes from listing tools like list_integration_devices but does not explicitly differentiate from similar get tools like get_host.

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 provides no guidance on when to use this tool versus alternatives. It does not specify prerequisites, exclusions, or context in which this tool is preferred over sibling tools.

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

get_integration_dns_policyB

Get a single DNS policy via the integration API.

Args: site_id: Site identifier policy_id: DNS policy UUID settings: Application settings

Returns: DNS policy details

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes
policy_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description must fully disclose behavior. It correctly indicates a read operation ('Get') but does not mention any side effects, permissions, or rate limits. The return details are vague.

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 description is brief but includes an extraneous parameter ('settings') not in the schema, which harms accuracy. It would be improved by removing the misleading line.

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?

Given the presence of an output schema, the description adequately conveys the primary purpose but lacks details on error handling, required permissions, or the scope of 'DNS policy details'.

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 description provides basic meaning for 'site_id' and 'policy_id' but incorrectly includes 'settings: Application settings' which is not in the input schema. This inconsistency reduces clarity.

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 clearly states 'Get a single DNS policy' using a specific verb and resource, distinguishing it from the sibling 'list_integration_dns_policies' tool which retrieves multiple policies.

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 is provided on when to use this tool versus alternatives such as 'list_integration_dns_policies'. There is no mention of prerequisites or contextual usage.

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

get_integration_wifi_broadcastC

Get a single WiFi broadcast via the integration API.

Args: site_id: Site identifier broadcast_id: WiFi broadcast UUID settings: Application settings

Returns: WiFi broadcast details

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes
broadcast_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It does not mention that the tool is read-only, authentication requirements, rate limits, or any side effects. The return is vaguely described as 'WiFi broadcast details.'

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 description is fairly concise but includes an erroneous parameter ('settings'). The structure is clear with arguments listed, but the extra parameter wastes space.

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?

For a simple get tool with two parameters, the description lacks essential details like that site_id and broadcast_id are required, and does not explain the output structure despite having an output schema. No usage hints are provided.

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 description coverage is 0%, so the description should clarify parameters. It repeats obvious names for site_id and broadcast_id but adds a non-existent 'settings' parameter not in the schema, causing confusion and reducing value.

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 'Get a single WiFi broadcast via the integration API,' clearly specifying the verb and resource. It distinguishes from the sibling tool 'list_integration_wifi_broadcasts' which retrieves multiple broadcasts.

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 tool versus alternatives, such as listing broadcasts. The description does not provide context for when a single get is appropriate or when to fall back to list.

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

get_internet_healthC

Get internet health metrics across sites.

Args: settings: Application settings site_id: Optional site identifier. If None, returns aggregate metrics.

Returns: Internet health metrics

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description lacks behavioral disclosures such as side effects, authentication needs, or rate limits. For a read-like tool, it only states what it does without any transparency about limitations or behaviors beyond the basic function.

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 description is relatively short but includes an unnecessary 'Args' section that lists a non-existent 'settings' parameter, making it slightly less structured. It front-loads the purpose but wastes space on incorrect parameter documentation.

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?

Given the tool's simplicity (one parameter, output schema exists), the description covers the basic functionality. However, the misleading 'settings' argument and lack of details about the return structure (despite output schema being present) leave it incomplete for an autonomous agent looking for precise invocation context.

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 description adds meaning to the 'site_id' parameter by explaining that None yields aggregate metrics. However, it incorrectly lists 'settings: Application settings' as an argument, which does not appear in the input schema (only site_id is present). This misalignment reduces the value added and could confuse an agent.

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 clearly states 'Get internet health metrics across sites', specifying the verb (Get) and resource (internet health metrics). It hints at aggregation behavior by mentioning 'site_id' optionality, which slightly distinguishes it from sibling tools like get_site_health_summary or get_isp_metrics, though not 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 description provides usage guidance by indicating that site_id is optional and that omitting it returns aggregate metrics. However, it does not specify when to prefer this tool over similar siblings like compare_site_performance or get_cross_site_statistics, leaving room for ambiguity.

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

get_isp_metricsB

Get ISP metrics for a specific site.

Args: settings: Application settings site_id: Site identifier

Returns: ISP metrics data including bandwidth, latency, jitter, and packet loss

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions return data types (bandwidth, latency, jitter, packet loss) but does not cover side effects, required permissions, or rate limits. Adequate but incomplete.

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 extremely concise (4 lines), front-loaded with the action, and contains only essential information. No wasted 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?

Given low complexity (1 param) and presence of output schema, the description is adequate but could be improved by noting common use cases or mentioning sibling tools. Lacks guidance for comprehensive context.

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 description coverage is 0%; the description only restates the parameter name 'site_id' as 'Site identifier' without adding meaning or format. The return description does not compensate for parameter semantics.

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 clearly states the tool's action ('Get ISP metrics') and its target ('for a specific site'), distinguishing it from siblings like query_isp_metrics which may be more general.

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 explicit guidance on when to use this tool versus alternatives like query_isp_metrics or compare_site_performance. The description lacks context for appropriate usage scenarios.

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

get_sdwan_configC

Get SD-WAN configuration by ID.

Args: settings: Application settings config_id: Configuration identifier

Returns: SD-WAN configuration details

ParametersJSON Schema
NameRequiredDescriptionDefault
config_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as read-only, destructive potential, or authorization needs. Merely states it returns configuration details.

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 description is concise but includes an extra Args section that does not match the schema, reducing clarity. The Returns line is empty. It is front-loaded but not entirely accurate.

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?

For a simple get-by-ID operation, the description is minimal. It does not explain behavior on missing IDs, error handling, or provide details about the output despite an output schema existing. The mismatch between Args and schema further detracts from completeness.

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

Parameters1/5

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

The description lists two parameters ('settings', 'config_id') in the Args block, but the input schema only contains 'config_id' as a required property. This mismatch misleads about available parameters. Schema description coverage is 0%, so the description fails to add meaningful semantic value.

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?

Clearly states 'Get SD-WAN configuration by ID', using a specific verb and resource. Distinguishes from siblings like 'list_sdwan_configs' and 'get_sdwan_config_status'.

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

Usage Guidelines3/5

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

Implies usage for retrieving a specific config by ID, but lacks explicit guidance on when to use this tool versus alternatives, or any prerequisites.

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

get_sdwan_config_statusC

Get SD-WAN configuration deployment status.

Args: settings: Application settings config_id: Configuration identifier

Returns: SD-WAN configuration deployment status

ParametersJSON Schema
NameRequiredDescriptionDefault
config_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It only states it gets status but does not mention side effects, permissions, rate limits, or whether it's a safe read operation. Minimal disclosure.

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

Conciseness1/5

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

The description includes an 'Args:' section with 'settings' which does not exist in the schema, making it inaccurate. A true concise description would not include extraneous or incorrect parameters.

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?

The tool is simple with one required parameter and an output schema, but the description fails to explain the return value, possible statuses, or additional context needed for correct invocation. It is incomplete.

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 description coverage is 0%, so the description must add meaning. It describes 'config_id' as 'Configuration identifier', which is minimally helpful. More critically, it lists a non-existent parameter 'settings: Application settings', contradicting the schema and misleading the agent.

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 clearly states 'Get SD-WAN configuration deployment status', using a specific verb ('Get') and resource ('SD-WAN configuration deployment status'). This distinguishes it from siblings like 'get_sdwan_config' and 'list_sdwan_configs'.

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 is provided on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or when not to use it.

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

get_site_detailsC

Get detailed site information.

Args: site_id: Site identifier settings: Application settings

Returns: Site details dictionary

Raises: ResourceNotFoundError: If site not found

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions that a ResourceNotFoundError is raised for missing sites and returns a dictionary, which is helpful. However, it does not state whether the tool is read-only, any side effects, authorization requirements, or performance characteristics.

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 relatively short and structured with Args, Returns, Raises sections. It is efficient but could be more concise by removing redundant phrasing. Overall, it is well-organized and front-loaded with the core 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?

The description covers the basic return type and error condition. Since an output schema exists, the return values may be detailed there. However, the description lacks information about what 'detailed site information' includes, and the parameter is minimally described. The tool is simple, so this is adequate but not complete.

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 schema has 0% description coverage for the parameter 'site_id'. The description's Args section says 'Site identifier', which adds minimal meaning beyond the schema. No additional context like format, examples, or constraints is provided.

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 'Get detailed site information', which clearly identifies the tool's purpose as retrieving site details. The verb 'get' and resource 'site details' are specific. However, it does not differentiate from sibling tools like get_site_health_summary or get_site_inventory, leaving ambiguity about what 'detailed' includes.

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 tool versus siblings. There is no mention of prerequisites, when to avoid, or alternative tools. The description is purely functional with no usage context.

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

get_site_health_summaryA

Get health summary for all sites or a specific site.

Args: settings: Application settings site_id: Optional site identifier. If None, returns summary for all sites.

Returns: Health summary

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It discloses that setting site_id to None returns summary for all sites, but lacks details on authentication, rate limits, or data freshness.

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?

Description is brief and uses a structured Args/Returns format. It is front-loaded with the main purpose. Could be slightly more concise by removing the erroneous 'settings' line.

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 tool with one optional parameter and an output schema (not shown), the description adequately covers purpose and parameter behavior. However, it lacks guidance on when to choose this tool over many similar sibling tools.

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?

Description explains site_id parameter meaning and default behavior, which adds value over the schema (0% coverage). However, it misleadingly includes 'settings: Application settings' in Args, which is not in the input schema, causing confusion.

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 clearly states 'Get health summary for all sites or a specific site', using a specific verb and resource. It distinguishes from siblings by noting optional site_id for individual site vs. all sites.

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 implies usage context (with or without site_id) but does not explicitly guide when to use this tool over siblings like get_site_details or get_cross_site_statistics.

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

get_site_inventoryA

Get comprehensive inventory for a site or all sites.

Provides detailed breakdown of resources including devices, clients, networks, SSIDs, VPN tunnels, and firewall rules.

Args: settings: Application settings site_id: Optional site identifier. If None, returns inventory for all sites.

Returns: Site inventory or list of site inventories

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It indicates the tool retrieves inventory (read operation) and lists components, but does not disclose potential permissions, data size implications, or whether it is cheap or expensive to call. The 'comprehensive' nature suggests a potentially heavy operation, which is not warned about.

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 well-structured with a clear purpose sentence, a bullet list of included resources (though not in markdown), and standard Args/Returns sections. It could be slightly more concise by removing the redundant 'Args' and 'Returns' labels if not needed, but overall it is efficient.

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 one parameter and an output schema (not shown but indicated), the description provides adequate context: return type (site inventory or list of site inventories) and the scope of data. The tool is simple, and the coverage is sufficient.

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 0%, but the description adds meaningful context: it explains the site_id parameter is optional and that omitting it returns inventory for all sites. This goes beyond the schema's 'anyOf' type and default null.

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?

Description starts with a specific verb ('Get') and resource ('comprehensive inventory for a site or all sites'), and the bullet list of components clearly distinguishes it from sibling tools that retrieve individual elements (e.g., list_sites, get_site_details) or focus on performance (compare_site_performance).

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 the optional site_id parameter and its behavior ('If None, returns inventory for all sites'), but does not explicitly state when to prefer this tool over alternatives like get_site_details or list_sites. The usage context is implied but lacks explicit guidance or exclusions.

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

get_version_controlB

Get API version control information.

Args: settings: Application settings

Returns: Version control information including current, latest, and deprecated versions

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

No annotations are provided, so the description bears full burden. It discloses the return fields (current, latest, deprecated), but does not mention any side effects, rate limits, or authentication needs. It is minimally adequate.

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 description is short and front-loaded with purpose, but includes an unnecessary and incorrect parameter line. Every sentence should earn its place; this one does not.

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?

Given the output schema exists, the description's mention of return fields is helpful. However, the incorrect parameter mention and lack of usage guidance make it incomplete for a fully informative tool description.

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

Parameters1/5

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

The input schema has no parameters, but the description includes an 'Args: settings: Application settings' line, which is misleading and contradicts the schema. This reduces the value added for parameter understanding.

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 clearly states the tool retrieves API version control information, which is a specific verb-resource combination. It distinguishes itself from sibling tools that focus on performance, connectors, integration, etc.

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 is provided on when to use this tool versus alternatives, or any prerequisites. The description merely states what it does without context for selection.

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

health_checkA

Health check endpoint to verify server is running.

Returns: Status information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the tool returns status information but does not explicitly disclose that it is a read-only, non-destructive operation. For an AI agent, explicit safety guarantees are missing.

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 extremely concise with two sentences. Every word serves a purpose, making it easy to parse quickly 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?

The description is adequate for a simple health check with no parameters and an output schema. It covers the purpose and return value, though it could mention typical use cases like monitoring or startup verification.

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 has no parameters, so the description does not need to add parameter semantics. Schema coverage is 100%, meeting the baseline for zero parameters.

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 clearly states the tool is for a health check to verify the server is running, using a specific verb and resource. It is distinct from all sibling tools which are focused on network, connector, and integration operations.

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 implies usage when needing to verify server status, but does not explicitly state when to use or not use it, nor does it mention any alternatives. Given the clear purpose and lack of similar tools, implied usage is acceptable but not explicit.

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

list_all_sites_aggregatedA

List all sites with aggregated stats from Site Manager API.

Args: settings: Application settings

Returns: List of sites with aggregated statistics

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

The description indicates a read operation with no side effects. While no annotations exist, the description is sufficient for a simple list tool. The mention of 'aggregated stats' gives useful context beyond 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?

The purpose is front-loaded and the description is short. However, the 'Args' and 'Returns' lines are unnecessary for a tool with no parameters and an existing output schema, adding minor clutter.

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?

While the output schema exists, the description does not explain what 'aggregated stats' means or any limitations. The misleading parameter documentation also reduces completeness. Adequate but with gaps.

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

Parameters1/5

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

The description includes 'Args: settings: Application settings' but the input schema has no parameters. This is a clear contradiction that misleads the agent, despite 100% schema coverage and zero parameters.

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 clearly states it lists all sites with aggregated stats, using a specific verb ('list') and resource ('all sites'). It distinguishes from sibling tools like list_sites which likely lacks aggregated stats.

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?

No explicit guidance on when to use this tool versus alternatives like list_sites or get_site_details. The description implies it's for an overview with aggregated stats, but does not provide when-not-to-use or direct alternatives.

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

list_dpi_application_categoriesA

List DPI application categories via the integration API.

This endpoint is global (not site-scoped) and returns the canonical list of application categories used by DPI and traffic-routing features.

Args: settings: Application settings limit: Maximum number of categories to return (1-1000) offset: Number of categories to skip

Returns: Paginated list of DPI categories

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided; description carries burden. It mentions pagination and that it returns categories. However, it does not discuss permission requirements, error scenarios, or behavior when parameters are omitted.

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?

Very efficient: three short paragraphs with clear structure. Front-loaded summary, then context, then parameters. No unnecessary words.

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?

Given the presence of an output schema, description adequately covers purpose, scope, parameters, and pagination. Missing details like authentication or rate limits, but simple enough 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?

Adds meanings beyond the schema: limit range (1-1000), offset as skip count. Schema only defines types and nullability, so description adds value.

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 clearly states it lists DPI application categories and specifies it is global. However, it does not explicitly differentiate itself from sibling tools like list_integration_* tools, though the name and context are sufficient.

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?

Provides context that it is global and not site-scoped, implying when it should be used (for global DPI categories). No explicit when-not-to-use or alternative tools mentioned.

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

list_hostsC

List all managed hosts/consoles.

Args: settings: Application settings limit: Optional maximum number of hosts to return offset: Optional number of hosts to skip (for pagination)

Returns: List of managed hosts

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, and the description only repeats pagination details from the schema. It does not disclose any behavioral traits, such as performance implications, authorization requirements, or whether the result is sorted. The mention of a nonexistent 'settings' parameter further harms transparency.

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 description is relatively short but includes an unnecessary and incorrect 'settings' line. The structure is clear with labeled sections but could be more focused.

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?

While the output schema exists, the description lacks context about the scope of 'all managed hosts', any filtering, or how it differs from similar tools. With no annotations, the description does not sufficiently compensate for missing behavioral or contextual information.

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 description explains 'limit' and 'offset' for pagination, adding meaning beyond the raw schema. However, it also lists a 'settings' argument that does not exist in the input schema, which misleads the agent about available parameters.

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 'List all managed hosts/consoles,' clearly indicating a list operation. However, it incorrectly mentions a 'settings' parameter that is absent from the input schema, causing confusion.

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 tool versus alternatives like 'get_host' or 'search_across_sites'. No discussion of prerequisites or limitations.

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

list_integration_clientsC

List connected clients via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of clients to return (1-1000) offset: Number of clients to skip

Returns: Paginated list of integration API clients

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

No annotations exist, so the description must disclose behavior. It mentions pagination and a limit range (1-1000), but does not cover ordering, defaults for missing parameters, or authentication requirements. The description adds some value but is incomplete.

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 description uses a docstring structure with Args and Returns, which is clear. However, it includes an erroneous parameter and could be more front-loaded. The length is appropriate but not maximally efficient.

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 list tool with pagination, the description is fairly complete, noting it returns a paginated list. However, it omits prerequisites like authentication and does not specify the ordering of results. The output schema may cover return values, but overall completeness is average.

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?

With 0% schema coverage, the description should compensate. It adds a range for limit (1-1000) and describes site_id, but incorrectly includes a non-existent parameter 'settings', which contradicts the schema. This error significantly reduces reliability.

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 clearly states 'List connected clients via the integration API,' using a specific verb and resource. It distinguishes from siblings by specifying 'clients' among many list_integration_* tools, though it doesn't explicitly differentiate from get_integration_client.

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 is provided on when to use this tool versus alternatives like get_integration_client or other list_integration_* tools. The description lacks context for appropriate usage.

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

list_integration_devicesC

List adopted devices via the integration API.

Args: site_id: Site identifier (UUID or internal reference) settings: Application settings limit: Maximum number of devices to return (1-1000) offset: Number of devices to skip

Returns: Paginated list of integration API devices

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavior. Mentions 'List' (read-only) and 'Returns paginated list' but does not address auth requirements, rate limits, or side effects. Minimal behavioral context.

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

Conciseness3/5

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

Docstring format with Args and Returns is clear and front-loaded. However, includes an incorrect parameter ('settings'), reducing conciseness. Reasonably structured but flawed.

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?

Output schema exists (paginated list) so description need not detail returns, but it does mention pagination. Missing explanation of 'adopted devices' and does not cover all parameters correctly. The erroneous parameter hurts completeness.

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

Parameters1/5

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

Description lists 'settings' parameter which is not present in the input schema. This contradicts the schema and adds confusion. Schema coverage is 0%, so description should clarify parameters, but it introduces an error.

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?

Clearly states the action (List), resource (adopted devices), and context (via integration API). Distinguishes from siblings like list_integration_clients and list_integration_networks.

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?

Implied usage: to list devices. No explicit guidance on when to use vs alternatives (e.g., get_integration_device for a single device) or when not to use. Lacks exclusion criteria.

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

list_integration_device_tagsB

List device tags via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of tags to return (1-1000) offset: Number of tags to skip

Returns: Paginated list of device tags

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description must disclose behavior. It indicates a read-only operation ('List') and mentions pagination via limit and offset. However, it includes a phantom parameter 'settings' not in the schema, which could confuse an AI agent. It does not describe auth requirements, rate limits, or error handling.

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 concise, with a brief opening sentence followed by a structured list of parameters and return type. It avoids unnecessary words. The only minor issue is the extraneous 'settings' parameter, but overall structure is clear.

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 list tool with an output schema, the explanation of input parameters and pagination provides adequate context. However, it lacks usage guidance, error conditions, or prerequisites. The presence of a phantom parameter reduces completeness.

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%, so the description must compensate. It adds meaning to site_id, limit, and offset, including range for limit. However, it also lists 'settings' which is not present in the schema, causing inconsistency. The parameter descriptions are otherwise helpful but not comprehensive.

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 clearly states the action (list) and resource (device tags) via the integration API. It distinguishes from sibling list_* tools by specifying 'device tags' as the target. Could be improved by noting the scope or return structure, but it is sufficient.

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 is provided on when to use this tool versus alternatives. The sibling list_* tools serve different resources, but the description does not clarify the context or prerequisites for using this specific endpoint.

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

list_integration_dns_policiesB

List DNS policies via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of policies to return (1-1000) offset: Number of policies to skip

Returns: Paginated list of DNS policies

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states it lists policies, without disclosing idempotency, permissions, rate limits, or pagination behavior beyond a generic 'Paginated list'. Minimal transparency.

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 description is concise and includes structured Args/Returns, but the erroneous 'settings' parameter reduces accuracy. Otherwise efficient.

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?

Given an output schema exists, the description suffices for a simple list operation. It implies site-scoped listing via site_id and pagination. Lacks deeper explanation but is adequate.

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 0%, but description adds ranges for limit (1-1000). However, it incorrectly mentions a 'settings' parameter not in the schema, causing confusion. Offset info is basic.

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 clearly states 'List DNS policies via the integration API', using a specific verb and resource. Among siblings, it distinguishes from 'get_integration_dns_policy' by indicating bulk listing.

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 provides no explicit guidance on when to use this tool versus alternatives like 'get_integration_dns_policy'. It does not mention context, prerequisites, or when not to use it.

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

list_integration_networksC

List networks via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of networks to return (1-1000) offset: Number of networks to skip

Returns: Paginated list of integration API networks

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'List' implying read-only, and pagination via limit/offset, but lacks explicit statements about side effects, authentication requirements, or error behaviors.

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 description uses a docstring format with separate sections, which is structured but slightly verbose. It contains a brief one-liner and then bulleted args/returns, which is acceptable but not extremely concise.

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?

Despite having an output schema (not shown), the description only says 'Paginated list of integration API networks' without detailing the return fields. It also omits error conditions, making it incomplete for an agent to fully understand the tool's behavior.

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 description coverage is 0%, so description must compensate. The Args section adds meaning for site_id, limit, and offset, but also lists a 'settings' parameter not present in the schema, causing confusion. The explanations are minimal and one is incorrect.

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 clearly states 'List networks via the integration API', specifying the verb (list), resource (networks), and API scope (integration API). It distinguishes itself from sibling list tools like list_integration_clients or list_integration_devices.

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 is provided on when to use this tool versus alternatives such as connector_network_get (which might retrieve a single network) or other list tools. The description lacks usage context or prerequisites.

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

list_integration_sitesB

List sites via the integration API.

Returns UUID-based site identifiers suitable for use with other integration API tools in this module.

Args: settings: Application settings limit: Maximum number of sites to return (1-1000) offset: Number of sites to skip

Returns: Paginated list of integration API sites

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Despite no annotations, the description discloses pagination and return type. However, it omits details on permissions, rate limits, side effects, or handling of large result sets.

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 description is reasonably concise and structured with bullet-like lists, but the inclusion of a non-existent 'settings' parameter reduces clarity.

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?

Given the presence of an output schema, the description adequately notes paginated results. However, it lacks details on filtering or pagination metadata, which would improve completeness.

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 description adds meaning for 'limit' (max 1-1000) and 'offset' (skip count), but incorrectly includes 'settings' in Args which is not in the input schema, causing confusion.

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 clearly states it lists sites via the integration API and returns UUID-based identifiers, which differentiates it from regular site listing tools. However, it could be more explicit about how it differs from sibling tools like list_sites.

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 implies usage context by mentioning suitability for other integration API tools, but lacks explicit when-to-use or when-not-to-use guidance, and does not exclude alternatives.

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

list_integration_vpn_serversC

List VPN servers via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of servers to return (1-1000) offset: Number of servers to skip

Returns: Paginated list of VPN servers

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only states the purpose and lists parameters, but lacks disclosure of behavioral traits such as pagination specifics, authentication requirements, or potential side effects. The mention of 'paginated list' is minimal.

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

Conciseness3/5

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

The description uses a structured docstring format with Args and Returns sections. It is relatively concise but includes an extraneous parameter (settings) that does not exist in the schema, reducing clarity.

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?

Given the tool's simplicity and presence of an output schema, the description is minimal. It fails to explain pagination behavior, the purpose of the site_id, or any constraints beyond the parameter list. The missing settings parameter further undermines completeness.

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 description adds some value for limit and offset (constraint 1-1000, skip purpose) which schema lacks, but includes a phantom 'settings' parameter not in the schema, creating confusion. Schema coverage is 0%, so description should compensate but instead introduces an error.

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 clearly states it lists VPN servers via the integration API, with a specific verb and resource. However, it does not explicitly distinguish from sibling list tools like list_integration_clients or list_integration_devices, though the resource name is unique.

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 tool versus alternatives. No exclusions, prerequisites, or context about when to prefer this over other list or VPN-related tools.

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

list_integration_wansC

List WAN connections via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of WANs to return (1-1000) offset: Number of WANs to skip

Returns: Paginated list of WAN connections

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided. The description only says 'Returns: Paginated list of WAN connections' but does not disclose authentication needs, rate limits, error behavior, or consequences of invalid parameters.

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 description is structured as a docstring with Args/Returns sections, but includes an extraneous 'settings' parameter. It is moderately concise but could be tighter.

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?

Given the output schema exists, the description covers basic parameters and return type. However, it lacks pagination behavior details, error handling, and usage context. It is adequate but not complete.

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

Parameters3/5

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

The description provides constraints for 'limit' (1-1000) and explains 'site_id' and 'offset', which adds value over the schema (which has 0% description coverage). However, it mentions an extra 'settings' parameter not present in the input schema, causing inconsistency.

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 clearly states 'List WAN connections' which is a specific verb and resource. It also mentions pagination via limit/offset, but does not differentiate from siblings like list_integration_networks or list_integration_devices.

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 explicit guidance on when to use this tool versus alternatives. No prerequisites, context, or exclusions mentioned. The description only explains parameters.

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

list_integration_wifi_broadcastsC

List WiFi broadcasts (SSIDs) via the integration API.

Args: site_id: Site identifier settings: Application settings limit: Maximum number of broadcasts to return (1-1000) offset: Number of broadcasts to skip

Returns: Paginated list of WiFi broadcasts

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
site_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description must fully convey behavioral traits. It states a 'paginated list' is returned, which is helpful, but fails to disclose whether the operation is read-only, any authentication needs, or potential rate limits. The phantom 'settings' parameter undermines reliability.

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 description is structured with an Args section and Returns, but it includes redundant phrasing ('via the integration API') and an extra line for the phantom 'settings' parameter. Could be more concise without sacrificing accuracy.

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?

Given that an output schema exists, the description does not need to detail return values extensively, but it does mention 'paginated list'. Missing is a comparison with the singular get endpoint or any prerequisite context. Overall adequate but not fully complete.

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 description coverage is 0%, so the description must explain all parameters. It does describe the three schema parameters (site_id, limit, offset) adequately, but erroneously includes a 'settings' parameter not present in the schema, confusing the agent.

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 clearly states the action (List) and resource (WiFi broadcasts/SSIDs). It implicitly distinguishes from the sibling tool 'get_integration_wifi_broadcast' by using 'list' vs 'get'. However, the inclusion of a non-existent parameter 'settings' slightly diminishes clarity.

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 provides no explicit guidance on when to use this tool versus alternatives like 'get_integration_wifi_broadcast'. It only implies the usage through the name and parameter descriptions, but no when-to-use or when-not-to-use context is given.

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

list_sdwan_configsC

List all SD-WAN configurations.

Args: settings: Application settings

Returns: List of SD-WAN configurations

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.1/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It only states 'List all SD-WAN configurations' without disclosing pagination, permissions, rate limits, or any side effects. The read-only nature is implied but not explicit.

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

Conciseness2/5

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

The description is very short, but it includes an inaccurate 'Args' section that takes space without value. It is not efficiently structured; front-loading would be better.

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?

Given that the tool has an output schema and no parameters, the description could be minimal. However, it fails to explain the scope of 'all' configurations, any sorting or filtering, or how the output relates to other tools. The mention of a non-existent parameter further reduces completeness.

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

Parameters1/5

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

The input schema has zero properties, but the description introduces a non-existent parameter 'settings: Application settings'. This directly contradicts the schema and misleads about required inputs, earning a low score.

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 'List all SD-WAN configurations,' which clearly indicates a list operation on SD-WAN configs. However, it includes an 'Args' section mentioning 'settings' that does not exist in the input schema, causing confusion. Siblings like get_sdwan_config imply singular retrieval, but the description does not explicitly differentiate.

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 tool versus alternatives like get_sdwan_config or get_sdwan_config_status. There is no mention of prerequisites, filters, or context for selection.

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

list_sitesC

List all accessible sites.

Args: settings: Application settings limit: Maximum number of sites to return offset: Number of sites to skip

Returns: List of site dictionaries

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states that it returns a list of site dictionaries, but does not mention side effects, access control, rate limits, or pagination behavior. The agent is left uninformed about operational details.

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 concise, using a clear docstring format with Args and Returns sections. It avoids unnecessary verbosity, though the Args section is minimal and could be more structured.

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?

Given that an output schema exists, the description does not need to detail return values, but it still does. However, it lacks information on authentication, pagination defaults, and what qualifies as 'accessible'. It is adequate but not comprehensive.

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 schema has 0% description coverage, so the description must compensate. It merely restates parameter names (limit, offset) without explaining their semantics, defaults, or effects. For example, it does not clarify that limit controls the maximum number of results or how offset works.

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 clearly states 'List all accessible sites.' which specifies the verb and resource. However, it does not differentiate it from sibling tools like list_all_sites_aggregated, which might offer similar functionality with aggregation.

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 is provided on when to use this tool versus alternatives. The description lacks context about prerequisites, scenarios, or comparisons with sibling tools.

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

list_vantage_pointsC

List all Vantage Points.

Args: settings: Application settings

Returns: List of Vantage Points

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are available, so the description holds the full burden. It only says 'List all Vantage Points' without disclosing any behavioral traits such as ordering, pagination, or side effects. There is no mention of read-only nature or data freshness.

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

Conciseness2/5

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

The description is very short but contains inaccurate information (fictitious 'settings' parameter). It is not concise in a helpful way, as every sentence should be correct.

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?

Given no annotations, an empty input schema, and an output schema available, the description is insufficient. It fails to explain what a Vantage Point is, how to use the tool, or any prerequisites.

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

Parameters1/5

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

The input schema has zero parameters, giving a baseline of 4. However, the description incorrectly lists an 'settings: Application settings' argument, contradicting the schema. This misleading information worsens the score.

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 clearly states 'List all Vantage Points' with a specific verb and resource, making the tool's purpose unambiguous. Despite many sibling list tools, the resource is distinct.

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 is provided on when to use this tool versus alternatives like other list tools (e.g., list_hosts, list_sites). The description does not mention context or exclusions.

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

query_isp_metricsC

Query ISP metrics with optional filters.

Args: settings: Application settings site_id: Optional site identifier (None for all sites) start_time: Optional start time in ISO format (e.g., "2026-02-01T00:00:00Z") end_time: Optional end time in ISO format

Returns: List of ISP metrics matching the query

ParametersJSON Schema
NameRequiredDescriptionDefault
site_idNo
end_timeNo
start_timeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only states it returns a list of metrics, but does not disclose safety profile, authentication needs, rate limits, or mutation behavior. This is minimal.

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

Conciseness4/5

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

The description is concise with a summary line and structured Args/Returns format. However, the inclusion of an extra parameter ('settings') not in the schema is a clarity issue.

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 annotations and 0% schema coverage, the description is insufficient. It lacks information on pagination, filtering behavior, error handling, and completeness of the return values. Output schema exists but description still needs more behavioral context.

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 0%, so description must compensate. It describes three schema parameters (site_id, start_time, end_time) with format hints, but also includes 'settings' which is not in the schema, causing inconsistency. It adds some meaning, but inaccuracy reduces score.

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 clearly states the tool queries ISP metrics with optional filters. The verb 'query' is specific. However, it does not distinguish from sibling tool 'get_isp_metrics', which likely performs a similar function.

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 implies usage by mentioning optional filters but provides no explicit guidance on when to use this tool versus alternatives like 'get_isp_metrics' or when not to use it.

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

search_across_sitesA

Search for resources across all sites.

Search for devices, clients, or networks across all managed sites. Useful for locating resources in multi-site deployments.

Args: settings: Application settings query: Search query (device name, MAC address, client name, network name) search_type: Type of search - "device", "client", "network", or "all"

Returns: Search results with site context

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
search_typeNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that search is across all sites and returns site context, but lacks details on performance, pagination, or any non-obvious behaviors (e.g., rate limits). Transparency is adequate but not comprehensive.

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 extremely concise with a clear structure: brief intro, search scope, use case, and explicitly labeled Args/Returns sections. Every sentence is purposeful and no unnecessary words.

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?

Given the tool's moderate complexity (2 params, output schema exists), the description covers the search scope, query types, and site context in returns. It does not elaborate on output schema but that is acceptable since an output schema is present. Minor gap: no mention of result count or limitations.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate. It fully explains both parameters: 'query' (supported formats) and 'search_type' (valid values with default). This adds crucial semantic meaning beyond the schema's type-only definitions.

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 clearly states the tool's purpose: searching for resources (devices, clients, networks) across all managed sites. It specifies the resource types and highlights usefulness in multi-site deployments, distinguishing it from single-site or inventory tools among siblings.

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?

The description provides context ('useful for locating resources in multi-site deployments') but does not explicitly state when not to use this tool or mention alternatives. Clear guidance is given on the scope, but exclusions are absent.

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. 43 tool updatesv0.2.0
    • First observedcompare_site_performance
    • First observedconnector_network_delete
    • First observedconnector_network_get
    • First observedconnector_network_patch
    • First observedconnector_network_post
    • First observedconnector_network_put
    • First observedconnector_protect_delete
    • First observedconnector_protect_get
    • First observedconnector_protect_patch
    • First observedconnector_protect_post
    • First observedconnector_protect_put
    • First observedget_cross_site_statistics
    • First observedget_host
    • First observedget_integration_client
    • First observedget_integration_device
    • First observedget_integration_dns_policy
    • First observedget_integration_wifi_broadcast
    • First observedget_internet_health
    • First observedget_isp_metrics
    • First observedget_sdwan_config
    • First observedget_sdwan_config_status
    • First observedget_site_details
    • First observedget_site_health_summary
    • First observedget_site_inventory
    • First observedget_version_control
    • First observedhealth_check
    • First observedlist_all_sites_aggregated
    • First observedlist_dpi_application_categories
    • First observedlist_hosts
    • First observedlist_integration_clients
    • First observedlist_integration_device_tags
    • First observedlist_integration_devices
    • First observedlist_integration_dns_policies
    • First observedlist_integration_networks
    • First observedlist_integration_sites
    • First observedlist_integration_vpn_servers
    • First observedlist_integration_wans
    • First observedlist_integration_wifi_broadcasts
    • First observedlist_sdwan_configs
    • First observedlist_sites
    • First observedlist_vantage_points
    • First observedquery_isp_metrics
    • First observedsearch_across_sites

TDQS

C2.9/5.0

Scored across 43 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with groups like connector_network_* and connector_protect_* differentiated by HTTP method and target. Integration API list/get tools are distinguished by resource type. However, some overlap exists between site-level tools (e.g., compare_site_performance vs get_cross_site_statistics) and between get_isp_metrics vs query_isp_metrics, though descriptions help disambiguate.

Naming Consistency3/5

Naming follows patterns within subgroups (connector_* method, integration list/get), but across the server there is inconsistency: mix of verb_noun (list_sites, get_host), compound names (list_all_sites_aggregated), and non-verb forms (health_check). No single convention is applied globally.

Tool Count3/5

43 tools is on the high side for a single server, covering many sub-domains (Network, Protect, Integration, SD-WAN, ISP). Some redundancy exists (multiple site-listing tools) and raw connector proxies add to count. The number feels slightly bloated but still manageable for a comprehensive UniFi interface.

Completeness3/5

The server covers a wide range of UniFi functionality: site management, device/client listing, monitoring, SD-WAN, and raw API access via connectors. However, high-level CRUD operations for core entities (sites, devices, clients) are missing; these are only available through raw connector proxies. Gaps exist for user management and configuration write operations via dedicated tools.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    D
    quality
    D
    maintenance
    Enables comprehensive management of UniFi network infrastructure through the UniFi Cloud API, including device control, client management, camera settings, and access door control through natural language.
    39
    18 npm
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to manage UniFi network infrastructure through 50+ tools covering devices, clients, networks, WiFi, firewall rules, and guest access using the official UniFi Network API.
    52
    50 npm
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage and monitor UniFi network infrastructure through natural language, providing 46 management tools across device, client, WiFi, network, firewall, port forwarding, monitoring, and site management.
    1
    MIT