Skip to main content
Glama

"Watch Severance." — resolves the title via JustWatch, deep-links straight into the episode on Apple TV+.

"Put the new Veritasium video on the TV." — finds it on YouTube and plays it full-screen via AirPlay.

"Turn the volume down and pause." — done.

No remote. No Siri. No cloud. Everything runs on your local network over Apple's own protocols, powered by pyatv.

TIP

"Please play Severance season 2 episode 1 on the TV."

Why this one

appletv-mcp

mcp-pyatv

mcp-tv

Home Assistant

"Watch <title>" by name (JustWatch → deep link)

manual URLs

Play any video URL / ~1,800 sites (yt-dlp → AirPlay)

YouTube by search terms

Deep links into titles (Apple TV+, Disney+, Max, Hulu, …)

manual

App deep-link catalog in docs

partial

Absolute volume 0–100, seek, repeat, shuffle

partial

AirPlay audio output routing (HomePods)

Multi-TV with per-tool targeting + self-healing IPs

partial

tvOS 26 AirPlay video push that actually works

✅ (fork pin)

No always-on automation stack required

Companion skill for non-MCP agents

appletv-remote

Related MCP server: Kodi MCP Server

Quickstart

Prerequisite: uv (brew install uv).

1. Pair (once per TV; the TV shows a 4-digit PIN twice):

git clone https://github.com/slandau3/appletv-mcp.git && cd appletv-mcp
uv run python scripts/pair.py

Credentials live owner-only (0600) in ~/.config/appletv-remote/devices.json, shared with the appletv-remote skill. Keep that file private — it grants full control of the TV.

2. Register with your MCP client:

Claude Code:

claude mcp add appletv -- uv run --directory /path/to/appletv-mcp python server.py

opencode (~/.config/opencode/opencode.json):

{
  "mcp": {
    "appletv": {
      "type": "local",
      "command": ["uv", "run", "--directory", "/path/to/appletv-mcp", "python", "server.py"],
      "enabled": true
    }
  }
}

Tools (18)

Content discovery & playback

Tool

What it does

atv_watch

Find a movie/show by name (JustWatch) and deep-link straight into it. Optional service ("netflix", "disney+", "apple tv", "max", "hulu", "prime")

atv_play

Play ANY video URL in the native system player: direct media (.mp4/.m3u8/...) or ~1,800 sites via yt-dlp (Vimeo, Dailymotion, Twitch, X, news embeds). No DRM services

atv_youtube

Play a YouTube video by URL, ID, or plain search terms. app=True opens in the YouTube app instead

atv_open_url

Open any deep link; tvOS routes it to the right app

Remote & navigation

Tool

What it does

atv_remote

26 buttons: arrows, select, menu, home, top_menu, home_hold, control_center, guide, screensaver, play/pause/play_pause/stop/next/previous, skip_forward/backward, channel up/down, volume up/down, suspend, wakeup

atv_type

Type into the focused on-screen field (optional clear first)

atv_seek

Seek to a position in seconds

Audio

Tool

What it does

atv_volume

Get volume, step up/down, or set absolute 0–100

atv_audio_outputs

List AirPlay audio outputs (HomePods) or route audio to one

atv_repeat / atv_shuffle

Repeat (off/track/all) and shuffle (off/songs/albums)

Apps & system

Tool

What it does

atv_launch_app / atv_list_apps

Launch by friendly name (netflix, disney+, max, hulu, prime video, peacock, paramount+, plex, spotify, …) or bundle id; list installed apps

atv_now_playing

Title, artist, frontmost app, position, playback state

atv_power

Sleep/wake (HDMI-CEC turns the TV off too)

atv_devices / atv_use / atv_scan

Multi-TV management: list paired TVs, set the default, scan the network

Control tools accept an optional device name to target a non-default TV.

How it works

pyatv speaks Apple's Companion protocol (remote buttons, apps, keyboard, deep links, text input) and AirPlay 2 (video push, volume, output routing). Pairing happens once via on-screen PIN; after that, every tool call is a local, encrypted, no-cloud interaction. When a TV's IP changes, the server re-finds it by its stable identifier and updates the config itself.

