TTS + preset tones for UniFi Protect Smart Chimes with optional MCP composition
UniFi Announcer has 7 tools with basic descriptions and input schemas, but significant gaps in parameter documentation and output schema clarity. Tool names follow verb_noun convention (auth_check, announce_command, buzzer_command), which is good. However, parameter descriptions are minimal or missing entirely. For example, 'announce_command' has parameters like 'volume' and 'repeat_times' with only type info (integer) but no range constraints (0-100 is mentioned in description but not in schema). Output schemas are not documented anywhere in the provided code. Error handling is absent, no guidance on what happens when a target is invalid or TTS synthesis fails. The server uses FastAPI with HTTP transport (good), but tool definitions appear to be inferred from route handlers rather than explicitly registered with MCP tool schemas.
Dispatch an announcement to configured targets with TTS synthesis
Harmless API-key validation for client configuration flows
Trigger a buzzer sound on configured targets
Play the device default ringtone on configured targets
Return coarse readiness without leaking detailed device/cache state
Play a named preset ringtone on configured targets
Return compatibility metadata plus the semantic release version
Output schemas not documented. Tools return responses but LLMs cannot plan downstream calls without knowing field names and types. E.g., announce_command likely returns a status or job ID, but this is not specified.
Parameter constraints missing from schemas. 'volume' and 'repeat_times' are integers with no min/max in JSON Schema; range is only mentioned in description text. LLMs cannot parse text constraints reliably.
No error handling guidance. If a target is invalid, TTS synthesis fails, or device is unreachable, tools provide no recovery hints. LLMs cannot self-correct or retry intelligently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Parameter descriptions are minimal. 'target' is described as 'Target chime or group name' but does not explain how to discover valid targets, whether names are case-sensitive, or what happens if the target does not exist.
Tool definitions appear inferred from FastAPI routes rather than explicitly registered with MCP schemas. No explicit tool registration visible in provided code; tool names and schemas are not declared in an MCP-compliant ToolDefinition structure.