MCP server for casting YouTube/media to Chromecast/DLNA via catt
Server exposes 9 casting tools with basic schemas and French descriptions. All tools have input schemas with type definitions, but descriptions are minimal (10-60 chars, well below the 194-char baseline). Parameter descriptions are sparse or absent. No output schemas documented. Error handling is generic (returns bool + string). Tools lack idempotency hints, permission gates, and recovery guidance. Naming is verb-noun compliant (cast_*) but descriptions do not explain WHEN to use each tool or what state changes occur.
Met en pause le cast.
Reprend le cast.
Scanne et liste les devices Chromecast/DLNA disponibles sur le reseau.
Avance ou recule dans la video (en secondes, negatif pour reculer).
Affiche l'etat du cast en cours (titre, position, duree, volume, etc.).
Arrete le cast en cours.
Caste une URL (video, audio, etc.) sur la TV.
Descriptions are 10 - 60 characters, far below the 194-char baseline. LLMs cannot determine when to select cast_youtube vs cast_url, or understand state-change implications. Example: 'Caste une video YouTube sur la TV.' lacks WHEN to use it, prerequisites, or what happens on retry.
Parameter descriptions are missing or trivial. 'url' param in cast_youtube has description 'URL YouTube ou ID de video' but does not specify format, valid patterns, or error cases. 'level' in cast_volume lacks min/max bounds (0-100 stated in tool description, not param description).
No output schemas documented. Callers do not know what cast_status returns (fields, types, structure). No pagination support for cast_scan results. Without documented outputs, LLMs cannot chain tools or extract required IDs for follow-up calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Regle le volume du cast (0-100).
Caste une video YouTube sur la TV.
Error handling is generic: returns (bool, str) with no categorization. Errors like 'Timeout' or 'catt non installe' do not guide recovery. No distinction between retryable (network timeout) vs user-fixable (invalid URL) vs fatal (catt missing). LLM cannot decide next action.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads (cast_scan, cast_status) from destructive writes (cast_stop, cast_youtube). No idempotency guarantees, retrying cast_youtube may start playback twice.