Notes

  • pyatv is pinned to an exact commit of an unmerged fork fixing play_url on tvOS 26 (PR #2846, issues #2821/#2774). Once merged and released, we'll switch back to stock pyatv.

  • Netflix deep links are unreliable since its Sept 2025 tvOS app update; atv_watch reports availability and you can fall back to atv_launch_app("netflix") + atv_type(...).

  • Some sites (e.g. Vimeo) bot-block yt-dlp extraction with a 403 — AirPlay from a phone/browser is the fallback.

  • JustWatch lookups default to US/en; override with ATV_JW_COUNTRY / ATV_JW_LANGUAGE.

  • Streamed URLs are IP-bound and expire (~6h) — always resolve fresh.

  • Tested on tvOS 26 (Apple TV 4K gen 3). tvOS 13+ should work.

Contributing

Issues and PRs welcome. The codebase is one readable file (server.py, ~700 lines) plus a pairing script — easy to hack on.

License

MIT — see LICENSE.

Available Tools

13 tools
atv_devicesA

List paired Apple TVs and which is the default.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It implies a read-only operation by saying 'List' but does not explicitly state that it is non-destructive or describe the return format beyond the default indication. This is adequate for a simple list but lacks richer context like pagination or structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the action ('List paired Apple TVs') and adds the key detail (default). Every word earns its place, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description fully covers what an agent needs to know to call it correctly. It states the purpose and the notable detail about default selection; the output schema handles return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and no schema properties, so there is nothing to document. The description adds no parameter information, but none is needed. Baseline for 0 parameters is 4, and the description is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and a specific resource ('paired Apple TVs'), and adds a distinguishing detail ('which is the default'). This clearly differentiates it from sibling tools like atv_remote or atv_launch_app, which control devices rather than enumerate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as atv_scan (which likely discovers devices) or atv_use (which selects a device). The description does not mention exclusions or conditions, leaving the agent to infer context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_launch_appC

Launch an app by friendly name (netflix, youtube, disney+, max, hulu, prime video, peacock, paramount+, plex, spotify, tv, music, settings, app store, ...) or by bundle identifier.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Launch an app' which implies a side effect, but it does not disclose what happens on failure (e.g., if the app is not installed), whether it waits for launch, what the response contains, or if any device-specific behaviors apply. The description provides no behavioral detail beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the primary action and provides a useful list of examples. There is no redundancy or filler; every word contributes to understanding the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has two parameters (one required, one optional with a default), no annotations, and an output schema that is not described in the text. The description fails to explain the 'device' parameter, error conditions, or any operational context (e.g., whether the device must be powered on). Relying on the output schema for return values is acceptable given it exists, but the absence of parameter guidance and exception handling makes this incomplete for a launch operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to the 'app' parameter by specifying it can be a friendly name or bundle identifier, which is helpful since schema coverage is 0%. However, it entirely ignores the 'device' parameter, leaving its purpose and default behavior undocumented. The description partially compensates for the low schema coverage but not completely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Launch' and the resource 'app', with explicit examples of friendly names and mention of bundle identifiers. It is specific about what it does, though it does not explicitly differentiate from siblings like atv_list_apps or atv_play, which could be ambiguous in some contexts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as atv_open_url or atv_play. The description only explains what the tool does, not the conditions that would make it the right choice (e.g., 'Use this to launch a specific app by its friendly name'). It neither states exclusions nor mentions prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_list_appsB

List apps installed on the Apple TV (name + bundle identifier).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full responsibility for behavioral disclosure. It describes a read-only list operation but does not explicitly state that it is side-effect free, does not mention authentication requirements, or indicate what happens if no device is specified. While not misleading, it lacks explicit 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the tool's purpose and output format. There is no extraneous information or repetition of schema details, making it appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While an output schema exists and the description mentions the output fields, the complete lack of explanation for the 'device' parameter makes the tool difficult to use correctly. The agent cannot determine how to select a specific device or whether the parameter is required for certain scenarios. The description is too sparse for a tool with an undocumented parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'device' with no description and 0% coverage. The description does not mention the device parameter at all, leaving its purpose, format, and default behavior completely undocumented. The description fails to compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('List') and resource ('apps installed on the Apple TV'), and specifies the output content (name + bundle identifier). It is easily distinguishable from sibling tools like atv_launch_app or atv_remote, which perform different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when to use it (to see installed apps), but there is no explicit guidance on when to prefer this over alternatives or any mention of prerequisite conditions. No exclusions or alternative tool names are given, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_now_playingC

What is currently playing: title, artist/app, position, and state.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits itself. It lists output fields, implying it is a read operation, but it does not explicitly state whether it modifies state, requires authentication, or how it behaves on error. The description adds minimal behavioral context beyond what the name suggests.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that fronts the purpose. It is appropriately short but lacks structure or any breakdown of parameters or usage. It is minimal but not misleading, though it omits essential details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, no output schema provided), the description should cover purpose, usage, parameters, and behavior. It covers purpose partially and output fields, but omits the device parameter, usage context, and any behavioral guarantees. For a tool with many siblings, this is insufficient for an agent to decide when and how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage for the 'device' parameter, and the description does not mention it at all. This leaves the parameter's meaning entirely unexplained. The description fails to compensate for the schema's lack of information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves current playback information and lists the specific fields (title, artist/app, position, state). It distinguishes itself from sibling tools like atv_play or atv_power by focusing on querying rather than controlling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 does not mention exclusions, prerequisites, or context that would help an agent choose between atv_now_playing and sibling tools like atv_play or atv_devices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_open_urlA

