Skip to main content
Glama
KallistoX

mcp-unifi-applications

UniFi MCP Server — Queryable API Documentation

CI PyPI Python Glama

A Model Context Protocol (MCP) server that makes the official UniFi API documentation queryable by AI agents — endpoint search, schema drill-down, and code examples in five languages, for Claude Desktop, Claude Code (VS Code / JetBrains), or any MCP-compatible client.

Covers every application Ubiquiti publishes API docs for: Network, Protect, Site Manager, InnerSpace, Mobility and Carrier Fabric.

It is read-only and credential-free: it serves documentation, it does not talk to your controller. Includes a Playwright-based scraper that turns the JS-rendered docs SPA into structured JSON, and a Python MCP server that serves it.

Example

"Without any context, just by using the unifi-applications MCP Server: can you tell me how to create a network with Go with the network API from UniFi, and what options do I have regarding the managed IPv4 DHCP gateway configuration?"

Claude works that out through the server, with none of the documentation in its context to begin with:

Call

What comes back

search_endpoints("create network")

POST /v1/sites/{siteId}/networks

get_endpoint("network/createnetwork")

the request body — management is a discriminated union

get_field_schema(…, "management[GATEWAY].ipv4Configuration.dhcpConfiguration")

only the DHCP subtree

get_example("network/createnetwork", "go")

a working request in Go

The third call is the one that earns the server its place. It returns this, and nothing else — not the 70 KB endpoint schema it is buried in:

# management[GATEWAY].ipv4Configuration.dhcpConfiguration (in requestBody)
- dhcpConfiguration: object (Gateway Managed IPv4 DHCP Configuration) — IPv4 DHCP
  configuration for this network. If omitted or null, DHCP is not working and hosts
  must get an address statically or from another server in this broadcast domain.
  - mode: string (required)
    [RELAY]:
      - dhcpServerIpAddresses: Array of string — DHCP Server IP addresses
    [SERVER]:
      - ipAddressRange: object
        - start: string (required)
        - stop: string (required)
      - leaseTimeSeconds: integer — The lease time in seconds for addresses in this range.
      - dnsServerIpAddressesOverride: Array of string — List of DNS servers assigned to
        client devices by the DHCP server. If none are specified, they will be selected
        automatically.
      - gatewayIpAddressOverride: string — Gateway IP address provided to DHCP clients.
      - domainName: string — Domain name that can be used to access network in the browser.
      - option43Value: string — Custom DHCP option (43) — the value MUST be the UniFi
        Network application's host IP address.
      - pxeConfiguration: object — Pre execution environment configuration for network boot
      … ntpServerIpAddresses, tftpServerAddress, timeOffsetSeconds, wpadUrl,
        winsServerIpAddresses, pingConflictDetectionEnabled

Both discriminator variants, every field typed and described. That is the answer to "what are my options" — and the model writes the Go from it without ever having seen the UniFi docs.

Related MCP server: UniFi Network MCP Server

Quick Start

1. Install

pip install mcp-unifi-applications

The scraped docs ship inside the package — there is nothing to scrape and no API key to configure. What you get:

Application

API version

Scraped

Pages

Network

v10.4.57

2026-07-27

82

Protect

v7.3.47

2026-09-09

81

Site Manager

v1.0.0

2026-07-17

12

InnerSpace

v1.3.23

2026-09-09

12

Mobility

v1.0.0

2026-09-09

9

Carrier Fabric

v1.0.0

2026-09-09

14

git clone https://github.com/KallistoX/mcp-unifi-applications.git
cd mcp-unifi-applications
python -m venv .venv
source .venv/bin/activate  # or: source .venv/bin/activate.fish
pip install .

2. Register with your client

Claude Code (VS Code / JetBrains) — add .mcp.json to your project root (Reload Window after):

{
  "mcpServers": {
    "unifi-docs": {
      "type": "stdio",
      "command": "mcp-unifi-applications"
    }
  }
}

Claude Desktop — add to ~/.config/Claude/claude_desktop_config.json (Linux) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "unifi-docs": {
      "command": "mcp-unifi-applications"
    }
  }
}

If the command is not on your client's PATH — Claude Desktop often does not inherit a shell PATH — give the absolute path instead, e.g. /path/to/.venv/bin/mcp-unifi-applications.

How this differs from other UniFi MCP servers

