Local MCP server for semantic Apple TV control via pyatv.
Three tools with clear action verbs and reasonable descriptions (avg 156 chars). All have input schemas with type definitions and parameter descriptions. However, output schemas are not documented in the visible code, and descriptions lack depth on error conditions, prerequisites, and recovery guidance. Parameter constraints are minimal (only minLength on two tools). No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Naming is verb-noun compliant; no composition issues detected.
List launchable applications installed on the Apple TV.
Launch an installed application by exact bundle ID or exact display name. Matching is deterministic. Typos do not auto-launch a similar application.
Ask the Apple TV to open a URL or application deep link. A successful result means the launch request was accepted. It does not prove that a specific screen or item is visible. Deep links are not retried after uncertain delivery because they may start playback or other side effects.
Output schemas not documented. LLMs cannot plan downstream operations or extract required fields without knowing what list_apps, open_app, and open_url return.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). apple_tv_open_app and apple_tv_open_url are marked WRITE risk but lack destructiveHint annotation to signal irreversibility to agents.
Descriptions lack error recovery guidance. 'Launch an installed application' does not explain what happens if the app is not found, if launch fails, or how to recover. No actionable error messages documented.
Parameter 'query' in apple_tv_list_apps lacks constraints (no enum, no pattern, no length limits). Description says 'case-insensitive substring filter' but does not specify max length or behavior on empty string.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
apple_tv_open_url description mentions 'deep links are not retried' but does not explain why or what the LLM should do if delivery is uncertain. Incomplete error classification.