Open a deep link on the Apple TV; tvOS routes it to the app that claims it. The way to pull up a specific movie or episode directly. Working shapes: https://tv.apple.com/us/show|movie|episode/... (Apple TV+), https://www.disneyplus.com/video/, https://play.hbomax.com/ page/urn:hbo:page:, https://www.hulu.com/watch/, https://watch.amazon.com/detail?gti=, youtube://www.youtube.com/ watch?v= (may show a confirmation a human must accept). Netflix links are unreliable since its Sept 2025 app update.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full load. It discloses that tvOS routes the link, that YouTube links may require a human confirmation, and that Netflix links are unreliable since a specific update. These are meaningful behavioral caveats beyond the schema. However, it does not mention error handling or what happens when the app isn't installed, so it stops short of total transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then presents a structured list of working URL shapes. Each line serves a purpose: explaining routing, giving formats, and flagging issues. It is longer than minimal but not bloated—every sentence adds functional information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the primary use case and known reliability issues, which is good. However, it omitss any explanation of the device parameter, which is central to operating on the correct Apple TV. It also doesn't mention prerequisites (e.g., whether the app must be installed) or error behavior. Since an output schema exists, some return details are presumably covered, but the device gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It provides extensive examples for the url parameter, clarifying acceptable formats, but it says nothing about the device parameter—its purpose or how to use it. Given that the device parameter is optional but present, this is a noticeable gap that leaves the agent guessing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific action: 'Open a deep link on the Apple TV' and explains it is 'The way to pull up a specific movie or episode directly.' This distinguishes it from siblings like atv_play or atv_watch, which likely handle content differently. It also provides concrete URL patterns for multiple services, leaving no doubt about the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys the intended use case well—direct deep-link navigation—and lists supported URL shapes, which helps an agent decide when to use it. However, it does not explicitly contrast with sibling tools (e.g., 'for direct links use this, for remote control use atv_remote'), nor does it state when not to use it. It does mention limitations (Netflix unreliable), which partially covers edge cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_playA

