MCP server and CLI for Ulanzi TC001 Smart Pixel Clock (AWTRIX3)
Server has 20 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, descriptions are often generic and lack actionable context. Parameter schemas are present but minimal, most lack constraints (enums, ranges, patterns). Output schemas are undocumented. Error handling is absent; no recovery guidance or validation messages. Security: credentials appear to be injected server-side (good), but no audit logging or permission gates visible. Composition is reasonable, tools are single-purpose, but many lack idempotency guarantees and chaining metadata.
Clear all indicators.
Delete a custom app from the clock.
Dismiss a held notification.
Get list of all apps in the display rotation loop. Returns the names of all apps that cycle through on the display.
Get list of all available visual effects. Returns available background effects that can be used with custom apps.
Get current clock settings. Returns current display settings like brightness, colors, time format, etc.
Output schemas undocumented. Tools return dict[str, Any] with no specification of fields, types, or structure. LLMs cannot plan downstream calls or extract required data.
Parameter constraints missing. 'brightness' accepts 0 - 255 but only validated in set_brightness; others lack range checks. 'color' accepts hex or RGB but no format constraint. 'duration', 'repeat', 'indicator_id' lack bounds. Enums not used for categorical params like 'effect'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Get device statistics from the clock. Returns battery level, RAM usage, uptime, and other device info.
Switch to the next app in the display loop.
Play a RTTTL string.
Play a RTTTL melody from the MELODIES folder.
Switch to the previous app in the display loop.
Reboot the clock.
Set the matrix brightness.
Set a colored indicator (1-3).
Set mood lighting.
Turn the matrix display on or off.
Send the clock to deep sleep mode. The clock will wake up after the specified seconds or when the middle button is pressed.
Create or update a custom app on the clock.
Display a notification on the clock.
Switch to a specific app.
Error handling absent. No recovery guidance, validation messages, or error classification. Irreversible operations (reboot_clock, delete_custom_app) lack confirmation or dry-run support. LLMs cannot self-correct on failure.
Descriptions lack actionable context. 'Reboot the clock' (18 chars) does not explain consequences, duration, or when to use it. 'Dismiss a held notification' (26 chars) does not clarify what 'held' means or what happens to stacked notifications. Descriptions should be 50 - 200 chars with WHAT, WHEN, and WHY.
Idempotency not guaranteed. Tools like set_power, set_brightness, show_notification lack idempotent semantics. Agents retrying on ambiguous failures risk duplicate side effects (e.g., multiple notifications stacked).