Most UniFi MCP servers are control planes: they authenticate against your controller and expose tools that read and change live state — devices, clients, firewall rules. This one is a knowledge plane. It never sees your network.

Control-plane servers

This server

Needs controller credentials

Yes

No

Touches live network state

Yes

No

Answers "what does this endpoint accept?"

Rarely

That is the whole job

Useful before you have hardware

No

Yes

They are complements, not competitors. Pair this one with a control-plane server when you are building against the UniFi API: this one tells the model what the API looks like, the other one calls it.

Why not just feed the model the OpenAPI spec?

Ubiquiti does publish one — developer.ui.com/<app>/v<version>/openapi.json. It is a good spec, and it is missing exactly the parts an agent needs most. For Network v10.4.57 (44 paths, 73 operations, 379 schemas):

  • 0 code examples. No x-codeSamples anywhere. This server carries ten per endpoint — curl, Go, Node.js, Python and Ansible, each in a local and a remote variant.

  • 0 response examples. This server ships the rendered response sample for every endpoint.

  • No guide pages. Filtering syntax, error handling, getting started — those live only in the rendered docs.

And a 409 KB spec does not fit usefully into a context window. get_field_schema returns one field subtree (management[GATEWAY].dhcpV4) instead of a 70 KB endpoint schema, so the model pulls in what it needs and nothing else.

Supported Applications

Application

URL

Local/Remote

Notes

Network

developer.ui.com/network

Both

Default app

Protect

developer.ui.com/protect

Both

Site Manager

developer.ui.com/site-manager

Remote only

No local/remote switch

InnerSpace

developer.ui.com/innerspace

Both

Early Access; version label reads v1.3.23 (EA)

Mobility

developer.ui.com/mobility

Remote only

Sidebar links out to mobility.ui.com

Carrier Fabric

developer.ui.com/carrier-fabric

Remote only

Subscriber API

All applications share the same docs SPA structure with version dropdowns, endpoint pages, and guide pages, so adding one is a single entry in the APPS object in scrape.mjs — the server discovers new app directories on its own.

Available Tools

Tool

Description

list_endpoints

List all API endpoints, optionally filtered by HTTP method or app

search_endpoints

Fuzzy search by name, path, method, or description (filterable by app)

get_endpoint

Full schema for an endpoint (summary or raw JSON)

get_endpoint_group

All CRUD operations for a resource (e.g. "networks")

get_example

Code examples in curl, Go, Node.js, Python, or Ansible (local/remote)

get_response_sample

Example JSON response for an endpoint

find_field

Search for a field name across all endpoint schemas

get_field_schema

Drill into a specific field's subtree (e.g. management[GATEWAY].dhcpV4)

get_guide

API guide pages (filtering syntax, error handling, getting started)

get_docs_info

Which docs are loaded: API version, scrape date, endpoint/guide counts per app

Tools that return multiple results accept an optional app parameter (network, protect, site-manager, innerspace, mobility, carrier-fabric) to filter by application.

Environment Variables

Variable

Default

Description

DOCS_DIR

the docs/ directory inside the installed package

Directory containing scraped JSON docs. Expects one subdirectory per application (network/, protect/, …). Set it to point at a checkout's freshly scraped output.

Re-scraping the docs

Only needed to pull a newer API version before the weekly workflow does, or to add an application.

# Build the scraper image
docker build -t unifi-scraper .

# Scrape Network API docs (default, latest version)
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs

# Scrape Protect API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app protect

# Scrape Site Manager API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app site-manager

# Scrape InnerSpace API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app innerspace

# Scrape Mobility or Carrier Fabric API docs
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app mobility
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app carrier-fabric

# Scrape a specific API version
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --app network --version v9.5.21

# List available API versions for an app
docker run --rm unifi-scraper node scrape.mjs --app protect --list-versions

# Scrape specific pages only
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs createnetwork filtering

# Force re-scrape (overwrite existing files)
docker run --rm -v "$(pwd)/src/mcp_unifi_applications/docs:/output" unifi-scraper node scrape.mjs --force

Scraper CLI

node scrape.mjs [options] [slug...]

Options:
  --app <name>      Application: network (default), protect, site-manager, innerspace, mobility, carrier-fabric.
  --version <ver>   API version to scrape (e.g. v10.1.84). Default: latest.
  --list-versions   Print available versions and exit.
  --force           Re-scrape even if output file exists.