Play any video URL on the TV in the native system player: direct media files (.mp4, .m3u8, .mov, ...) or a video page from any site yt-dlp supports (~1800: Vimeo, Twitch, X, news sites, most embed players). The stream is extracted, then queued on the TV via AirPlay — playback continues after the tool returns. DRM-protected services (Netflix, Disney+, ...) cannot be extracted; use atv_watch or atv_open_url for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the extraction-then-AirPlay flow and that playback continues after the tool returns (non-blocking). It also states DRM-protected services cannot be extracted. It does not cover error cases or timeouts, but for a media tool it gives good context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well organized: it opens with the core action, then expands on supported media types, the extraction method, the async nature, and the DRM limitation. Each sentence adds value; it could be trimmed slightly but is not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with this complexity, the description covers the key aspects: supported inputs, extraction mechanism, async behavior, and limitations with alternatives. It does not explain the device parameter, which is a notable gap. Since output schema exists, return details are unnecessary, but the missing parameter synopsis pulls the score down.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only implicitly explains the 'url' parameter by discussing supported inputs. The 'device' parameter is never mentioned, despite being optional and likely important for targeting a specific TV. The description fails to add meaning for this parameter, leaving the agent without guidance on how to use it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb-resource pair ('Play any video URL on the TV') and immediately clarifies the scope: direct media files (.mp4, .m3u8, .mov) and video pages from yt-dlp-supported sites. This distinguishes it from siblings like atv_watch and atv_open_url by specifying exactly what it handles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given: it states what it can play (media files and supported sites) and explicitly names the excluded cases (DRM-protected services) and redirects to alternatives ('use atv_watch or atv_open_url for those'). This gives the agent a clear decision path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_powerB

Power control: 'sleep' (turns off TV/AVR via HDMI-CEC) or 'wake'.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does explain the effect of each action (turning off/on) and the mechanism (HDMI-CEC), which is useful. However, it fails to disclose what happens when the 'device' parameter is omitted, whether there are side effects on other devices, error conditions, or any authentication/permission requirements. The transparency is minimal and leaves important behavioral aspects unspecified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the tool's purpose ('Power control') and immediately spells out the two actions and their outcomes. There is no wasted verbiage, and the structure is easy to scan. It could be slightly more structured (e.g., separating action descriptions), but it remains concise and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no nested objects) and presence of an output schema, the description should still cover how the optional 'device' parameter affects behavior and provide some usage context. It does not explain the device parameter at all, nor does it mention what happens when it is null. The description is adequate for the 'action' parameter but leaves the overall invocation incomplete, especially since no usage guidance is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It does explain the 'action' parameter by giving the valid values ('sleep' and 'wake') and their meanings. However, the 'device' parameter is not described at all, leaving its purpose and effect unexplained. The description partially compensates for the schema gap by clarifying the primary parameter but misses the secondary one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb-resource pair ('Power control') and enumerates the two actions ('sleep' and 'wake') with their effects (turns off/on TV/AVR via HDMI-CEC). While it doesn't explicitly contrast with siblings, the name and description make it distinct from remote control, app launching, or media playback tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool (to control power state) by listing the two possible actions and their outcomes. However, it does not mention any exclusions or alternative tools for similar purposes, nor does it advise when not to use it. There is no explicit guidance on the optional 'device' parameter or when it should be specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_remoteA

Press a remote-control button. One of: up, down, left, right, select, menu (back), home, play, pause, play_pause, stop, next, previous, volume_up, volume_down, suspend (sleep), wakeup. Never blind-press buttons to 'confirm a dialog' — you cannot see the TV screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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 discloses the action set and cautions about the lack of visual feedback, which is valuable. However, it does not explain side effects (e.g., potential to change volume, suspend, etc.), error handling for invalid actions, or whether the operation is synchronous. The warning is good, but other behavioral aspects remain opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action and list, then a concise warning. Every word earns its place. It avoids extraneous detail and is immediately scannable by an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple but has two parameters, and the description omits the 'device' parameter semantics. It also does not clarify what happens after pressing (e.g., whether there is a response or if the press is fire-and-forget). The presence of an output schema may cover return values, but the lack of device explanation and any error behavior makes the definition incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It fully enumerates valid values for the 'action' parameter, which is the required one. However, the 'device' parameter is not addressed at all; the description gives no hint about its purpose or default behavior. This partial coverage leaves a gap for the second parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Press'), a resource ('a remote-control button'), and enumerates all valid actions. This clearly distinguishes it from siblings like atv_launch_app or atv_open_url, which handle other TV control actions. An agent can immediately understand the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for controlling playback/navigation via remote buttons and offers a clear warning against blind pressing. It does not explicitly name alternative tools for other actions, but the context and sibling list make when to use this tool obvious. The warning about not seeing the TV screen provides important context for safe usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_scanA

