Smartest-TV
Control your TV, play streaming content, manage multi-room audio, and get AI-powered recommendations — all from natural language or CLI commands.
🎬 Content Playback
tv_play— Play content by name on Netflix, YouTube, Spotify, Disney+, Prime Video, and more (auto-detects platform, supports specific seasons/episodes)tv_cast— Cast any Netflix, YouTube, or Spotify URL directly to your TVtv_next— Continue watching the next episode based on watch historytv_launch— Launch an app or deep-link with a known content IDtv_resolve— Resolve a content name to its platform ID without playing
🔍 Discovery & Recommendations
tv_whats_on— Browse trending content on Netflix and YouTubetv_recommend— Get personalized recommendations based on watch history and mood (chill, action, kids, random)
🎮 TV Control
tv_power— Turn the TV on or offtv_volume— Get/set volume, step up/down, or toggle mutetv_screen— Turn the screen on/off while audio continuestv_notify— Display a toast notification on the TV screentv_status— Get current TV state (app, volume, mute, model, firmware)
📋 Organization
tv_queue— Manage a play queue (add, show, play, skip, clear)tv_scene— Run or list scene presets (movie-night, kids, sleep, music)tv_history— View recent play history
🖥️ TV as Display
tv_display— Show messages, clocks, dashboards, photo slideshows, or embedded websites on the TV
🔊 Multi-Room Audio
tv_audio— Play music across multiple TVs with screens off, with per-room volume control (free Sonos alternative)
📺 Multi-TV Management
tv_sync— Play content on multiple TVs simultaneously (party mode)tv_list_tvs— List all configured TVs with detailstv_groups— List TV groups and their members for bulk control
📊 Intelligence & Analytics
tv_insights— Get viewing stats, screen time reports, and subscription value analysis
⚙️ Platform & Integrations
Supports LG webOS, Samsung Tizen, Android TV/Fire TV, and Roku
Integrates with Home Assistant (HACS), MCP clients (Claude, Cursor, GPT), cron, and shell scripts
Runs entirely on your local network — no telemetry or cloud sync
Enables searching and playing Apple TV+ content by name via HTML parsing, without requiring login.
Integrates with Crunchyroll for searching and playing anime content by name.
Allows playing Netflix content by name or URL, with support for season and episode selection, and deep-linking directly to playback.
Supports searching and playing content from Paramount+ by name via JustWatch API.
Allows playing Prime Video content by name via JustWatch API integration.
Enables multi-room audio playback, allowing music to be played across multiple TVs or rooms simultaneously.
Allows playing Spotify tracks or playlists by name or URL, and integrating with multi-room audio features.
Supports playing YouTube videos by name or URL, and queueing content for multi-room audio.
Pick up remote
Open Netflix app
Search for show
Pick the season
Pick the episode
Press play
~30 seconds
stv play netflix "Dark" s1e1~3 seconds
No TV? No problem. Without a TV configured, stv opens content directly in your browser. Netflix, YouTube, Spotify, Disney+ — just
pip install stvand go.
🛋 Vibe-code and chill
Vibe-coding at 2am. Claude writes your code. You tell it to put on a show. It does.
you: play frieren on the living room tv
claude: Playing Frieren s2e8 on Living Room. (3s)
you: bit quieter
claude: Volume → 18.
you: good night
claude: All 3 TVs off.Already installed stv? Just tell Claude:
# Option 1 — just talk (zero config)
"run stv play netflix Frieren s2e8"
# Option 2 — install the Skill for auto-trigger
clawhub install smartest-tv
# now "play Frieren", "good night", "next episode" just work mid-sessionAlso available as an MCP server (21 tools) for Claude Code, Codex, Antigravity, and other MCP clients.
Related MCP server: MCP Roku Control
🎯 Just type stv
No subcommand? You get a Now Playing card and three contextual next-actions based on your watch history — not a 30-command help dump.
$ stv "play dark on netflix" # natural language works
$ stv play "Frieren" # auto-detects platform
$ stv next # continue last show
$ stv stats # → insightsUnknown input? You get a friendly hint, not an error.
🎨 A CLI that looks like a product
Every command renders with Catppuccin Mocha colors, semantic icons, and real
visual hierarchy. Prefer another palette? Set STV_THEME=nord or STV_THEME=gruvbox.
--format json is always available when you need to pipe to jq.
✨ What it does
🎬 Play by name
stv play netflix "Dark" s1e1
stv play disney "Percy Jackson" s1e1
stv play prime "The Boys" s1e1
stv play "Frieren" s2e8 # auto-detects platformSay the name. stv finds the ID, opens the app, starts playback. Netflix and Apple TV+ resolve via HTML parsing. Disney+, Max, Prime, Hulu, Paramount+, Peacock, Crunchyroll, and every platform on JustWatch resolve via their API — no login, no API key. Skip the platform name and stv auto-detects where it's streaming in your region.
🔗 Cast any URL
stv cast https://youtu.be/dQw4w
stv cast https://netflix.com/watch/...
stv cast https://open.spotify.com/...Friend sends a link. Paste it. TV plays it.
🎵 Queue & party
stv queue add youtube "Gangnam Style"
stv queue add spotify "Blinding Lights"
stv queue playEveryone adds their pick. TV plays in order.
🎭 Scene presets
stv scene movie-night # volume 20, cinema
stv scene kids # volume 15, Cocomelon
stv scene sleep # rain sounds, auto-offOne command sets the vibe.
🔊 Multi-room audio
stv audio play "lo-fi beats"
stv audio volume kitchen 30
stv audio stopScreens off. Music everywhere.Free Sonos.
📺 TV as display
stv display message "Dinner!"
stv display clock
stv display dashboard "Temp:22°C"Dashboards, clocks, signage.$0/month.
📊 Watch intelligence
stv insights
stv screen-time
stv sub-value netflix --cost 17.99Is your Netflix worth $18/month?
🌐 Sync party
stv --all play youtube "lo-fi beats"
stv --group party play netflix "Wed..."
stv --all off # good nightEvery TV. At once. Even remote friends.
🤖 AI concierge
"Play something chill"
→ tv_recommend → tv_play
→ Playing The Queen's Gambit21 MCP tools. One sentence is enough.
🤖 Tell your AI to control your TV
stv is an MCP server. Claude, GPT, Cursor, or any MCP client can control your TV with natural language.
Setup (one line):
{
"mcpServers": {
"tv": {
"command": "uvx",
"args": ["stv"]
}
}
}Or via OpenClaw:
clawhub install smartest-tvThen just talk:
You: "I just got home, set up movie night"
Claude: 🎬 Movie night activated.
Volume → 20, cinema mode on.
Based on your history:
1. The Queen's Gambit (Netflix)
2. Ozark (Netflix)
3. Squid Game S2 (Netflix)
You: "Play 1, put a clock on kitchen TV"
Claude: ✓ Playing The Queen's Gambit
✓ Clock on kitchen TVCategory | Tool | What it does |
Play |
| Search + play by name |
| Cast any URL | |
| Continue watching | |
| Launch app with ID | |
| Get content ID only | |
Discover |
| Trending content |
| Personalized picks | |
Control |
| On/off |
| Get/set/step/mute | |
| Screen on/off | |
| Toast notification | |
| Current state | |
Organize |
| Play queue |
| Scene presets | |
| Watch history | |
Intelligence |
| Viewing stats |
| TV as display | |
| Multi-room audio | |
Multi-TV |
| Play on all TVs |
| List TVs | |
| TV groups |
📅 A day with stv
Time | What happens |
7am |
|
8am |
|
12pm | Friend sends Netflix link → |
5pm |
|
6:30pm |
|
7pm |
|
9pm |
|
10pm |
|
11:30pm |
|
🔥 Killer combos
🌙 Bedtime autopilot
stv audio play "rain" --rooms bedroom
stv scene sleep
stv --all offAmbient sound, screen off, auto-timer, every other TV killed.
🎧 Free Sonos
stv audio play "lo-fi beats"
stv audio volume kitchen 40
stv audio volume bedroom 15Every TV is a speaker. Per-room volume. Screens off.
💰 Subscription audit
stv sub-value netflix --cost 17.99
# → $8.50/hr — consider canceling
stv sub-value youtube --cost 13.99
# → $1.20/hr — good value⚙️ How it works
"Play Dark S1E1"
│
▼
┌─── Resolution ───┐
│ Cache → API → Web │ content_id
│ 0.1s 1s 3s │──────────────▶ 📺 TV plays it
└───────────────────┘ │
Deep link via
LG / Samsung / Roku / AndroidSay a name. stv resolves it to a content ID, deep-links into the app on your TV. No browser automation, no API keys, no cloud dependency. Results are cached so repeat plays are instant.
📦 Install
pip install stv # LG webOS (default)
pip install "stv[samsung]" # Samsung Tizen
pip install "stv[android]" # Android TV / Fire TV
pip install "stv[all]" # Everythingstv setup # auto-discover + pair your TVSupports LG webOS · Samsung Tizen · Android TV / Fire TV · Roku
Home Assistant (HACS)
Add as a custom repository (default listing in review: hacs/default#6907):
HACS → ⋮ (top right) → Custom repositories
URL: https://github.com/Hybirdss/smartest-tv
Category: Integration → Add
Then: Install → Restart HA
Settings → Integrations → Add → "Smartest TV" → auto-discovers your TVsAndroid TV / Fire TV: the setup flow shows a 6-digit PIN on the TV —
enter it in the pairing form to finish. In HA OS / HA Container set
STV_CONFIG_DIR=/config/smartest-tv so pairing survives container
rebuilds. See docs/integrations/home-assistant.md.
Then use in automations:
service: media_player.play_media
target:
entity_id: media_player.living_room
data:
media_content_type: stv
media_content_id: "netflix:Frieren:s2e8"This does what HA's built-in media_player.play_media can't: resolve a show by name and deep-link into the streaming app. Power, volume, and playback controls also work as standard HA media player entities.
🔌 Works with
Integration | How |
Home Assistant | HACS custom integration → |
Claude Code / Cursor | Add MCP config → |
OpenClaw |
|
cron |
|
Shell scripts |
|
Any MCP client | 21 tools, stdio or HTTP ( |
📚 Docs
Setup for any TV brand | |
play, cast, queue, resolve | |
movie-night, kids, sleep, custom | |
Multi-TV, remote watch party | |
10 powerful feature combos | |
MCP for Claude, Cursor, OpenClaw | |
Every command and option | |
All 21 tools with parameters |
🔓 Open source
Every line of stv is on GitHub — the CLI, resolvers (Netflix, Apple TV+, YouTube, Spotify, Disney+, Max, Prime Video, Paramount+, Hulu, Peacock, Crunchyroll, and more via JustWatch), all 4 TV drivers (LG, Samsung, Roku, Android), cache, sync engine, scenes, and all 253 tests. Streaming availability data powered by JustWatch.
🔒 Privacy
stv runs on your local network. No telemetry, no analytics, no cloud
sync, no phoning home about what you watch. There is no posthog, no
amplitude, no sentry, no mixpanel — grep the source.
One exception — community cache contribution. When you play content that isn't in the local cache, stv resolves it (via web parsing) and submits the resolved ID to a shared community cache so the next user gets an instant lookup. This is the same pattern as Wikipedia or a package mirror — many small contributions, anonymous.
What's sent (background HTTPS, fire-and-forget, never blocks playback):
Platform name (
netflix/youtube/spotify)Content slug (e.g.
frieren)Resolved content ID (Netflix title ID, YouTube video ID, Spotify URI)
What's not sent:
Your name, email, or any user identifier
Your IP address (the CDN sees a connection IP per standard HTTP, but the client never reads or transmits it)
Your watch history or play timestamps
Your TV's IP address or hardware info
Anything about how often or when you use stv
To disable cache contribution entirely:
export STV_NO_CONTRIBUTE=1Source: src/smartest_tv/cache.py — search for _contribute.
🤝 Contributing
211 tests. No TV needed to run them.
pip install -e ".[dev]"
python -m pytest tests/ -vSamsung, Roku, and Android TV drivers need real-world testing. If you have one, your feedback matters.
Cache Contributions · Driver Development
Available Tools
23 toolstv_audioA
Multi-room audio mode — play music with screens off.
Actions: play, stop, volume.
| Name | Required | Description | Default |
|---|---|---|---|
| room | No | Single room name (for "volume" action). | |
| query | No | Music to play (required for "play"). Defaults to YouTube. | |
| rooms | No | List of room/TV names. Omit for all TVs. | |
| action | Yes | "play", "stop", or "volume". | |
| volume | No | Volume level (for "volume" action). | |
| platform | No | "youtube" or "spotify" (for "play"). | youtube |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions 'screens off' and limited actions, but lacks details on side effects, prerequisites, or behavior for multi-room sync. Schema covers parameters but description adds minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff, front-loaded with key information. Efficient and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, reducing burden. Description covers core functionality but could mention defaults (e.g., omitting rooms plays on all TVs) or additional nuances.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%. Description adds little beyond stating actions; e.g., 'Actions: play, stop, volume' maps to the action parameter. Baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: multi-room audio mode for playing music with screens off. Lists specific actions (play, stop, volume) and distinguishes from siblings like tv_play and tv_volume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. Implies use for multi-room audio but does not compare to alternatives among many sibling tv_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_castA
Cast a Netflix/YouTube/Spotify URL to the TV.
Paste any streaming URL. stv parses the platform and content ID automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Any Netflix, YouTube, or Spotify URL. | |
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It adds 'stv parses the platform and content ID automatically,' which is useful behavioral context. However, it does not disclose error handling, limitations (e.g., supported platforms beyond Netflix/YouTube/Spotify), or side effects (e.g., disrupting current playback).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the key action, and adds a concise second sentence for detail. No unnecessary words. Efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity and presence of an output schema, the description is adequate but lacks contextual completeness. It does not mention prerequisites (e.g., network connectivity, casting support), error scenarios, or runtime behavior. More detail would help an agent invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra context about auto-parsing for the url parameter, but this is a minor addition. For tv_name, it echoes the schema. Overall, marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Cast a Netflix/YouTube/Spotify URL to the TV.' It uses a specific verb ('Cast') and identifies the resource (streaming URLs) and target (TV). This distinguishes it from sibling tools like tv_play or tv_launch, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (cast streaming URLs) but does not explicitly state when to use this tool over alternatives. It lacks guidance on prerequisites (e.g., TV on same network) or when not to use it. No comparison to sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_displayA
Turn the TV into a display — show dashboards, messages, clocks, or any URL.
The TV becomes a smart display. HTML is generated and served locally, then opened in the TV's browser.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Content-specific data: - message: {"text": "Hello!", "bg": "#000", "color": "#fff"} - clock: {"format": "24h"} or {"format": "12h"} - dashboard: {"title": "Home", "cards": [{"label": "Temp", "value": "22°C"}]} - photo: {"urls": ["http://..."], "interval": 5} - iframe: {"url": "https://...", "fullscreen": true} - custom: {"html": "<div>...</div>"} | |
| port | No | Local server port (default 8765). | |
| tv_name | No | Target TV. Omit for default. | |
| content_type | Yes | "message", "clock", "dashboard", "photo", "iframe", or "custom". |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the mechanism (HTML generated and served locally) but does not disclose potential side effects like interrupting current TV usage, error handling, or requirements (TV on/connected).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and concise. No wasted words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (multiple content types) and that an output schema exists, the description is fairly complete. It explains the tool's function and mechanism, though it could mention impact on current TV state.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with detailed examples for the 'data' parameter. The tool description adds no extra meaning beyond the schema; it just summarizes what content types are supported. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool turns the TV into a display for dashboards, messages, clocks, or any URL. It uses specific verbs and resources, and differentiates from sibling tools like tv_audio or tv_cast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (to display custom content on TV) but does not explicitly state when not to use it or compare with alternatives like tv_cast for streaming or tv_launch for apps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_groupsB
List all TV groups and their members.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for disclosing behavior. It only states the function, omitting critical traits like read-only nature, side effects, or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is minimally adequate but lacks context about what constitutes a 'TV group' or how results are structured.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description adds no parameter info. Per guidelines, baseline is 4 for 0-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (list) and the resource (TV groups and their members). It distinguishes itself from sibling tools like tv_list_tvs and tv_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. With 22 sibling tools, explicit context would be helpful but is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_historyC
Show recent play history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states 'show recent play history'. It omits details like scope, ordering, side effects, or authorization needs, making the tool's behavior opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (one sentence), but it sacrifices necessary detail. It is not optimally structured for an agent, lacking front-loaded key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema but no parameter explanation, and given the many sibling tools, the description is too sparse to be complete. It does not leverage the context to aid selection or usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the description does not mention the 'limit' parameter at all, failing to add any meaning beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it shows 'recent play history', which is a specific verb-resource pair. However, it does not distinguish from siblings like 'tv_whats_on' or 'tv_queue' that might also involve recent content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description lacks context on use cases, prerequisites, or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_insightsB
Get viewing insights, screen time, or subscription value analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | "day", "week", or "month". | week |
| report_type | No | "full" (formatted report), "screen_time", or "sub_value:platform:cost" (e.g. "sub_value:netflix:17.99"). | full |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavioral traits. It implies a read-only operation by saying 'Get', but does not explicitly mention side effects, auth requirements, or other constraints. The parameter hints add minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that earns its place by conveying the core functionality without fluff. However, it could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 optional parameters, full schema coverage, and an output schema), the description is adequately complete. It captures the main purpose, though additional context about output format or typical use cases would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond the schema, as it only reiterates the report types that are already described in the parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides viewing insights, screen time, or subscription value analysis. It uses a specific verb and resource, but does not distinguish from sibling tools like tv_whats_on or tv_recommend, so it misses a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It only states what it does, without any context or exclusions, leaving the agent to infer usage from the name and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_launchA
Launch an app, optionally with a deep link.
Use tv_play instead if you have a content name (not ID). Use this when you already have the exact content ID.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | App name (netflix, youtube, spotify) or raw app ID. | |
| tv_name | No | Target TV name. Omit for default TV. | |
| content_id | No | Platform-specific content ID for deep linking. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes core action but lacks details on side effects, prerequisites, or error handling. No annotations are provided to supplement this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose and pair it with conditional guidance, no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (launch app with optional params) and presence of an output schema, the description fully covers what the agent needs to know.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all parameters with descriptions (100% coverage), and the description adds no new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it launches an app with optional deep link, and distinguishes from tv_play by specifying when to use each based on content identifier type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to use tv_play for content names and tv_launch for exact content IDs, providing clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_list_tvsA
List all configured TVs with name, platform, IP, and default status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It describes a read-only listing, but does not explicitly state it is non-destructive or has no side effects. The description is truthful but adds minimal behavioral context beyond the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, efficiently stating the action and the data returned. No redundant or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list-all tool with zero parameters and an output schema, the description is fairly complete. It could mention that it returns all TVs without filtering or ordering, but the core functionality is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is effectively 100%. The description adds value by listing the fields returned, which helps the agent understand the output. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all configured TVs and specifies the returned fields (name, platform, IP, default status). It uses a specific verb and resource, distinguishing it from sibling tools like tv_status or tv_power.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it does not mention that this tool is for obtaining an overview, while tv_status might be used for detailed info on a single TV.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_nextB
Play the next episode. Continues from watch history.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Show name. Omit to continue the most recent Netflix show. | |
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits (e.g., immediate playback, side effects). Only states the action without elaboration on what happens or what the output contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with two sentences, but could be slightly expanded to include usage context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks prerequisites (e.g., need watch history, target TV) and fails to guide the agent on when this tool is appropriate among 22 siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description adds minimal context about 'next episode' and 'watch history', but doesn't significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it plays the next episode based on watch history, which distinguishes it from general playback tools like tv_play. However, it could explicitly differentiate from tv_recommend or tv_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for continuing a series, but lacks explicit guidance on when to use vs siblings (e.g., vs tv_play) or prerequisites like having watch history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_notifyC
Show a toast notification on the TV screen.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Text to display. | |
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'Show a toast notification', omitting critical details like whether the TV must be powered on, whether it requires an active connection, what happens if the TV is off, or if the tool returns any acknowledgment. This lack of transparency could lead to misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. It contains no redundant words. However, it could benefit from a bit more structure, e.g., separating behavior from parameter hints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and the presence of an output schema (content unknown), the description should still mention what the tool returns (e.g., success/failure, error conditions) and any prerequisites (e.g., TV must be on). The current description is insufficient for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions. The tool description adds nothing beyond the schema: it does not clarify the format or constraints of the message, nor the behavior when tv_name is omitted. Since schema coverage is high, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Show') and the resource ('toast notification on the TV screen'). It distinguishes this tool from siblings like tv_audio or tv_launch, which have different purposes. However, it could be more specific about what a toast notification entails (e.g., duration, position).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it does not indicate whether this is for brief messages vs. tv_display for persistent content, or when to use tv_notify over tv_state notifications. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_playA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Content name (e.g. "Stranger Things", "baby shark", "Ye White Lines"). | |
| season | No | Season number (Netflix series only). | |
| episode | No | Episode number (Netflix series only). | |
| tv_name | No | Target TV name. Omit for default TV. | |
| platform | Yes | "netflix", "youtube", or "spotify". | |
| title_id | No | Netflix title ID if already known (skips search). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds value by disclosing automatic content ID resolution and deep-linking behavior. However, it omits details on error handling or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with key purpose, no redundant information. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers the core function and key behavior. Lacks mention of error responses or supported platforms beyond what schema provides, but adequate for a play tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 is appropriate. The description does not add parameter meaning beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Find content by name and play it on TV.' It distinguishes itself as 'the primary tool' among siblings, with a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description claims it is the 'primary tool' but does not explicitly state when to use it versus alternatives like tv_cast or tv_queue. No exclusions or when-not-to-use guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_powerB
Turn TV on or off.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes | True = turn on, False = turn off. | |
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the action without disclosing behavioral traits such as idempotency, error states, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveying the essential information without unnecessary words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple power-on/off command, the description is adequate given that an output schema exists. However, it could be more explicit about behavior (e.g., toggle vs set).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional meaning beyond the schema, meeting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb 'Turn' and resource 'TV' with clearly defined states 'on or off'. It distinguishes itself from sibling tools like tv_audio, tv_cast, etc., which deal with different functionalities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description only states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_queueC
Manage the play queue. Actions: add, show, play, skip, clear.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Required for "add". Content name. | |
| action | Yes | "add", "show", "play", "skip", or "clear". | |
| season | No | For "add" — Netflix season number. | |
| episode | No | For "add" — Netflix episode number. | |
| tv_name | No | For "play" — target TV. | |
| platform | No | Required for "add". netflix/youtube/spotify. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but does not disclose behavioral traits such as side effects, state changes, or required permissions. The brief action list is insufficient for understanding what each action does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a single sentence and bullet-like list of actions. Every word is purposeful, and the structure is clear and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the output schema and full parameter descriptions in the schema, the overall description is too brief for a tool with multiple actions and 6 parameters. It fails to explain how actions relate to parameters or what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional parameter context beyond listing action names, which is adequate but not enhanced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool manages a play queue and lists the supported actions (add, show, play, skip, clear), distinguishing it from sibling tools like tv_play that likely handle direct playback.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., tv_play for direct play, or other queue-like tools). The description lacks context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_recommendA
Get personalized recommendations based on watch history + trending.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | "chill", "action", "kids", "random", or omit for auto. | |
| limit | No | Number of recommendations (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states that recommendations are based on watch history and trending, but does not disclose whether the tool is read-only, requires authentication, or any side effects. This is insufficient for a tool that likely accesses user data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 8 words, which is very concise. No filler content. However, it could include additional context without becoming verbose, so it loses a point for not being more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown), the description does not need to explain return values. Parameters are well-documented in the schema. However, behavioral context (e.g., safety, data usage) is missing, making the description adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters (mood, limit) with descriptions. The description does not add meaning beyond what the schema already provides, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get personalized recommendations based on watch history + trending.' It uses a specific verb and resource, and the basis (watch history + trending) differentiates it from sibling tools like tv_whats_on (current programming) and tv_next (next episode).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (personalized recommendations), but does not explicitly state when to use or not use this tool over alternatives. Given the sibling tools are numerous and diverse, the context is clear enough for an agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_resolveC
Resolve a content name to its platform ID without playing.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Content name. | |
| season | No | Season number (Netflix). | |
| episode | No | Episode number (Netflix). | |
| platform | Yes | netflix, youtube, or spotify. | |
| title_id | No | Netflix title ID if known. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It only notes that the tool does not play content, but fails to disclose other behavioral traits like whether it is read-only, auth requirements, or error handling behavior. The description is very minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. However, it is very concise to the point of being slightly underspecified, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no annotations, and an output schema present, the description lacks context for when to use the optional parameters (season, episode, title_id) and does not explain the purpose of resolving to a platform ID. The description is insufficient for an effective agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all parameters. The description adds no additional meaning or context beyond what the schema provides, placing it at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('resolve a content name to its platform ID') and distinguishes from sibling tools like tv_play by noting 'without playing'. This provides a specific verb and resource, but the term 'platform ID' could be further clarified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, such as when to use tv_play or other related tools. No when-not or explicit context is given, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_sceneB
Run or list scene presets. Built-in: movie-night, kids, sleep, music.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Scene name (required for "run"). | |
| action | No | "list" or "run". | list |
| tv_name | No | Target TV (for "run"). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions built-in scenes but omits details like error handling, required TV state, or response format. The description is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently states the core purpose and key examples. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given three parameters and an output schema, the description is too brief. It lacks details on the response format, error scenarios, and behavioral constraints. For a tool with many siblings, it should provide more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear descriptions for each parameter. The description adds the list of built-in scenes, which provides context beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run or list scene presets.' It includes specific built-in examples (movie-night, kids, sleep, music), distinguishing it from sibling tools like tv_power or tv_volume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to list vs. run, when to use this tool over alternatives, or any prerequisites. The schema implies list is default but no explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_screenA
Turn screen on or off (audio continues when off).
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes | True = screen on, False = screen off (audio continues). | |
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses one key behavior (audio continues when off) but lacks details on permissions, side effects, or other operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core action and a behavioral note. No wasted words; front-loaded with the verb-resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 parameters, no enums, output schema present), the description covers the essential purpose and one behavioral effect. It is likely sufficient for the AI to use correctly, though additional detail on when to use vs. siblings would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema's own parameter descriptions (e.g., 'True = screen on' is already in the schema). No additional semantics are contributed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb-resource: 'Turn screen on or off', and distinguishes from siblings like tv_power (controls entire power) and tv_audio (controls audio) by specifying that audio continues when the screen is off.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case (keeping audio while turning off screen) but does not explicitly state when to use this vs. alternatives like tv_power or tv_audio. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_stateA
Get unified live TV state: playback, volume, input, power.
Returns a single snapshot for agent branching. Fields the target driver cannot supply are returned as None.
| Name | Required | Description | Default |
|---|---|---|---|
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that unsupplied fields are returned as None and that it returns a snapshot. This adds some behavioral context, but lacks details on authentication, rate limits, or side effects, which are important for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence states purpose and key fields, the second adds behavioral detail and usage context. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter, existence of an output schema, and no nested objects, the description covers all essential aspects: what data is returned (playback, volume, input, power), that it's a snapshot, and how missing fields are handled. Fully adequate for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description ('Target TV name. Omit for default TV.'). The tool description does not add further meaning about the parameter beyond hinting at the output, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets 'unified live TV state' and lists specific fields (playback, volume, input, power). It distinguishes from siblings like tv_volume or tv_power by emphasizing it's a single composite snapshot, and mentions 'agent branching' to differentiate from tv_state_watch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly guides usage by saying 'Returns a single snapshot for agent branching,' which implies one-off state retrieval for decision-making. However, it does not explicitly state when to use this tool versus alternatives like tv_state_watch for continuous monitoring, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_state_watchA
Stream tv_state snapshots via progress notifications.
Emits count progress updates spaced interval seconds apart,
then returns the final snapshot. Default is 1 minute of watching.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of snapshots to emit (default 12). | |
| tv_name | No | Target TV name. Omit for default TV. | |
| interval | No | Seconds between snapshots (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: streaming via progress notifications, configurable count and interval, final snapshot return, and default duration. Since no annotations are provided, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loads the core action, and is structured logically. It could be slightly more structured with bullet points, but remains effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with full schema coverage and an output schema existing, the description adequately covers the tool's functionality. It explains the streaming behavior and defaults, which is enough for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions. The description adds context about the default behavior ('Default is 1 minute of watching'), but does not significantly enhance meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool streams tv_state snapshots via progress notifications, specifying the verb 'stream' and the resource 'tv_state snapshots'. It uniquely identifies the tool's function among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for observing state over time with defaults, but does not explicitly state when to use this tool versus alternatives like tv_state (single snapshot) or other TV tools. No guidance on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_statusA
Get TV status: current app, volume, mute, model, firmware.
| Name | Required | Description | Default |
|---|---|---|---|
| tv_name | No | Target TV name. Omit for default TV. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly lists the returned fields, making the tool's behavior clear. It implies a read-only operation without side effects. However, with no annotations, the description could be more explicit about non-destructiveness and any prerequisites, though for a simple getter this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 10 words, front-loading the action and key fields. It contains no filler and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, output schema present), the description covers the essential information. It could be slightly more complete by mentioning that it returns a snapshot (vs. watch tools), but overall it's sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (parameter 'tv_name' is fully documented in the input schema). The description adds no additional meaning about the parameter beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Get' and specifies the resource 'TV status', followed by a concise list of fields (current app, volume, mute, model, firmware). This clearly distinguishes it from sibling tools like tv_volume or tv_whats_on, which target specific subsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The description implies it is the general status snapshot, but fails to mention that more specific tools (e.g., tv_volume, tv_whats_on) might be preferred for individual attributes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_syncA
Play content on multiple TVs simultaneously (party mode).
Resolves once, launches on all targets via asyncio.gather.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | TV group name (e.g. "party"). | |
| query | Yes | Content name. | |
| season | No | Netflix season number. | |
| episode | No | Netflix episode number. | |
| platform | Yes | netflix, youtube, or spotify. | |
| title_id | No | Netflix title ID if known. | |
| tv_names | No | List of TV names. Or use group. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it resolves once and launches via asyncio.gather (async behavior), but it does not specify error handling, waiting behavior, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded purpose then technical detail. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given good schema coverage and an output schema, the description covers the core functionality. However, missing usage guidelines relative to siblings is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good descriptions for each parameter. The tool description does not add extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Play content on multiple TVs simultaneously (party mode)', which is a specific verb+resource+scope. It distinguishes from siblings like tv_launch and tv_play by emphasizing multi-TV sync.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for broadcasting to multiple TVs but does not explicitly state when to use this tool vs alternatives like tv_launch or tv_cast. No when-not or alternative names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_volumeA
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
| Name | Required | Description | Default |
|---|---|---|---|
| mute | No | True=mute, False=unmute, None=toggle. | |
| level | No | Volume level 0-100. | |
| tv_name | No | Target TV name. Omit for default TV. | |
| direction | No | "up" or "down" for one step. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses both read behavior (no args returns current volume+mute) and write behavior (setting, stepping, muting). It does not mention side effects or permissions, but the tool's simple nature makes this sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences plus bullet examples). It front-loads the main purpose. Every line adds value, though the bullet list could be more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 4 parameters and an output schema (not shown). The description covers the return for no args but does not explain behavior when multiple parameters are combined (e.g., setting level and direction together). For a simple tool, it is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by showing usage patterns (e.g., 'level=25') and explaining the mute parameter's behavior (True=mute, False=unmute, None=toggle), which clarifies the null meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get or set volume, step up/down, or toggle mute.' It uses specific verbs (get, set, step, toggle) and resource (volume), distinguishing it from sibling tools like tv_audio or tv_power.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage patterns for each parameter (e.g., 'level=25: set volume to 25', 'direction="up"/"down": step volume', 'mute=True/False/None'). It does not explicitly state when not to use the tool or suggest alternatives, but the examples cover common use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_whats_onA
Show trending content on Netflix and/or YouTube.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results per platform (default 10). | |
| platform | No | "netflix", "youtube", or omit for both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It correctly indicates this is a read-only operation (showing content), but does not mention authentication needs, rate limits, or what happens with invalid platform values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no waste. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered. However, the description does not mention the nature of the output (e.g., list of titles, scores) or any limitations like pagination, making it marginally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already defines limit and platform. The description adds context ('trending content on Netflix and/or YouTube') but does not enhance the meaning of the parameters beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Show' and the resource 'trending content on Netflix and/or YouTube', which distinctly separates it from sibling tools like tv_audio or tv_power.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for discovering trending content on streaming platforms, but lacks explicit guidance on when to use or not use this tool compared to alternatives. However, sibling tools are so different that it's reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
v1.0.2- Added
tv_audio - Added
tv_cast - Added
tv_display - Added
tv_groups - Added
tv_history - Added
tv_insights - Added
tv_launch - Added
tv_list_tvs - Added
tv_next - Added
tv_notify - Added
tv_play - Added
tv_power - Added
tv_queue - Added
tv_recommend - Added
tv_resolve - Added
tv_scene - Added
tv_screen - Added
tv_state - Added
tv_state_watch - Added
tv_status - Added
tv_sync - Added
tv_volume - Added
tv_whats_on
21 tool updates
v0.3.0- Removed
tv_audio - Removed
tv_cast - Removed
tv_display - Removed
tv_groups - Removed
tv_history - Removed
tv_insights - Removed
tv_launch - Removed
tv_list_tvs - Removed
tv_next - Removed
tv_notify - Removed
tv_play - Removed
tv_power - Removed
tv_queue - Removed
tv_recommend - Removed
tv_resolve - Removed
tv_scene - Removed
tv_screen - Removed
tv_status - Removed
tv_sync - Removed
tv_volume - Removed
tv_whats_on
21 tool updates
v0.1.0- First observed
tv_audio - First observed
tv_cast - First observed
tv_display - First observed
tv_groups - First observed
tv_history - First observed
tv_insights - First observed
tv_launch - First observed
tv_list_tvs - First observed
tv_next - First observed
tv_notify - First observed
tv_play - First observed
tv_power - First observed
tv_queue - First observed
tv_recommend - First observed
tv_resolve - First observed
tv_scene - First observed
tv_screen - First observed
tv_status - First observed
tv_sync - First observed
tv_volume - First observed
tv_whats_on
TDQS
Scored across 23 tools
Most tools have clearly distinct purposes. Some overlap exists between tv_launch/tv_play and tv_state/tv_status/tv_state_watch, but descriptions clarify the specific use cases (ID-based vs name-based, snapshot vs streaming).
All tools use the 'tv_' prefix followed by a verb_noun pattern (e.g., tv_play, tv_notify, tv_list_tvs). The naming is entirely consistent in style (snake_case) and predictable, making it easy for agents to infer functionality.
With 23 tools, the surface is robust but slightly heavy for a TV control server. Each tool serves a distinct function, and the count is justifiable given the breadth of features (playback, queue, sync, recommendations, etc.). Could be trimmed by combining some state tools, but not excessive.
The tool set covers most core TV operations: power, volume, playback, queue, casting, display, notifications, groups, and insights. Missing are input switching, settings management, or account-related operations, but these are minor gaps for a streaming-focused TV server.
Maintenance
Related MCP Connectors
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
Manage digital signage screens, playlists and media from your AI assistant.
- mytesla.ioOAuthio.mytesla
Control your Tesla from your AI assistant - climate, charging, access, and security.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to control TVs on a local network through natural language commands. It currently supports Roku devices, allowing users to launch apps, manage playback, and navigate menus.5-
- FlicenseAqualityDmaintenanceEnables AI assistants to control Roku TVs on the local network via natural language commands.6-
- AlicenseNot gradedqualityDmaintenanceEnables control of TV and air conditioner through natural language commands via Cursor or Claude Desktop.MIT
- AlicenseNot gradedqualityBmaintenanceTurns AI assistants like Claude and ChatGPT into a remote control for LG webOS smart TVs, enabling power control, volume, app launching, input switching, and more, all locally without cloud APIs.1MIT