Arguments:
  [slug...]         Scrape only these pages. Omit to scrape all pages.

The slug is the last path segment of the docs URL: https://developer.ui.com/network/v10.1.84/createnetwork -> createnetwork

Output is written to <output>/<app>/ — mount the package's docs directory (src/mcp_unifi_applications/docs/) so a scrape lands where the server reads it.

The full scan is resumable - already-scraped pages are skipped. Use --force to re-scrape.

Project Structure

mcp-unifi-applications/
├── scrape.mjs          # Playwright scraper (runs in Docker)
├── lib/
│   └── parse.mjs       # Scraper parsing logic, kept out of the browser so it is testable
├── Dockerfile          # Scraper container image
├── pyproject.toml      # Python project config
├── server.json         # MCP registry manifest
├── glama.json          # Glama maintainer declaration
├── src/
│   └── mcp_unifi_applications/
│       ├── server.py   # MCP server (Python, stdio transport)
│       └── docs/       # Scraped JSON, shipped with the package
│           ├── network/
│           ├── protect/
│           ├── site-manager/
│           ├── innerspace/
│           ├── mobility/
│           └── carrier-fabric/
├── scripts/
│   └── update_readme_versions.py   # Regenerates the README version table (run on main by CI)
└── tests/
    ├── test_mcp_server.py    # pytest
    └── scrape-parse.test.mjs # node --test

Output Format

What the scraper writes, and what the server reads.

Endpoint pages

{
  "h1": "Create Network",
  "method": "POST",
  "path": "/v1/sites/{siteId}/networks",
  "description": "Create a new network on a site.",
  "pathParameters": [ "...fields" ],
  "requestBody": [ "...fields" ],
  "responses": [{ "statuses": ["201"], "fields": [ "...fields" ] }],
  "examples": {
    "local": { "curl": "...", "go": "...", "nodejs": "...", "python": "...", "ansible": "..." },
    "remote": { "curl": "...", "go": "...", "nodejs": "...", "python": "...", "ansible": "..." }
  },
  "responseSample": "{ ... }",
  "sourceUrl": "https://developer.ui.com/network/v10.1.84/createnetwork"
}

Guide pages

{
  "h1": "Filtering",
  "type": "guide",
  "content": "Markdown content...",
  "sourceUrl": "https://developer.ui.com/network/v10.1.84/filtering"
}

Field objects (recursive)

{
  "name": "management",
  "required": true,
  "type": "string",
  "description": null,
  "discriminator": [
    { "value": "UNMANAGED", "selected": true, "schema": [ "...sibling fields" ] },
    { "value": "GATEWAY", "selected": false, "schema": [ "...sibling fields" ] }
  ],
  "children": [ "...child fields for object types" ]
}
  • discriminator.schema contains sibling fields visible when that option is active (not the discriminator field itself)

  • Nesting is recursive - discriminators within variants are fully expanded

  • children captures statically expanded object fields

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by Ubiquiti Inc. The API documentation content scraped and served by this tool is the property of Ubiquiti Inc. and is sourced from their public developer portal. "UniFi" is a trademark of Ubiquiti Inc.

License

MIT

Available Tools

10 tools
find_fieldFind FieldA

Find where a field appears across endpoint schemas.

Searches through request bodies, path parameters, and responses including inside discriminator variants. Uses a pre-built index for speed.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoOptional — limit search to a specific endpoint.
field_nameYesThe field name to search for (case-insensitive).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

The description discloses that the search covers request bodies, path parameters, and responses, including discriminator variants, and mentions it uses a pre-built index for speed. With no annotations provided, the description carries the burden, and it does add useful behavioral context, though it doesn't mention case-insensitivity (which is in the schema) or any limitations of the pre-built index.

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 concise and front-loaded: the first sentence states the core purpose, and the second adds scope and performance context. Every sentence earns its place with no wasted 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?

The tool has an output schema, so return values are already documented. The description covers the search scope and performance characteristics. It could mention what the output looks like or how to interpret results, but the output schema likely covers that. Overall, it's complete enough for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters. The description adds context about what the search covers (request bodies, path parameters, responses, discriminator variants) but doesn't add meaning beyond the schema for the parameters themselves. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: finding where a field appears across endpoint schemas. It specifies the resource (endpoint schemas) and the action (search), and distinguishes it from sibling tools like get_field_schema by focusing on cross-schema search rather than retrieving a single field's schema.

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