Scan the network for Apple TVs (name, model, address).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It states the action (scan) and the output (name, model, address), but does not disclose whether the scan is read-only, requires permissions, or has any side effects on the network or devices. The description is minimal but not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence, front-loaded with the action and outcome. It avoids extraneous detail and earns its place – every word contributes to understanding the tool's function and output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, output schema present), the description covers the essential purpose and return fields. It lacks contextual details like network scope, timeouts, or permissions, but these are not critical for a basic network scan. The description is adequate for the tool's complexity, though not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there are no parameter semantics to explain. The schema is empty and the description correctly omits parameter details. The baseline of 4 applies because the absence of parameters makes the description complete on this front.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Scan'), a specific resource ('the network for Apple TVs'), and lists the output fields ('name, model, address'). This clearly distinguishes it from generic actions and provides enough specificity for an agent to understand the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus sibling tools like atv_devices or atv_use. There is no mention of alternatives, preconditions, or typical use cases, leaving the agent to infer when network scanning is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_typeB

Type text into the focused on-screen text field (e.g. a search box). The field must already be focused on screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only states the focus prerequisite and gives a minimal example. It leaves unspecified what happens if no field is focused, whether text is appended or replaces existing content, or any device parameter behavior. This is a significant gap for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action and a clarifying example. There is no wasted wording, and the critical precondition is stated succinctly. The structure is highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with an output schema (which may document return values), the description covers the core action and a key precondition. However, it omits any explanation of the 'device' parameter and error behavior when no field is focused. These are material gaps that prevent full self-contained usage, making it only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain parameters. It implies the meaning of 'text' through the action, but 'device' is completely unexplained—its purpose, whether it selects a specific Apple TV, or how it interacts with the action. The description does not compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Type text into the focused on-screen text field') with a specific verb and resource, and provides a relatable example (search box). It is distinct from sibling tools like atv_remote or atv_play, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a crucial precondition—'The field must already be focused on screen'—which guides when this tool is applicable. However, it does not explicitly mention when not to use it or point to alternatives, such as using atv_remote for remote commands. It implies usage but lacks full differentiation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_useC

Set the default Apple TV used when no device is specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states what the tool does but does not disclose any side effects, persistence of the setting, requirements (e.g., does the named device need to exist?), or error behavior. For a mutation tool that sets a default, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that is front-loaded with the core purpose and condition. It is concise without unnecessary words, though it sacrifices essential information. The structure earns its place for what it does say, but it remains under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool has only one parameter and a low complexity, the description fails to cover key aspects: it does not explain the parameter, return value, or any preconditions. The output schema exists but the description does not clarify what the tool returns or any side effects. For an agent to use this correctly, it lacks necessary context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the 'name' parameter, but it does not mention it at all. The parameter is entirely undocumented in both schema and description, leaving the agent with no clue about the expected format or meaning of 'name'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Set') on a specific resource ('default Apple TV') and explicitly scopes when it applies ('when no device is specified'). It distinguishes itself from all sibling tools, which deal with remote control, launching apps, power, scanning, etc., by its unique purpose of setting a default.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear contextual condition ('when no device is specified') but does not explicitly state when to use this tool versus alternatives or mention any exclusions. It implies the usage context but lacks guidance about alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_watchA

Find a movie or show and pull it up on the Apple TV. Searches JustWatch, picks the deep link for the requested service (e.g. 'netflix', 'disney+', 'apple tv', 'max', 'hulu', 'prime'), and opens it. Without a service, picks the first subscription-streaming offer. Region: ATV_JW_COUNTRY/ATV_JW_LANGUAGE env vars (default US/en).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
deviceNo
serviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description carries the full burden. It clearly describes the core behavior: searching JustWatch, selecting a deep link, opening it, and the fallback behavior without a service. It also discloses the region environment variables. It doesn't mention potential side effects like changing the current app or error handling, but the key behavioral traits are transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences that efficiently cover the core action, service selection, and region configuration. It front-loads the primary purpose and avoids irrelevant details. While it could be slightly more structured (e.g., bullet points), it is appropriately sized and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has three parameters and an output schema, so return values are covered by the schema. However, the 'device' parameter is completely unexplained, which is a significant gap. The description also doesn't mention error scenarios or prerequisites. For a tool that interacts with external services (JustWatch, Apple TV), more context on what to expect would improve completeness, but the main flow is described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must explain all parameters. It indirectly explains 'title' (the movie/show) and 'service' (e.g., 'netflix'), but the 'device' parameter is never mentioned or explained. There is no guidance on what values are valid for 'device' or how it affects behavior. The description partially covers 'service' but fails to define parameter semantics adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Find a movie or show and pull it up on the Apple TV.' It specifies the resource (Apple TV), the method (searches JustWatch, picks a deep link), and distinguishes itself from siblings like atv_play or atv_open_url by focusing on content search and deep-link launching. The mention of service selection further clarifies its unique role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but gives no explicit guidance on when to use it versus alternatives. It does not mention any conditions for choosing this tool over siblings like atv_launch_app or atv_play, nor does it provide any 'when not to use' advice. Usage context is only implicitly inferred from the description's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atv_youtubeA

