MCP server exposing UniFi application API documentation (Network, Protect, Site Manager, InnerSpace, Mobility, Carrier Fabric) as queryable tools
This server demonstrates strong structural quality with well-defined tool names, comprehensive descriptions, and explicit JSON schemas. All 7 tools follow verb_noun naming conventions (list_, search_, get_, find_). Descriptions are detailed (195-280 chars on average) and explain WHAT the tool does, WHEN to use it, and provide context about return structure. Input schemas are fully specified with type declarations and parameter descriptions. However, output schemas are NOT explicitly documented, the description mentions what is returned but the response structure is not formally defined. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present, and error handling guidance is minimal. These are the primary gaps preventing a higher score. The server correctly accepts filter parameters as optional (app) with smart defaults, and parameter descriptions are specific enough to guide LLM usage (e.g., 'endpoint slug', 'field path', 'resource path').
Find all occurrences of a field name across all endpoints. Searches for a field by name (case-insensitive) in request parameters, request bodies, and response schemas. Returns each hit with the endpoint slug, the full dotted path to the field (e.g. 'address.country'), and whether it appears in the request or response.
Get metadata about the loaded documentation: app names, versions, scrape dates, and page counts. Useful for understanding what docs are available and how fresh they are.
Get the complete schema for a single endpoint, including full request and response schemas with field descriptions, types, and enums. Takes a slug (from list_endpoints or search_endpoints output). Returns the HTTP method, path, detailed description, all request parameters (path, query, body) with their types and validation rules, and response schema(s) with field details and examples. Response codes and their meanings are included. Use get_field_schema if you need enum values or field details not shown inline.
Get all CRUD endpoints for a resource at once. Takes a resource path (e.g. '/v1/sites/{siteId}/networks' or '/v1/protect/cameras') and returns all endpoints that operate on that resource (list, create, get, update, delete). Equivalent to calling get_endpoint for each, but grouped by operation type and annotated to show the resource relationship.
Output schemas not explicitly documented. Descriptions mention what is returned (e.g., 'Returns hits ranked by match quality') but formal response structures are not provided in tool definitions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. All tools are read-only but this is not formally declared via annotations, forcing LLMs to infer safety from descriptions.
Error handling guidance is minimal. Tool descriptions do not explain what to do if a slug is invalid, a resource_path does not exist, or a field is not found.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 76 | 2026-07-28+ | v2 |
Get the complete schema for a single field, including its type, description, enum values, and nested children. Takes a field path like 'id' (a top-level field) or 'address.country' (nested). Returns the field's type, description, validation rules, and all allowed values for enums. Includes nested children if the field is an object or contains variants.
Browse the endpoint catalogue: one line per endpoint with method, path, slug and title. Returns at most 200 lines; beyond that the reply says how many were withheld and which filters would narrow it. For finding a specific endpoint, search_endpoints ranks by relevance instead. Unknown filter values are rejected by name rather than returned as an empty result.
Search endpoints by keyword, ranked by relevance. Searches the endpoint titles, descriptions, method+path, and parameter names across all loaded apps. Returns hits ranked by match quality (title/description matches score higher than path/parameter matches). Each hit shows the HTTP method, path, slug, title, and which app(s) it belongs to. Unknown app filters are rejected.
Result limits documented in code comments (MAX_LIST_LINES=200, MAX_FIELD_HITS=50) but not surfaced in tool descriptions. LLMs need to know these caps to plan pagination.
Parameter 'app' in list_endpoints and search_endpoints lacks enum constraint. Valid values (network, protect, site-manager, innerspace, mobility, carrier-fabric) are documented in description but not formalized as enum in schema.