Usage Guidelines4/5

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

The description implies when to use this tool: when you need to locate a field across request bodies, path parameters, and responses, including discriminator variants. It doesn't explicitly name alternatives or exclusions, but the scope is clear enough for an agent to select it over siblings like get_field_schema or search_endpoints.

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

get_docs_infoGet Docs InfoA

Show which UniFi API docs are loaded: API version, scrape date, endpoint and guide counts per app.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. 'Show' communicates a read-only, non-mutating operation, and listing what information is returned gives the agent a good sense of expected behavior. However, it does not explicitly state that it performs no side effects, requires no authentication, or has no significant cost; for such a simple metadata tool this is a minor gap rather than a serious one.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that immediately states the tool's purpose and then lists the specific data elements. Every word adds value, with no filler or repetition.

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

Completeness5/5

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

For a zero-parameter, read-only metadata tool with an output schema available, the description is complete. It tells the agent what the tool reports, and the presence of an output schema covers return-value details. No missing information would prevent correct invocation or interpretation.

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 zero parameters, so the baseline is 4. The description correctly adds no parameter details because none exist, and the input schema confirms an empty object. Nothing more is needed.

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

Purpose5/5

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

The description uses a specific verb ('Show') and a clear resource ('which UniFi API docs are loaded'), then enumerates the exact content: API version, scrape date, endpoint and guide counts per app. This clearly differentiates it from sibling tools like list_endpoints or get_guide, which operate on individual docs rather than reporting loaded-doc metadata.

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 clearly implies the use case: when an agent needs an overview of which documentation is loaded and its versioning/coverage stats, rather than querying individual endpoints or guides. It does not explicitly name alternatives or exclusions, but the zero-parameter metadata nature of the tool makes the appropriate context sufficiently clear.

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

get_endpointGet EndpointB

Get the full schema for a UniFi API endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesEndpoint identifier (e.g. 'createnetwork', 'listnetworks'). Use list_endpoints or search_endpoints to find slugs.
summaryNoIf True, return a compact field summary. If False, return raw JSON.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations are completely absent, so the description carries the full burden. The description only says 'Get the full schema,' which is minimal. It does not disclose any behavioral traits such as output format nuances, potential error conditions, rate limiting, or what 'full schema' means. The schema exists but the description adds no behavioral context beyond the tool's basic action.

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

Conciseness4/5

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

The description is a single sentence that is concise and front-loaded with the action. No extra fluff. However, given the tool's complexity and absent annotations, a bit more behavioral context could be added without much bloat, so it's not a 5.

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

Completeness3/5

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

The tool has an output schema, which likely conveys the return structure, so that part is covered. The parameters are well-documented in the schema. However, with no annotations and a minimal description, the agent lacks information on when to use this tool vs othersabbildung, the exact nature of the schema returned, and potential edge cases. For a tool that retrieves schemas, it is minimally adequate but not thorough.

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 input schema already provides detailed descriptions for both parameters: 'slug' explains format and how to find it, 'summary' explains true/false behavior. Since schema coverage is 100%, the description adds little extra. The description itself mentions no parameter details, so it does not compensate beyond the schema, which is adequate.

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 verb and resource: 'Get the full schema for a UniFi API endpoint.' It distinguishes the tool from siblings by focusing on schema retrieval, though it doesn't explicitly name which sibling to use instead. The purpose 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 Guidelines3/5

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

The description implies usage: to get schemas for endpoints. It doesn't explicitly state when to use alternatives like list_endpoints or search_endpoints, but the parameter descriptions for 'slug' mention using those to find slugs, which gives some guidance. However, no explicit exclusions or alternative selection criteria beyond that.

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

get_endpoint_groupGet Endpoint GroupA

Get all CRUD operations for a resource (e.g. 'networks', 'firewall', 'wifi').