Play a YouTube video on the TV. Accepts a URL (watch, youtu.be, shorts, embed, live), an 11-character video id, or plain search terms (the top result plays). By default plays full-screen in the system player via AirPlay. Set app=True to open in the YouTube app instead — tvOS may then show an 'Open in YouTube' confirmation that a human must accept with the physical remote.

ParametersJSON Schema
NameRequiredDescriptionDefault
appNo
queryYes
deviceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains non-obvious behaviors: 'top result plays' for search terms, the default system player via AirPlay, and the human confirmation step when app=True. It also notes the need for a physical remote, which is critical for an agent to know. This is exemplary transparency for a tool with zero annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph that front-loads the core purpose and then adds essential details. Every sentence adds value: input formats, default behavior, app alternative, and human-confirmation caveat. No fluff or repetition. It is appropriately detailed without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters and an output schema, the description covers most operational details (input formats, behavior, caveat). However, the device parameter is not mentioned, which is a critical gap since the tool likely targets a specific Apple TV. The output schema exists, so return values are covered, but the missing device semantics makes the description incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain all three parameters. It thoroughly explains 'query' (URL, ID, or search terms) and 'app' (open in YouTube app instead), but completely omits 'device'. The device parameter is left unexplained, leaving the agent without any semantic guidance. With one of three parameters undocumented, the compensation is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Play a YouTube video on the TV.' It specifies the exact resource (YouTube) and scope, and it goes into detail about accepted input formats (URL, ID, search terms). This is specific enough to distinguish it from generic siblings like atv_play or atv_open_url, even though those alternatives are not named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on how to use the tool: it explains the default behavior (full-screen via AirPlay) and the alternative when app=True. It also mentions a caveat about tvOS confirmation. However, it does not explicitly compare against sibling tools like atv_watch or atv_open_url, so the agent is left to infer when to choose this tool over others. This is clear context but missing explicit exclusions or alternative routing.

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.

  1. 13 tool updatesv0.2.0
    • First observedatv_devices
    • First observedatv_launch_app
    • First observedatv_list_apps
    • First observedatv_now_playing
    • First observedatv_open_url
    • First observedatv_play
    • First observedatv_power
    • First observedatv_remote
    • First observedatv_scan
    • First observedatv_type
    • First observedatv_use
    • First observedatv_watch
    • First observedatv_youtube

TDQS

A3.6/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target distinct actions: remote button presses, launching apps, opening deep links, searching for media, playing YouTube, playing arbitrary URLs, typing, power, and device management. Minor overlap exists between atv_remote's suspend/wakeup buttons and atv_power, and between atv_watch and atv_open_url, but the descriptions make the intended use clear.

Naming Consistency4/5

All tools share the atv_ prefix and use lowercase snake_case, which gives the set a strong sense of consistency. However, naming patterns vary: some are bare verbs (atv_watch, atv_play, atv_type, atv_use) while others are nouns (atv_remote, atv_power, atv_devices), so the style is not perfectly uniform.

Tool Count5/5

13 tools is a well-scoped set for an Apple TV control server. Each tool covers a meaningful part of the device control workflow without redundancy bloating the surface.

Completeness5/5

The server covers the full practical command surface for an Apple TV: discovering and selecting devices, remote control, app launching, deep-link opening, media search/playback, YouTube playback, typing, now-playing status, and power control. There are no obvious dead ends or missing core operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers