UniFi Fabric MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_TLS_MODE | No | none, https, or mtls. | none |
| MCP_AUTH_MODE | No | none, bearer, or oauth. Unset resolves to bearer when MCP_BEARER_TOKEN is set, else none. | unset |
| UNIFI_API_KEY | No | Single API key shorthand. Required if UNIFI_API_KEYS is not set. | |
| UNIFI_API_KEYS | No | JSON list of key configs for multi-console MSP setups. | [] |
| MCP_TLS_KEYFILE | No | Server private key path. Required for https/mtls. | |
| UNIFI_LOG_LEVEL | No | Logging verbosity. Accepts DEBUG, INFO, WARNING, ERROR, CRITICAL. | INFO |
| MCP_BEARER_TOKEN | No | Shared secret for bearer mode. | |
| MCP_OAUTH_ISSUER | No | OAuth issuer URL. Required for oauth. | |
| MCP_TLS_CA_CERTS | No | Client CA bundle for verifying client certs. Required for mtls. | |
| MCP_TLS_CERTFILE | No | Server certificate path. Required for https/mtls. | |
| FASTMCP_TRANSPORT | No | Sets the communication protocol between the MCP server and clients. | streamable-http |
| MCP_TLS_CERT_REQS | No | Client-cert verification level for mtls: none, optional, or required. | |
| MCP_OAUTH_AUDIENCE | No | Expected token audience. Required for oauth. | |
| MCP_OAUTH_BASE_URL | No | Public base URL of this resource server. Required for oauth. | |
| MCP_OAUTH_JWKS_URI | No | JWKS URI for signature verification. Required for oauth. | |
| UNIFI_API_BASE_URL | No | UniFi Site Manager API base URL. | https://api.ui.com |
| MCP_OAUTH_ALGORITHM | No | JWT signing algorithm to accept. | RS256 |
| MCP_TLS_KEY_PASSWORD | No | Password for an encrypted private key. Optional. | |
| UNIFI_CACHE_MAX_HOSTS | No | Max entries in the hosts TTLCache. | 512 |
| UNIFI_CACHE_MAX_SITES | No | Max entries in the per-console sites TTLCache. | 2048 |
| UNIFI_MAX_CONCURRENCY | No | Max concurrent outbound requests to api.ui.com. | 10 |
| UNIFI_CACHE_TTL_SECONDS | No | TTL for host/site registry cache (seconds). | 900 |
| UNIFI_PAGINATE_MAX_PAGES | No | Hard cap on pages drained per call. Default is unlimited. | None |
| MCP_OAUTH_REQUIRED_SCOPES | No | Comma-separated scopes a token must carry. | |
| UNIFI_ENABLE_MOBILITY_WRITE | No | Enable guarded Mobility write tools. Fail-closed: default OFF. | false |
| UNIFI_ENABLE_CONNECTOR_WRITE | No | Enable the mutating generic connector relay. Fail-closed: default OFF. | false |
| UNIFI_REQUEST_TIMEOUT_SECONDS | No | HTTP request timeout in seconds. | 30 |
| MCP_OAUTH_AUTHORIZATION_SERVERS | No | Comma-separated authorization-server URLs. Defaults to [MCP_OAUTH_ISSUER]. | |
| UNIFI_PROTECT_MUTATIONS_ENABLED | No | Deployment-level kill switch for all Protect mutation and physical-action tools. Default ON. | true |
| UNIFI_ENABLE_CARRIER_FABRIC_WRITE | No | Enable guarded Carrier / ISP Fabric write tools. Fail-closed: default OFF. | 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": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_toolsA | Find enabled tools by intent, ranked over names, descriptions and parameter schemas. Default returns ten matches. Choose any positive limit, or null for every match; no tool or search result is hard-capped. Empty query browses tools. Use describe_tool for the exact schema, then call_read_tool or call_write_tool. Args: query: Natural language intent, for example "camera recordings"; empty browses all tools. family: Optional exact family slug from list_tool_families, for example "protect". writes: Optional filter: true for mutations, false for reads, null for both. limit: Number of results (default 10); any positive integer or null for every match. Enabled families (tool counts): carrier: 11; clients: 14; connector: 5; devices: 34; firewall: 32; hotspot: 4; innerspace: 32; mobility: 8; network: 347; protect: 227; site_manager: 19; statistics: 14; vpn: 39. |
| describe_toolA | Return the complete enabled tool schema, identical to its full-mode tools/list entry. Args: name: Exact enabled tool name from search_tools, for example "get_acl_rule_ordering". |
| call_read_toolA | Execute a read tool with its original validation, guards, audit and result format. Refuses write calls, including state-changing routes of the mixed GET relay. Describe the target first; its schema and permissions apply. Read-only mode and secret scrubbing are preserved. Args: name: Exact enabled read tool name, for example "get_acl_rule_ordering". arguments: Target schema arguments, for example {"host": "console", "site": "default"}. |
| call_write_toolA | Execute a tool that may mutate live configuration through registered dispatch. Describe the target first. Target validation, per-area opt-outs, UNIFI_READ_ONLY, OAuth permissions, dry-run, audit and secret scrubbing match a direct call. Args: name: Exact enabled tool name, for example "set_firewall_policy_ordering". arguments: Target schema arguments from describe_tool; for example {"host": "console", "site": "default"} plus the target's required fields. |
| list_tool_familiesA | List enabled families and counts; use their slugs as search_tools family filters. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 5 tools
The five meta-tools follow a clear discover→describe→call workflow: search_tools finds tools, describe_tool returns schemas, call_read_tool/call_write_tool execute, and list_tool_families exposes family slugs. There is minor overlap because search_tools already advertises enabled families and counts, making list_tool_families somewhat redundant; read/write separation is clear but an agent must classify a target as read or write before calling.
All names are snake_case verb_noun constructions (search_tools, describe_tool, list_tool_families, call_read_tool, call_write_tool). The call_*_tool variants are slightly compound but follow the same verb-first convention consistently.
Five tools is a compact, well-scoped surface for a gateway that fronts hundreds of underlying UniFi tools. Each meta-tool earns its place by covering discovery, schema inspection, read execution, write execution, and family listing.
The meta-tool set covers the full lifecycle needed for the catalog: browse/search, list families, inspect schemas, and execute both read and write tools. No obvious operation is missing for a fabric/gateway server; edge cases like mixed GET relays are explicitly handled by the read/write split.