Returns a summary of every endpoint that operates on the same resource path, so you can see all available operations at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceYesResource name or path fragment (e.g. 'networks', 'acl-rules', 'wifi/broadcasts').

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavioral aspects. It states that it returns a 'summary of every endpoint' and the purpose is to see all operations, which is a read operation. However, it does not mention any potential side effects or prerequisites (e.g., authentication) or limitations (e.g., pagination). There is no contradiction, but the description could add more behavioral 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 a brief two-sentence paragraph that front-loads the primary purpose in the first sentence and provides a clear explanation of the output in the second. It is concise with no unnecessary filler, earning a high score for efficiency.

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 tool is simple with one parameter well-documented, an output schema present, and no nested objects. The description sufficiently explains the tool's purpose and output. However, it does not mention any limitations like pagination or rate limits, which could be relevant for a tool that returns a summary of many endpoints. This is a minor gap given the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter is well-documented in the schema with examples. The description adds examples of resource names ('networks', 'firewall', 'wifi') and clarifies that it is a 'path fragment', which is slightly more than the schema. However, the added value is minimal given the schema already provides 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 function: 'Get all CRUD operations for a resource' with specific verb 'Get' and resource examples. It differentiates from siblings by focusing on grouping operations by resource path, while siblings like 'get_endpoint' retrieve individual endpoints. However, it could be more explicit about the distinction from 'list_endpoints'.

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 clear context for when to use this tool: when you need all operations for a specific resource. It gives examples of resource names and explains the benefit of seeing all available operations at once. It does not explicitly state when NOT to use it or mention alternatives, but the sibling names and purpose are clear enough.

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

get_exampleGet ExampleB

Get a code example for a specific UniFi API endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'local' (direct console access) or 'remote' (via cloud API). Defaults to 'local'; remote-only apps (site-manager, mobility, carrier-fabric) default to 'remote'.
slugYesEndpoint identifier (e.g. 'network/createnetwork').
languageNoProgramming language — one of: curl, go, nodejs, python, ansible.curl

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 carries the behavioral burden. 'Get' strongly implies a safe, read-only operation, and the output schema documents the return shape, so behavior is not opaque. However, the description does not explicitly confirm side-effect-free behavior or any other runtime characteristics in the absence of annotations.

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?

Single sentence, no filler, front-loaded with the action and resource. Every token in the available description is meaningful. There is no unnecessary framing or repeated information.

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

Completeness4/5

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

For a simple read-only example lookup with a fully documented input schema and an output schema present, the description plus structured fields give an agent enough to call the tool correctly. It could only be improved by adding sibling selection guidance, but that gap is already penalized under usage guidelines.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema itself documents all three parameters well, including defaults, formats, and allowed language values. The description adds nothing beyond that, which matches the baseline expectation for full schema coverage.

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

Purpose4/5

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

Description states a specific verb and resource: 'Get a code example for a specific UniFi API endpoint.' It is clearly a retrieval tool, and 'code example' distinguishes it from response-sample or endpoint metadata tools. It does not explicitly name siblings, but the noun 'code example' narrows the purpose well.

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

Usage Guidelines2/5

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

The description gives no when-to-use or when-not-to-use guidance. With siblings such as get_endpoint, get_response_sample, and find_field, an agent is given no explicit help selecting this tool over alternatives. This is a real gap.

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

get_field_schemaGet Field SchemaA

Drill into a specific field's schema within an endpoint.

Instead of fetching the full 70KB endpoint schema, use this to get just the subtree you need. Paths from find_field output work directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesEndpoint identifier (e.g. 'network/createnetwork').
field_pathYesDotted path to the field, with discriminator variants in brackets. Examples: 'dhcpV4', 'management[GATEWAY].dhcpV4', 'management[GATEWAY].dhcpV4.gateway'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 the full burden. It does communicate that the tool returns only the requested schema subtree rather than a full endpoint schema, which is valuable. However, it does not explicitly disclose whether the operation is side-effect-free, what happens for invalid paths, or any auth/permission expectations, leaving some important behavioral gaps.

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

Conciseness5/5

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

The description is compact and front-loaded: the core purpose is in the first sentence, the main alternative in the second, and the value intervention with find_field in the third. There is no filler or redundant restatement of the input schema.

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

Completeness5/5

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

A simple read-only tool with two well-documented parameters, 100% schema coverage, and an output schema exists, so return-value details do not need repeating. The description covers why to use this tool, what to expect to receive (the subtree), and how to obtain valid field paths, making it functionally complete.

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?

