Control smart TVs (LG, Samsung, Android TV, Roku) with natural language. Play Netflix/YouTube/Spotify by name, cast URLs, queue content, get recommendations, run scene presets, sync across multiple TVs.
The smartest-tv MCP server defines 7 tools with reasonable naming (verb_noun pattern: tv_play, tv_cast, tv_next, tv_power, tv_volume) and moderate descriptions (80-250 chars), but exhibits significant gaps in parameter descriptions, schema completeness, and output documentation. While tool names are action-oriented and clear, most parameter descriptions are terse or missing context about constraints, formats, and expected values. No output schemas are documented, making it impossible for LLMs to understand response structure or plan downstream calls. Error handling guidance is absent, tools provide no recovery hints or actionable error messages. Security considerations (rate limits, input validation guidance) are not visible in the code. The server is STDIO-only, which caps the protocol readiness score at 50 and prevents remote accessibility.
Cast a Netflix/YouTube/Spotify URL to the TV. Paste any streaming URL. stv parses the platform and content ID automatically.
Play the next episode. Continues from watch history.
Find content by name and play it on TV. This is the primary tool. Resolves the content ID automatically, then deep-links into the app on your TV.
Turn TV on or off.
Get personalized recommendations based on watch history + trending.
Get or set volume, step up/down, or toggle mute. All in one tool. - No args: returns current volume + mute status - level=25: set volume to 25 - direction="up"/"down": step volume - mute=True/False/None: mute, unmute, or toggle
No output schemas documented. LLMs cannot infer response structure, return field names, or data types. Impossible to plan chained calls or extract required fields for subsequent tools.
Parameter descriptions lack format/constraint specifications. E.g., tv_play's 'season' and 'episode' params have no min/max bounds or usage context. tv_whats_on's 'limit' param lacks min/max. tv_volume's 'level' accepts 0-100 but description does not clarify 'mute' param semantics (True/False/None toggle).
Parameter 'platform' in tv_play and tv_whats_on are documented as free-form strings ('"netflix", "youtube", or "spotify"') instead of enums. LLMs will hallucinate invalid values like 'netflix-hd' or 'Disney+' without enum constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
Show trending content on Netflix and/or YouTube.
Missing output documentation for all tools. No description of return types, field names, or structure. E.g., tv_whats_on likely returns a list of content items, but the response schema (titles, genres, URLs, availability) is undocumented. tv_recommend's response format is unknown.
No error handling guidance. Tools provide no recovery hints. E.g., if tv_play fails to find a title, what should the LLM do next? Should it call tv_whats_on to discover available titles? Should the user provide more specific query text? No direction provided.
tv_volume tool description is ambiguous about parameter relationships. The description states 'No args: returns current volume + mute status' but the schema shows optional level, direction, and mute params. No documentation of which combinations are valid (e.g., can you pass both 'level' and 'direction' simultaneously?) or what the output structure is.
tv_next parameter 'query' is optional but semantics unclear. Description states 'Omit to continue the most recent Netflix show', but what if the user has been watching YouTube? Does the tool check all platforms? Does it return an error if no recent show exists?
tv_play 'title_id' parameter is underdocumented. Description says 'Netflix title ID if already known (skips search)' but does not explain where LLMs would obtain this ID, whether it is required, or what happens if both 'query' and 'title_id' are provided.
Missing parameter descriptions for optional context. All tools accept 'tv_name' as optional 'default TV' fallback, but no guidance on how to discover available TV names, what format they take, or error behavior if an invalid name is provided.