UniFi MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDIS_DB | No | Redis database number | |
| REDIS_HOST | No | Redis host for caching | |
| REDIS_PORT | No | Redis port | |
| AGNOST_ORG_ID | No | Agnost organization ID | |
| UNIFI_API_KEY | No | Your UniFi API key from unifi.ui.com | |
| UNIFI_PROFILE | No | Tool scope profile: network, devices, security, system, or minimal | |
| AGNOST_ENABLED | No | Enable agnost.ai performance tracking (true/false) | |
| REDIS_PASSWORD | No | Redis password if required | |
| UNIFI_API_TYPE | No | API mode: local, cloud-v1, or cloud-ea | |
| WEBHOOK_SECRET | No | Secret for webhook HMAC verification | |
| AGNOST_ENDPOINT | No | Agnost API endpoint | |
| MCP_SERVER_HOST | No | Bind address | 0.0.0.0 |
| MCP_SERVER_PORT | No | Server port | 3000 |
| UNIFI_LOCAL_HOST | No | Local gateway IP address (required for local mode) | |
| UNIFI_LOCAL_PORT | No | Local gateway port | 443 |
| UNIFI_DEFAULT_SITE | No | Default site ID | default |
| UNIFI_CLOUD_API_URL | No | Cloud API URL | https://api.ui.com |
| AGNOST_DISABLE_INPUT | No | Disable input tracking | |
| MCP_SERVER_TRANSPORT | No | Transport mode: stdio, sse, http, streamable_http | stdio |
| AGNOST_DISABLE_OUTPUT | No | Disable output tracking | |
| UNIFI_LOCAL_VERIFY_SSL | No | SSL verification for local gateway | false |
| UNIFI_SITE_MANAGER_ENABLED | No | Enable Site Manager multi-site tools for cloud-ea | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| 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 |
| 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 |
| get_cross_site_statisticsC | Get aggregate statistics across multiple sites. Args: settings: Application settings Returns: Cross-site statistics |
| get_hostC | Get host details by ID. Args: settings: Application settings host_id: Host identifier Returns: Host details |
| 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 |
| get_isp_metricsC | 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 |
| get_sdwan_configC | Get SD-WAN configuration by ID. Args: settings: Application settings config_id: Configuration identifier Returns: SD-WAN configuration details |
| get_sdwan_config_statusC | Get SD-WAN configuration deployment status. Args: settings: Application settings config_id: Configuration identifier Returns: SD-WAN configuration deployment status |
| get_site_health_summaryC | 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 |
| get_site_inventoryC | 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 |
| get_version_controlC | Get API version control information. Args: settings: Application settings Returns: Version control information including current, latest, and deprecated versions |
| list_all_sites_aggregatedC | List all sites with aggregated stats from Site Manager API. Args: settings: Application settings Returns: List of sites with aggregated statistics |
| 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 |
| list_sdwan_configsC | List all SD-WAN configurations. Args: settings: Application settings Returns: List of SD-WAN configurations |
| list_vantage_pointsC | List all Vantage Points. Args: settings: Application settings Returns: List of Vantage Points |
| 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 |
| search_across_sitesB | 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 |
| 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 |
| connector_network_getA | Proxy a GET request to the Network Application via Cloud Connector. Forwards the request to
Args:
console_id: UniFi console/host identifier (from list_hosts)
path: Network API sub-path, e.g. 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 |
| 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 |
| 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. 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 |
| connector_network_putC | 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 |
| 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 |
| connector_protect_getA | Proxy a GET request to the Protect Application via Cloud Connector. Forwards the request to
Args:
console_id: UniFi console/host identifier (from list_hosts)
path: Protect API sub-path, e.g. 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 |
| 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 |
| connector_protect_postB | 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. Returns: Raw response or dry-run preview |
| 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 |
| 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 |
| 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 |
| get_integration_dns_policyC | 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 |
| get_integration_wifi_broadcastB | 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 |
| list_dpi_application_categoriesB | 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 |
| 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 |
| list_integration_device_tagsC | 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| list_integration_vpn_serversB | 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 |
| 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 |
| list_integration_wifi_broadcastsB | 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 |
| assign_carrier_subscriber_planB | Assign a service plan to a UniFi Carrier Fabric subscriber. Args: subscriber_id: Subscriber identifier settings: Application settings plan_id: Service plan identifier (required) confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| attach_carrier_subscriber_hostB | Attach a gateway host to a UniFi Carrier Fabric subscriber. Args: subscriber_id: Subscriber identifier settings: Application settings host_id: Gateway host identifier (required) confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| create_carrier_subscriberA | Create a UniFi Carrier Fabric subscriber. Args: settings: Application settings subscriber_number: Operator-supplied external reference (1-32 characters, required) name: Display name email: Contact email notes: Operator notes service_address: Free-text service address plan_id: Service plan to assign host_id: Gateway host to attach metadata: Free-form metadata dictionary confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The created subscriber as a dictionary |
| detach_carrier_subscriber_hostB | Detach the gateway host from a UniFi Carrier Fabric subscriber. Args: subscriber_id: Subscriber identifier settings: Application settings confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| get_carrier_service_planC | Get a UniFi Carrier Fabric service plan by ID. Args: plan_id: Service plan identifier settings: Application settings Returns: The service plan as a dictionary |
| get_carrier_subscriberC | Get a UniFi Carrier Fabric subscriber by ID. Args: subscriber_id: Subscriber identifier settings: Application settings Returns: The subscriber as a dictionary |
| list_carrier_service_plansC | List UniFi Carrier Fabric service plans. Args: settings: Application settings Returns:
Dictionary with |
| list_carrier_subscribersB | List UniFi Carrier Fabric subscribers. Args: settings: Application settings limit: Maximum number of items to return offset: Number of items to skip plan_id: Filter by assigned service plan ID suspended: Filter by suspended state Returns:
Dictionary with pagination info and |
| resume_carrier_subscriberA | Resume a suspended UniFi Carrier Fabric subscriber. Args: subscriber_id: Subscriber identifier settings: Application settings confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| suspend_carrier_subscriberB | Suspend a UniFi Carrier Fabric subscriber. Args: subscriber_id: Subscriber identifier settings: Application settings reason: Optional suspension reason confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| update_carrier_subscriberA | Update a UniFi Carrier Fabric subscriber. Only provided fields are sent to the API. Spec semantics: an absent field leaves it unchanged, while an explicit null clears the field. This tool only sends provided fields, so use plan_id="" style clearing via direct API if ever needed. Args: subscriber_id: Subscriber identifier settings: Application settings name: Display name email: Contact email notes: Operator notes service_address: Free-text service address plan_id: Service plan to assign host_id: Gateway host to attach metadata: Free-form metadata dictionary confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it Returns: The updated subscriber as a dictionary |
| download_innerspace_assetB | Download an asset (e.g. floor plan image) from InnerSpace. Args:
console_id: Cloud Connector console UUID (from Raises: ValueError: If the cloud API is not enabled or any identifier is empty. |
| get_innerspace_projectC | Get the InnerSpace project data for the integration on a console. Args:
console_id: Cloud Connector console UUID (from Raises:
ValueError: If the cloud API is not enabled or |
| list_innerspace_access_pointsC | List access points known to InnerSpace on a console. Args:
console_id: Cloud Connector console UUID (from Raises:
ValueError: If the cloud API is not enabled or |
| list_innerspace_floor_plansB | List InnerSpace floor plans on a console. Args:
console_id: Cloud Connector console UUID (from Raises:
ValueError: If the cloud API is not enabled or |
| list_innerspace_inventoryB | List unplaced devices in InnerSpace inventory on a console. Args:
console_id: Cloud Connector console UUID (from Raises:
ValueError: If the cloud API is not enabled or |
| list_innerspace_switchesB | List switches placed on InnerSpace floor plans on a console. Args:
console_id: Cloud Connector console UUID (from Raises:
ValueError: If the cloud API is not enabled or |
| get_mobility_deviceC | Get detail for a UniFi Mobility device. |
| list_mobility_device_clientsC | List clients attached to a UniFi Mobility device. |
| list_mobility_devicesC | List devices in a UniFi Mobility workspace. |
| list_mobility_workspace_adminsC | List admins of a UniFi Mobility workspace. |
| list_mobility_workspacesB | List UniFi Mobility workspaces. |
| update_mobility_deviceB | Rename a UniFi Mobility device. Args: workspace_id: Workspace UUID device_id: Device UUID settings: Application settings name: New device name (1-32 characters, required) confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it |
| update_mobility_device_networkB | Update LAN / DHCP settings on a UniFi Mobility device. Args:
workspace_id: Workspace UUID
device_id: Device UUID
settings: Application settings
host_address: LAN address of the device (CIDR)
dhcp_mode: |
| update_mobility_device_wirelessB | Update WiFi settings on a UniFi Mobility device. Args: workspace_id: Workspace UUID device_id: Device UUID settings: Application settings ssid: WiFi network name (required) password: WPA2-PSK password (required) confirm: Must be true to apply the change (required unless dry_run) dry_run: Preview the change without applying it |
| list_controllersA | List the UniFi controllers this server can reach. Every controller-bound tool accepts a Returns: Controllers (name, API type, host, default site, labels), the default controller, and this session's selection |
| select_controllerA | Choose the controller this session's later tool calls target. A tool call's own Args: name: A controller name from list_controllers Returns: The selected controller |
| get_active_controllerA | Show which controller a tool call without Returns:
The controller name and where it came from: |
| health_checkA | Health check endpoint to verify server is running. Returns: Status information |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| get_sites_resource | Get all UniFi sites. Returns: JSON string of sites list |
| get_site_manager_sites_resource | Get all sites from Site Manager API. Returns: JSON string of sites list |
| get_site_manager_health_resource | Get cross-site health metrics. Returns: JSON string of health metrics |
| get_site_manager_internet_health_resource | Get internet connectivity status. Returns: JSON string of internet health |
TDQS
Scored across 71 tools
Most tools target distinct resources and actions, and descriptions clearly indicate the underlying API (e.g., integration vs. Site Manager vs. connector proxy). There is some overlap among site listing, health, and ISP metrics tools, but names and descriptions generally allow correct selection.
Almost all tools use snake_case with clear verb_noun or domain_method patterns. The connector proxy tools use a consistent connector_<app>_<method> pattern, which is a minor deviation from the verb_noun convention but remains readable and predictable.
With 71 tools, the server far exceeds the typical 3-15 range and crosses the 50+ threshold for extreme mismatch, creating significant cognitive load for an agent. While the server covers a broad multi-API platform, the sheer number of tools makes selection and maintenance difficult.
The server covers a wide range of read and write operations across multiple UniFi APIs, and generic connector proxy tools provide an escape hatch for arbitrary REST calls. Some specific resources lack full CRUD (e.g., integration networks, VPN servers, and many delete operations), but these gaps are largely addressable through proxy tools.