Parameter description coverage is 100% and already includes good examples. The description adds extra meaning by explaining that slug points at an endpoint's schema and that field_path can be taken directly from find_field output, helping agents construct valid values.

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 action ('drill into'), resource ('specific field's schema'), and context ('within an endpoint'). Explicitly contrasts with fetching the full endpoint schema and references find_field, giving agents enough to distinguish it from get_endpoint and other siblings.

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

Usage Guidelines5/5

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

Gives an explicit when-to-use, saying to use this tool instead of fetching the full 70KB endpoint schema when only a subtree is needed. It also signals compatibility by stating that find_field paths work directly, which tells agents how this tool fits into a larger workflow.

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

get_guideGet GuideA

Get a UniFi API guide page (e.g. filtering syntax, error handling, getting started).

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoOptional app filter (network, protect, site-manager, innerspace, mobility, carrier-fabric). Omit to search all.
topicNoGuide slug or search term. Omit to list all available guides.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full burden of behavioral disclosure. It only says 'Get a ... guide page,' which implies a read-only operation, but it does not address auth requirements, error behavior, rate limits, or what happens with invalid topics or slugs.

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

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. The parenthetical examples are compact and informative, and the description is appropriately sized for a simple lookup tool.

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

Completeness4/5

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

For a low-complexity tool with zero required parameters, 100% schema coverage, and an output schema, the description is mostly sufficient. It lacks explicit usage guidance versus sibling tools, but the resource type and examples cover the essential calling intent.

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?

Both parameters are already well-documented in the schema (app filter values, topic slug/search term, omit behavior), so the baseline is 3. The description adds useful examples of guide topics, which clarifies what kind of values 'topic' may take and pushes it slightly beyond the schema.

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

Purpose5/5

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

States the exact resource ('UniFi API guide page') with a specific verb ('Get') and concrete examples (filtering syntax, error handling, getting started). This clearly distinguishes it from sibling tools that target endpoints, examples, or field schemas.

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 when-to-use or alternative tool guidance is given. The topic examples imply it is for conceptual/API documentation rather than endpoint-specific details, but there is no exclusion or comparison to get_docs_info or list_endpoints, so the agent must infer when to choose this tool.

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

get_response_sampleGet Response SampleA

Get the example JSON response for a specific UniFi API endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesEndpoint identifier (e.g. 'listnetworks').

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 are provided, so the description carries the burden. It discloses that the tool returns an example JSON response, which is a read-only behavior. However, it doesn't mention whether the response is static/sample data or a live call, nor any error behavior (e.g., unknown slug). The description is accurate but minimal.

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

Conciseness5/5

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

One sentence, front-loaded with the core action and object. No wasted words. The example in the schema helps clarify the parameter format.

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

Completeness3/5

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

The tool is simple (1 param, output schema present), so the description is mostly sufficient. However, with no annotations and no mention of how to discover valid slugs (e.g., via list_endpoints), an agent might not know where to get the slug value. The output schema exists, so return format is covered, but the input source is not.

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

Parameters3/5

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

Schema description coverage is 100%: the 'slug' parameter is described as 'Endpoint identifier (e.g. 'listnetworks')'. The description adds the context that the slug identifies a specific endpoint, but doesn't add much beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool's purpose: retrieving an example JSON response for a specific UniFi API endpoint. It uses a specific verb ('Get') and resource ('example JSON response'), and the mention of 'specific UniFi API endpoint' distinguishes it from generic listing/searching tools. However, it doesn't explicitly differentiate from the sibling 'get_example', which may be a close alternative.

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: call this when you need an example response for a known endpoint identifier. It doesn't explicitly state when not to use it or name alternatives like 'get_example' or 'get_endpoint'. The context is clear enough for a simple tool, but lacks explicit routing guidance.

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

list_endpointsList EndpointsA

List all available UniFi API endpoints with their HTTP method and path.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoOptional app filter (network, protect, site-manager, innerspace, mobility, carrier-fabric). Omit to list all.
methodNoOptional HTTP method filter (GET, POST, PUT, DELETE, PATCH).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It states the tool lists all endpoints with method and path, implying a read-only operation, but does not disclose any additional traits such as pagination, ordering, or whether filters are case-sensitive. The simplicity of the operation makes this acceptable, but more could be said.

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

Conciseness5/5

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

The description is a single sentence that immediately conveys the primary purpose and output. There is no redundant text or structural issues; it is highly concise and front-loaded.

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 tool is simple with two optional parameters and an output schema that documents the return format. The description covers the essential information (what it lists and the output fields). Nothing critical is missing for an agent to call it correctly, though a note on read-only nature or explicit 'returns a list' could add slight 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 100%, both 'app' and 'method' parameters are fully described in the schema. The description adds no additional meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'available UniFi API endpoints' with the specific output 'HTTP method and path'. This distinguishes it from siblings like search_endpoints (which implies searching) and get_endpoint (which implies a single endpoint retrieval).

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 it does not explicitly state when to use this tool versus alternatives, nor does it provide any exclusions or conditions. The context signals show siblings that might overlap, but the description lacks direct guidance on selection.

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

search_endpointsSearch EndpointsA

Search UniFi API endpoints by name, path, method, or description.

Returns the top matching endpoints ranked by relevance. Use the slug from results with get_endpoint for full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNoOptional app filter (network, protect, site-manager, innerspace, mobility, carrier-fabric). Omit to search all.
queryYesSearch term (endpoint name, path fragment, or keyword).
methodNoOptional HTTP method filter (GET, POST, PUT, DELETE, PATCH).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It does state that results are 'top matching' and 'ranked by relevance', which informs the agent that not all matches are returned. However, it does not mention whether the operation is read-only (implied by search but not explicit), error handling, pagination, or the number of results returned. This partial disclosure earns a mid-range score.

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

Conciseness5/5

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

The description is two sentences with no redundant phrases. The primary purpose is stated immediately, followed by a concise note on behavior and a directive for next steps. Every sentence earns its place; no fluff or unnecessary detail.

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 (3 parameters, all documented in schema) and the existence of an output schema, the description covers the essentials: what it searches, what it returns (top matches), and how to proceed. It doesn't mention edge cases like empty results or result count limits, but these are minor for a search tool. The presence of an output schema reduces the need to explain return structures. Overall, it is sufficiently complete for an agent to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, meaning every parameter (app, query, method) already has a description in the schema. The description adds little beyond what the schema provides; it merely implies that query can match name, path, or description, which is already implied by the parameter description. No additional semantic value is added, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (Search), a clear resource (UniFi API endpoints), and the search dimensions (name, path, method, description). It clearly distinguishes itself from sibling tools like list_endpoints (which likely lists all) and get_endpoint (which fetches one by slug) by framing this as a relevance-ranked search.

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 a clear workflow: search first, then use the returned slug with get_endpoint for full details. This implies when to use this tool (when you need to find an endpoint) and what to do next, but it doesn't explicitly contrast with list_endpoints or state conditions when search would be inappropriate. Some guidance is present but not exhaustive.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updates
    • First observedfind_field
    • First observedget_docs_info
    • First observedget_endpoint
    • First observedget_endpoint_group
    • First observedget_example
    • First observedget_field_schema
    • First observedget_guide
    • First observedget_response_sample
    • First observedlist_endpoints
    • First observedsearch_endpoints

TDQS

A4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clear, non-overlapping job: listing endpoints, searching them, retrieving schemas/examples/responses, exploring fields by name/detail, grouping CRUD operations, and accessing guides/docs info. Even get_example and get_response_sample are cleanly separated by output type.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (list_, search_, get_, find_) with all lower_snake_case. The naming makes it easy to predict what each tool does.

Tool Count5/5

10 tools is appropriate for an API documentation explorer: discovery, detail lookup, field-level inspection, resource grouping, and metadata are all represented without unnecessary redundancy.

Completeness5/5

The surface covers the full documentation workflow: discover endpoints, inspect schemas, see examples and response samples, locate fields, explore resource groups, and read guides/docs info. No obvious dead ends remain.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive management of UniFi Network infrastructure through 24 tools for monitoring and controlling devices, clients, wireless networks, security, and guest access. Supports network administration tasks like device restarts, client blocking, WLAN configuration, and backup creation.
    10
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Exposes the UniFi Network Integration API as tools for managing sites, devices, clients, networks, WiFi, firewalls, ACLs, switching, DNS policies, hotspot vouchers, VPNs, and more.
    41
    260
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A safety-first MCP server for managing UniFi networks, exposing 17 tools for telemetry, diagnostics, and guarded mutations with dry-run previews and confirm requirements.
    14
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/KallistoX/mcp-unifi-applications'

If you have feedback or need assistance with the MCP directory API, please join our Discord server