Skip to main content
Glama

Apple TV MCP: A local MCP server that lets AI agents control — and see — your Apple TV

Open apps, navigate tvOS, control playback, type searches, adjust volume, manage power, and take screenshots so a multimodal agent can actually inspect what happened.

You:
Open YouTube and search for OpenAI.

Agent:
→ opens YouTube
→ takes a screenshot
→ sees the current interface
→ navigates to Search
→ types "OpenAI"
→ takes another screenshot
→ verifies the results

Apple TV MCP turns your Apple TV into a locally controlled, visually observable device for MCP-capable AI agents.

No hosted backend. No custom Apple TV app. No cloud account.


Why Apple TV MCP?

Most Apple TV automation is blind.

A script can press Right or Select, but it usually has no idea what appeared on the screen afterward.

Apple TV MCP combines semantic control with point-in-time visual observation.

Traditional Apple TV automation

Apple TV MCP

Send blind remote commands

Take screenshots between actions

Build app-specific scripts

Navigate arbitrary tvOS interfaces

Guess whether an action worked

Inspect the screen and verify

Custom integration per AI system

Standard MCP tool interface

Remote commands only

Apps, playback, text, power, volume, navigation, and vision

The result is a feedback loop an AI agent can actually use:

screenshot
    ↓
model sees tvOS
    ↓
chooses an action
    ↓
press / type / open
    ↓
screenshot again
    ↓
verify

Semantic tools are still preferred whenever possible. Screenshots make the difference when the task requires navigating an interface that does not expose a direct API.


Related MCP server: @qirabot/mcp

Install in seconds

Apple TV MCP requires Python 3.14.

uv tool install appletv-mcp

Or:

pipx install appletv-mcp

Then pair your Apple TV:

atvremote wizard

Configure Apple TV MCP:

appletv-mcp configure

Check the setup:

appletv-mcp doctor

And start the MCP server:

appletv-mcp serve

From source

git clone https://github.com/trevor-nichols/appletv-mcp.git
cd appletv-mcp
uv sync --locked
uv run appletv-mcp configure
uv run appletv-mcp doctor
uv run appletv-mcp serve

What can it do?

Apple TV MCP exposes fourteen tools grouped around what an agent actually wants to accomplish.

See

  • Take a screenshot of the current Apple TV screen

  • Read device, connection, playback, and media state

  • Inspect available Apple TV capabilities

Apps

  • List installed applications

  • Open an application by name

  • Open an application by bundle identifier

  • Open deep links and custom application URLs

Navigate

  • Up

  • Down

  • Left

  • Right

  • Select

  • Back

  • Home

  • Menu

  • Other supported remote actions

Remote navigation is intentionally treated as non-idempotent. Apple TV MCP does not blindly replay navigation commands after an uncertain connection failure.

Playback

  • Play

  • Pause

  • Toggle play/pause

  • Stop

  • Next

  • Previous

  • Seek to an absolute position

  • Skip forward or backward

Text

Type directly into a focused tvOS text field.

This is useful for:

  • Search

  • Usernames

  • App navigation

  • Query entry

Volume

  • Read volume when available

  • Set an absolute volume level

  • Adjust volume relatively

Power

  • Turn the Apple TV on

  • Turn the Apple TV off

Power operations use different retry semantics so a reconnect attempt cannot accidentally wake a device immediately after a successful power-off command.


Give your agent eyes

The optional screenshot backend is what makes Apple TV MCP more than a remote control.

The MCP tool:

apple_tv_screenshot

returns the current Apple TV screen as native MCP image content.

That means a multimodal MCP client can call the tool and inspect the returned image directly.

For example:

Agent:
apple_tv_screenshot()

→ sees the Apple TV Home Screen
→ sees YouTube highlighted

apple_tv_press(button="select")

apple_tv_screenshot()

→ sees the YouTube interface

The model does not need access to a local screen.png path and does not receive base64 inside a text response.

The PNG itself is returned through MCP.

Screenshots are point-in-time

Apple TV MCP does not continuously watch the screen.

A screenshot describes what was rendered at the moment it was captured.

If the agent performs another action afterward, the previous screenshot may already be stale.

The intended pattern is:

observe
→ act
→ observe
→ verify

Enable screenshots

Screenshot support is optional.

Apple TV control continues to work normally without it.

Install the separate helper:

uv tool install appletv-screenshot

The screenshot system uses a separate Apple developer / RemoteXPC pairing from the pairing used by pyatv.

Pair for developer access:

pymobiledevice3 remote pair

Then configure the screenshot helper for one Apple TV:

appletv-screenshot configure --udid <UDID>

Verify everything together:

appletv-mcp doctor

A healthy installation will report both Apple TV control and screen capture.

The screenshot helper has its own configuration, dependencies, and lifecycle. pymobiledevice3 is not imported by the main appletv-mcp package.

For deeper screenshot setup and transport troubleshooting, see:

sidecars/appletv-screenshot/README.md

Quick start

The complete happy path is:

# Install
uv tool install appletv-mcp

# Pair for Apple TV control
atvremote wizard

# Choose the Apple TV
appletv-mcp configure

# Optional: install visual observation
uv tool install appletv-screenshot

# Optional: developer pairing for screenshots
pymobiledevice3 remote pair
appletv-screenshot configure --udid <UDID>

# Verify
appletv-mcp doctor

# Run the MCP server
appletv-mcp serve

Connect your MCP client

Apple TV MCP uses local stdio MCP transport.

Any MCP client capable of launching a local stdio server can use it.

A typical configuration looks like:

{
  "mcpServers": {
    "appletv-mcp": {
      "command": "appletv-mcp",
      "args": ["serve"]
    }
  }
}

If Apple TV MCP is running from a cloned repository instead:

{
  "mcpServers": {
    "appletv-mcp": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/appletv-mcp",
        "run",
        "appletv-mcp",
        "serve"
      ]
    }
  }
}

The server does not expose an HTTP endpoint and does not require OAuth.


Tools

Tool

Purpose

apple_tv_status

Read structured device and playback state

apple_tv_capabilities

Inspect normalized feature availability

apple_tv_list_apps

List launchable applications

apple_tv_power

Turn the Apple TV on or off

apple_tv_open_app

Open an application

apple_tv_open_url

Open a URL or deep link

apple_tv_press

Press Apple TV remote buttons

apple_tv_playback

Control playback

apple_tv_seek

Seek to an absolute playback position

apple_tv_skip

Skip forward or backward

apple_tv_set_text

Replace focused keyboard text

apple_tv_set_volume

Set an absolute volume

apple_tv_adjust_volume

Adjust volume relatively

apple_tv_screenshot

Return one screenshot as MCP image content

The screenshot tool is the only tool that returns image content rather than a structured result.


How it works

Apple TV MCP keeps control and visual observation intentionally separate.

                         AI Agent
                            │
                            ▼
                      Apple TV MCP
                      /           \
                     /             \
                    ▼               ▼
              semantic control   screen capture
                    │               │
                  pyatv      appletv-screenshot
                    │               │
                    │         pymobiledevice3
                    │               │
                    │          RemoteXPC / DVT
                    │               │
                    └──── Apple TV ─┘

Control

Apple TV control is provided through pyatv.

Apple TV MCP adds a semantic application layer on top for:

  • deterministic app resolution

  • capability checking

  • connection lifecycle

  • safe retry behavior

  • non-idempotent command protection

  • normalized MCP results

The stable Apple TV identifier is authoritative.

The last known IP address is only an optimization. If the Apple TV changes addresses, Apple TV MCP can rediscover it by identifier and update the preferred host.

Vision

Screenshots use the separate appletv-screenshot helper.

The helper uses pymobiledevice3 to reach Apple's developer services over RemoteXPC and request a screenshot through DVT.

Its default transport strategy is:

macOS:
native → userspace → tunneld

Linux / Windows:
userspace → tunneld

The normal Wi-Fi userspace path does not require root or a permanently running tunnel daemon.

The helper exists as a separate process so its protocol stack, dependencies, pairing records, and failure modes remain isolated from Apple TV control.

pymobiledevice3 is confined to the separately distributed appletv-screenshot helper. The main appletv-mcp package does not import or bundle it; the two processes communicate through a narrow command-line/file contract.


Designed for agents

The MCP interface intentionally exposes semantic operations rather than raw Apple protocols.

An agent should think:

open YouTube
pause playback
seek to 2:00
type "Severance"
set volume to 35%
take a screenshot

not:

send Companion command
call MRP endpoint
construct RemoteXPC request

When a semantic operation exists, use it.

Visual navigation is the fallback for interfaces that require it.


Privacy and security

Apple TV MCP is designed to remain local.

  • No hosted Apple TV MCP backend

  • No cloud account

  • MCP uses local stdio transport

  • Apple TV pairing credentials stay on the user's machine

  • RemoteXPC pairing records stay with the screenshot helper

  • Credentials are never MCP parameters

  • Credentials are never returned to the model

  • Keyboard text is not emitted into normal logs

  • Screenshots are captured only when explicitly requested

  • Screenshot bytes are not logged

  • Screenshots are stored only in a private temporary directory during capture

  • Temporary screenshot files are deleted after the MCP result is created

  • Screenshot capture does not run automatically after commands

  • The helper is launched without a shell

  • No DRM circumvention is attempted

Debug mode also keeps raw pyatv protocol logging disabled because low-level Companion traffic can contain sensitive keyboard and pairing payloads.


Protected video

Streaming applications may protect video using DRM.

In that case, screenshots can contain:

black video
blank video
redacted video

while menus or playback controls remain visible.

That is expected.

Apple TV MCP does not interpret a black protected video region as proof that:

  • playback failed

  • the Apple TV turned off

  • screenshot capture failed

and it does not attempt to bypass DRM.


Limitations

Apple TV MCP intentionally has a narrow initial scope.

One Apple TV

Each server configuration controls one Apple TV.

Multi-device routing is not currently part of the public MCP interface.

Screenshots are not video

apple_tv_screenshot captures one frame at a time.

There is no:

  • continuous stream

  • background screen monitoring

  • screen recording

  • automatic screenshot loop

Focus is visual, not semantic

pyatv does not provide a universal signal for the currently highlighted tvOS element.

An agent can use screenshots to infer focus where appropriate.

media_app is not foreground_app

Apple TV status may identify the application associated with current media metadata.

That does not independently guarantee which application is visually in the foreground.

Apple developer services can change

Screenshot support relies on Apple developer protocols exposed through pymobiledevice3.

tvOS changes may require future compatibility updates.

Screenshot support is optional

Every non-screenshot Apple TV MCP tool works without the screenshot helper installed.


Configuration

Apple TV MCP stores application configuration in the platform-standard config directory.

Typical settings include:

{
  "device_identifier": "...",
  "device_name": "Living Room",
  "preferred_host": "192.168.1.10",
  "scan_timeout_seconds": 5.0,
  "command_timeout_seconds": 15.0,
  "screen_capture": {
    "command": "appletv-screenshot",
    "timeout_seconds": 20.0,
    "max_image_bytes": 33554432
  }
}

Pairing credentials are not stored in this file.

If an MCP host launches processes with a minimal PATH, set screen_capture.command to the absolute path of the screenshot helper.

Existing configuration files from Apple TV MCP v0.1 remain compatible.


Doctor

Run:

appletv-mcp doctor

to diagnose the complete installation.

It checks areas such as:

configuration
pyatv storage
Apple TV discovery
stable device identity
connection
capabilities
screenshot helper
screenshot helper contract
screen-capture target
real screenshot capture

Screenshot support is optional.

If the helper is not installed, Doctor reports it as skipped rather than treating Apple TV control as broken.


Troubleshooting

Apple TV not found

Confirm:

  • the Apple TV is powered on

  • the computer and Apple TV are on the same local network

  • atvremote wizard completed successfully

Then rerun:

appletv-mcp configure
appletv-mcp doctor

Apple TV IP changed

That is expected.

Apple TV MCP identifies the configured device by its stable identifier rather than trusting an old IP address.

App will not open

Use:

apple_tv_list_apps

to see the applications currently exposed by the device.

Application-name matching is deterministic rather than fuzzy.

Text entry fails

A text field must already be focused on the Apple TV.

Screenshot helper not found

Install it:

uv tool install appletv-screenshot

or configure Apple TV MCP with its absolute path.

Screenshot target is not configured

Run:

appletv-screenshot configure --udid <UDID>

Screenshot pairing fails

Developer screenshot pairing is separate from atvremote.

Run:

pymobiledevice3 remote pair

Screenshot is black

Protected content may intentionally hide its video frame.

Try opening a tvOS menu or application interface and capture again.


Development

Clone the repository:

git clone https://github.com/trevor-nichols/appletv-mcp.git
cd appletv-mcp

Install:

uv sync --locked

Run the complete root quality gate:

uv run ruff check .
uv run ruff format --check .
uv run pyright
uv run pytest
uv build

The screenshot helper is a separate Python project:

cd sidecars/appletv-screenshot
uv sync --locked
uv run ruff check .
uv run ruff format --check .
uv run pyright
uv run pytest

The root package deliberately does not depend on or bundle pymobiledevice3.


Live tests

Normal tests use fakes and do not require Apple hardware.

Read-only Apple TV integration tests are explicitly opt-in:

APPLE_TV_INTEGRATION_TESTS=1 uv run pytest -m live

Tests that can change Apple TV state require an additional opt-in:

APPLE_TV_INTEGRATION_TESTS=1 \
APPLE_TV_LIVE_WRITES=1 \
uv run pytest -m live

Never enable the live-write suite against a device you do not intend to control.


Contributing

Contributions are welcome.

Before opening a pull request:

uv run ruff check .
uv run ruff format --check .
uv run pyright
uv run pytest
uv build

If your change affects the screenshot helper, run its independent quality gate as well.

Please preserve the project's core architecture:

control      = pyatv
observation  = external screenshot helper
MCP          = semantic interface presented to the agent

Avoid exposing raw Apple protocol details through the MCP contract unless there is a clear semantic reason.


License

This repository contains two separately distributed components.

Apple TV MCP

appletv-mcp is licensed under the MIT License.

It does not import, bundle, or distribute pymobiledevice3.

Apple TV Screenshot

The optional appletv-screenshot helper under sidecars/appletv-screenshot/ is licensed under GPL-3.0-or-later.

The helper directly uses pymobiledevice3, which is also licensed under GPL-3.0-or-later.

The two components communicate through a one-shot subprocess interface.

See LICENSING.md for the repository-wide map.


Built for a simple idea

AI agents are much more useful when they can verify the effects of their actions.

Apple TV MCP gives them both sides of that loop:

control the Apple TV
        +
see the Apple TV

So instead of blindly pressing buttons, an agent can interact with tvOS, inspect the result, and decide what to do next.

Available Tools

14 tools
apple_tv_adjust_volumeA

Nudge volume up or down. Relative steps are not retried after uncertain failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNoNumber of relative volume steps.
directionYesRelative volume direction.

Output Schema

ParametersJSON Schema
NameRequiredDescription
directionYes
volume_percentNo
completed_stepsYes
requested_stepsYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing retry semantics ('Relative steps are not retried after uncertain failure'), which the agent cannot learn from the annotations.

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 short sentences with no waste; the core relative-adjustment purpose is front-loaded and the retry caveat follows immediately.

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 two-parameter tool with full schema coverage, a complete annotation set, and an output schema, the description is nearly sufficient. The only omission is an explicit pointer to apple_tv_set_volume for absolute volume changes.

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 description coverage is 100%, so both the 'steps' and 'direction' parameters are already documented in the schema, setting the baseline at 3. The description's phrase 'Relative steps' reinforces the semantics but adds no range, default, or format detail beyond the schema.

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?

States a specific verb+resource ('Nudge volume up or down') and makes the relative nature of the operation clear, distinguishing it in spirit from the absolute-scaling sibling apple_tv_set_volume. However, it never names that sibling, so the differentiation relies on the agent inferring 'nudge' vs 'set'.

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?

Usage is implied by 'Nudge' and 'Relative steps', which suggests this is for incremental changes rather than absolute levels, but there is no explicit when-to-use statement or mention of apple_tv_set_volume as the alternative for setting a specific level.

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

apple_tv_capabilitiesA
Read-only

Return current availability of semantic Apple TV operations.

Values are available, unknown, unavailable, or unsupported. This is not a screenshot or UI-hierarchy dump.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextYes
playYes
seekYes
stopYes
pauseYes
toggleYes
power_onYes
previousYes
text_setYes
list_appsYes
power_offYes
volume_upYes
launch_appYes
volume_getYes
volume_setYes
navigate_upYes
volume_downYes
skip_forwardYes
navigate_backYes
navigate_downYes
navigate_homeYes
navigate_leftYes
skip_backwardYes
keyboard_focusYes
navigate_rightYes
navigate_selectYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the bar is lowered. The description adds genuine value beyond them by enumerating the possible availability states (available, unknown, unavailable, unsupported) and clarifying the output scope as semantic rather than a raw UI dump.

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?

Three short sentences, front-loaded with the core purpose and each sentence earning its place: the enumeration clarifies return semantics and the final sentence blocks a plausible misreading. No filler.

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?

With an output schema present, the description needn't explain return structure, and zero parameters removes schema burden. The description is complete for a read-only capability probe, though a brief note on when to prefer it over apple_tv_status would fully close the gap.

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 takes zero parameters, so there are no parameter semantics to document; per the rubric this sets a baseline of 4. The description correctly adds no misleading parameter 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?

States a specific verb and resource ('Return current availability of semantic Apple TV operations') and explicitly differentiates from sibling-style tools by declaring 'This is not a screenshot or UI-hierarchy dump.' An agent can immediately tell this is a capability-discovery tool distinct from apple_tv_screenshot and apple_tv_status.

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 negative framing ('not a screenshot or UI-hierarchy dump') implies when this tool is preferable, but there is no explicit when-to-use statement or guidance on querying it before attempting other operations. Usage is implied rather than stated.

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

apple_tv_list_appsA
Read-only

List launchable applications installed on the Apple TV.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional case-insensitive substring filter for name or bundle ID.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, covering the safety profile. The description adds little beyond that, only clarifying the scope to 'launchable' applications; it does not mention pagination, rate limits, or other behavioral traits. With annotations carrying the main burden, this is minimally viable.

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 sentence that is front-loaded and contains no wasted words. It efficiently conveys the essential purpose.

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?

For a simple list tool with an optional filter, the description is complete enough: the output schema handles return values, the input schema documents the query parameter, and the annotations cover safety. No critical information for invoking the tool is missing.

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 description coverage is 100%, so the single query parameter is fully documented in the schema. The description does not add any meaning beyond what the schema provides, which is appropriate given the baseline for high coverage.

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 states a specific verb (list) and resource (launchable applications installed on the Apple TV), clearly distinguishing it from siblings like apple_tv_open_app. However, it does not explicitly name or contrast with any alternative tool, so it falls short of the top score.

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 gives no guidance on when to use this tool versus alternatives such as apple_tv_status or apple_tv_capabilities. While the purpose implies a straightforward listing operation, no explicit context, prerequisites, or exclusions are provided.

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

apple_tv_open_appA
Idempotent

Launch an installed application by exact bundle ID or exact display name.

Matching is deterministic. Typos do not auto-launch a similar application.

ParametersJSON Schema
NameRequiredDescriptionDefault
appYesExact bundle identifier, or exact application display name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNo
launchedYes
bundle_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the safety profile (non-readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuine behavioral context beyond annotations by stating matching is deterministic and typos will not auto-launch a similar app, clarifying the failure mode.

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 short sentences, front-loaded with the core action and the exact-matching constraint. Every sentence earns its place with no filler.

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?

An output schema exists so return values need not be explained, and annotations cover the safety profile. The description contributes the key determinism behavior, though it could mention prerequisites such as resolving the app via apple_tv_list_apps.

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 100% and the single parameter is fully documented in the schema itself. The description restates 'exact bundle ID or exact display name' but adds no syntax or format detail beyond that, so the baseline 3 applies.

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?

States a specific verb ('Launch') and resource ('an installed application'), which cleanly distinguishes it from siblings like apple_tv_open_url (URLs) and apple_tv_list_apps (enumeration). It does not explicitly name a sibling to route against, so it falls just short of the top mark.

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 implies when to use it (launching an installed app) but gives no explicit when/when-not guidance or pointers to alternatives such as using apple_tv_list_apps first to resolve a valid bundle ID. Usage context is only implied.

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

apple_tv_open_urlA

Ask the Apple TV to open a URL or application deep link.

A successful result means the launch request was accepted. It does not prove that a specific screen or item is visible. Deep links are not retried after uncertain delivery because they may start playback or other side effects.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesApplication URL or deep link, including custom schemes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
acceptedYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations mark this as non-read-only, non-idempotent, and non-destructive, and the description adds genuinely useful context beyond that: a success only means the launch request was accepted, not that a screen is visible, and uncertain deliveries are deliberately not retried because of playback side effects. That side-effect and retry-semantics disclosure is exactly the kind of behavioral detail annotations cannot carry.

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?

Three short sentences, front-loaded with the action and followed by the two caveats that matter. No filler, though the sentences are line-broken in a way that reads slightly disjointed rather than as a single tight block.

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?

An output schema exists, so return values need no explanation, and the description correctly manages expectations about what success means. The one remaining gap is the absence of any pointer to apple_tv_open_app for the non-deep-link case, which matters in a 13-tool sibling set.

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 description coverage is 100% and the single url parameter is documented as accepting custom schemes. The description adds no format examples or scheme constraints beyond the schema, so the baseline of 3 applies.

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?

States a specific verb and resource (open a URL or application deep link on the Apple TV), which is unambiguous on its own. It does not explicitly contrast itself with the adjacent sibling apple_tv_open_app, so an agent must infer the URL-vs-app distinction from the parameter name alone.

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?

There is no explicit when-to-use, when-not-to-use, or named alternative. The note about deep links not being retried is a behavioral caveat rather than routing guidance, and the agent is never told to prefer apple_tv_open_app for plain app launches.

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

apple_tv_playbackB

Control playback with play, pause, toggle, stop, next, or previous.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesSemantic playback action. toggle/next/previous are not retried.

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes
acceptedYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds no behavioral context beyond the action list; the useful 'toggle/next/previous are not retried' note lives in the schema, not the description, so nothing here enriches the annotation coverage.

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?

A single front-loaded sentence that names the resource and lists the actions with zero wasted words.

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?

An output schema exists so return values need not be explained, and a 1-param tool is inherently simple. But the omission of sibling differentiation (especially versus apple_tv_skip) leaves a real navigational gap for an agent choosing among 14 playback-related tools.

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 description coverage is 100% and the enum parameter is fully documented in the schema, so the baseline is 3. The description merely restates the same enum values, adding no syntax, ordering, or semantic detail beyond the schema.

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?

States a specific verb ('Control playback') and enumerates the six actions, so an agent knows exactly what it does. However, it does not differentiate from siblings like apple_tv_skip, which overlaps with the 'next'/'previous' actions, leaving ambiguity between tools.

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 lists allowed actions but gives no when-to-use guidance, no conditions selecting this tool over alternatives, and no exclusions. The overlap with apple_tv_skip is left unresolved, so the agent must infer when this tool is appropriate.

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

apple_tv_powerB

Turn the Apple TV on or off and report the observed power state.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesRequested power state.

Output Schema

ParametersJSON Schema
NameRequiredDescription
power_stateYes
requested_stateYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent operation, so the safety profile is covered. The description adds that it reports the observed power state, but says nothing about whether it waits for the state to settle, what happens on failure, or any device-permission requirements.

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?

A single front-loaded sentence with no filler; the action and the reporting behavior are both stated economically and nothing is padded.

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?

An output schema exists, so return values need not be spelled out, and the lone parameter is fully documented. The definition is nearly sufficient, with the only gap being the absence of any note on how the observed state is confirmed or what failure looks like.

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 description coverage is 100% and the single 'state' parameter is documented with a PowerTarget type. The description's 'on or off' mirrors the enum rather than adding new meaning, so baseline 3 applies.

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?

Specific verb+resource: it sets the Apple TV power state and reports the observed result, which is clear and distinct from the sibling apple_tv_status (read-only) and playback/volume tools. It does not, however, explicitly name or contrast itself with apple_tv_status, so an agent must infer the boundary.

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?

There is no when-to-use/when-not guidance and no pointer to apple_tv_status for reading only. Usage is only implied by the 'on or off' phrasing, leaving the agent to guess whether this is preferable to apple_tv_status for state queries.

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

apple_tv_pressA

Press a remote button. Navigation is non-idempotent.

The press itself has no visual feedback and does not report which UI element has focus. Use apple_tv_screenshot separately when visible UI state needs to be inspected or verified. Uncertain transport failures are not retried automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of sequential presses.
actionNoTap, double-tap, or hold.tap
buttonYesRemote button to press.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
actionYes
buttonYes
completedYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare idempotentHint=false and readOnlyHint=false, but the description adds genuinely new context: presses have no visual feedback, do not report focus, and are not auto-retried on uncertain failures. That is material for an agent planning a navigation sequence.

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?

Front-loaded purpose followed by behavioral caveats and an alternative tool, with no filler. The two sentences about lacking visual feedback and not reporting focus overlap slightly, but overall it is tight.

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?

With an output schema present and annotations covering the safety profile, the description need not explain return values; it instead supplies the operational caveats (no focus reporting, no retries) an agent needs. What remains unstated is how the non-idempotent navigation interacts with the count parameter.

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 description coverage is 100% with documented count, action, and button fields, so the schema already carries parameter meaning. The description adds nothing about button/action semantics beyond what is in the schema, making 3 the appropriate baseline.

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?

States a specific verb and resource ('Press a remote button'), which is unambiguous and distinct from the playback/seek/skip siblings. It does not, however, enumerate the button set in prose, leaving that to the schema.

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?

Explicitly routes the agent to apple_tv_screenshot when visible UI state must be inspected or verified, and warns that uncertain transport failures are not retried automatically. It gives no guidance on when to prefer other navigation siblings (seek, skip, playback) over pressing.

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

apple_tv_screenshotA
Read-onlyIdempotent

Capture the Apple TV screen as one PNG image.

The image is point-in-time evidence of what the Apple TV rendered when the capture ran. It may be stale after any later action; capture again to verify. Protected DRM video can appear black while surrounding UI stays visible; a black region alone does not mean the TV is off or playback failed. Requires the optional screen-capture helper; without it the tool reports that screen capture is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds real behavioral context beyond them: the capture is a frozen snapshot that can go stale, DRM-protected video may render black while surrounding UI stays visible, and the tool depends on an optional screen-capture helper whose absence is reported rather than silently failing. These are exactly the caveats an agent needs to interpret results.

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 primary action is front-loaded in the first sentence, and the following sentences each cover a distinct failure/interpretation case (staleness, DRM black regions, missing helper). It is mildly longer than strictly necessary for a no-argument tool, but no sentence is filler.

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 no output schema, the description carries the return-value burden well by stating the result is a single PNG and by pre-empting the two most likely misreadings (stale capture, black DRM region). It also discloses the helper dependency, so an agent knows what an unavailable-capture response means.

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 takes zero parameters and schema coverage is 100%, so per the baseline no parameter guidance is required. The description correctly adds nothing about arguments and instead spends its words on output interpretation.

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 first sentence states a specific verb and resource ('Capture the Apple TV screen') plus the output form ('one PNG image'), which is unique among siblings that otherwise control playback, volume, power, or apps. An agent can distinguish it from every sibling without opening a schema.

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 supplies clear usage context: 'point-in-time evidence of what the Apple TV rendered when the capture ran' and 'capture again to verify' after later actions. It does not name an alternative tool or state when-not to use it, but with no sibling offering similar functionality there is little to exclude.

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

apple_tv_seekB
Idempotent

Seek to an absolute playback position in seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
position_secondsYesAbsolute playback position in seconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
acceptedYes
requested_position_secondsYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, covering the safety profile. The description adds the useful 'absolute position' framing versus relative seeks, but does not say whether the video must be playing, whether seeking preserves play state, or anything beyond the schema.

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?

A single tightly-scoped sentence with zero filler, and the key concept ('absolute') is front-loaded.

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 single-parameter tool with full schema coverage, an output schema, and safety annotations, the definition is nearly sufficient. The main missing piece is routing versus the relative apple_tv_skip sibling, but no return-value explanation is needed given the output schema.

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 description coverage is 100%, so the single parameter is already documented with type, minimum, and meaning. The description merely restates the schema's 'Absolute playback position in seconds' phrasing and adds no new semantics.

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?

States a specific verb (seek) and resource (playback position) plus the unit (seconds). It distinguishes itself from the relative-motion sibling apple_tv_skip by specifying 'absolute', though it doesn't name that sibling explicitly.

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?

There is no explicit when-to-use guidance and no mention of the alternative apple_tv_skip for relative seeking. The agent must infer that 'absolute' position implies this over the relative skip tool.

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

apple_tv_set_textA
Idempotent

Replace text in a focused Apple TV text field.

Requires an active virtual keyboard. An empty string clears the field.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesReplacement text for the focused field. Empty string clears it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
acceptedYes
charactersYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare it non-read-only, idempotent and non-destructive; the description adds genuine context beyond that by stating the virtual-keyboard precondition and that an empty string clears the field — a behavior an agent could otherwise trigger by accident. It does not say what happens if no keyboard is focused (error vs no-op).

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 short sentences, front-loaded with the action, followed by the precondition and the edge case. No filler.

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?

An output schema exists, so return values need not be described, and the mutation semantics, precondition and empty-string behavior are covered. The only real gap is failure behavior when the precondition is unmet.

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 100% for the single parameter, and the property description already says 'Empty string clears it.' The description restates that same fact rather than adding format or length constraints, so the schema is doing the work.

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?

States a specific verb and resource ('Replace text in a focused Apple TV text field'), making it immediately distinguishable from the press/seek/playback siblings. An agent can tell this is the text-entry tool without reading any schema.

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?

Gives a clear precondition for use ('Requires an active virtual keyboard') and the edge-case semantic for an empty string. It does not name an alternative (e.g. apple_tv_press for individual key presses), so it stops short of full routing guidance.

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

apple_tv_set_volumeA
Idempotent

Set absolute volume percent when the device supports volume control.

ParametersJSON Schema
NameRequiredDescriptionDefault
percentYesAbsolute volume percent from 0 to 100.

Output Schema

ParametersJSON Schema
NameRequiredDescription
volume_percentNo
requested_percentYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare this is a non-destructive, idempotent write (readOnlyHint=false, idempotentHint=true, destructiveHint=false), consistent with setting an absolute value. The description's added value is the capability precondition ('when the device supports volume control'), but it says nothing about failure behavior when unsupported or whether the call blocks.

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?

A single efficient sentence with the operation front-loaded and the capability condition trailing. Nothing is wasted, though it is arguably a touch sparse for a routing-sensitive volume tool.

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?

With a simple one-parameter schema, an output schema present, and annotations covering the safety profile, the description supplies the essential capability caveat. The only meaningful omission is disambiguation from apple_tv_adjust_volume.

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 100% and the single parameter is fully documented with a 0-100 range and 'Absolute volume percent' description. The tool description adds no syntax, unit, or boundary detail beyond what the schema already provides, so the baseline 3 applies.

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 states a specific verb and resource ('Set absolute volume percent'), immediately conveying the operation. 'Absolute' implicitly contrasts with the relative sibling apple_tv_adjust_volume, but that sibling is never named, so an agent must infer the distinction itself.

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?

It gives one condition for use ('when the device supports volume control'), which is useful gating context. However, it never names apple_tv_adjust_volume as the alternative for relative changes, leaving the key routing decision (absolute vs. relative volume) to inference.

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

apple_tv_skipA

Skip forward or backward. Relative skips are not retried after uncertain failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsNoSkip interval in seconds. Zero lets the device choose its default.
directionYesSkip direction.

Output Schema

ParametersJSON Schema
NameRequiredDescription
acceptedYes
directionYes
requested_secondsYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=false and idempotentHint=false, but the description adds a genuinely non-obvious trait: relative skips are not retried after uncertain failure. That retry/failure semantic is not derivable from the annotations or schema and materially affects how an agent should handle errors.

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 short sentences, purpose front-loaded and the caveat second. No wasted words.

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?

An output schema exists, so return values need not be explained, and the retry caveat covers the main behavioral risk. However, with apple_tv_seek as a direct sibling, the definition never clarifies which one to call, leaving a real routing gap.

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 description coverage is 100%, so both parameters are already documented, including that seconds=0 lets the device pick a default. The description adds no syntax or constraint detail beyond the schema, so the baseline 3 applies.

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 names a specific verb+resource ('Skip forward or backward') and the phrase 'Relative skips' signals this is a relative-position operation. It does not explicitly name apple_tv_seek as the absolute-position alternative, so the sibling distinction is only implied.

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?

There is no explicit when-to-use guidance and no mention of apple_tv_seek, the obvious alternative for absolute jumps. The agent must infer the relative-vs-absolute split from the word 'Relative' alone.

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

apple_tv_statusA
Read-only

Read current device, power, playback, volume, and keyboard state.

media_app is the application associated with currently playing media, not a guaranteed foreground or visible application. Status does not capture the screen; use apple_tv_screenshot to inspect what is currently rendered.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
deviceYes
playbackNo
media_appNo
connectionYes
power_stateNo
keyboard_focusNo
volume_percentNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real behavioral context beyond them by stating that media_app does not guarantee foreground/visible application and that status does not capture the screen. It does not describe refresh timing or determinism of the snapshot, which would be the next useful detail.

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?

Front-loads what is read in the first clause, then spends the remaining two sentences on the two cases most likely to cause misuse (media_app semantics, screen capture). No filler.

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?

An output schema exists, so return-value documentation is not required, and the description covers purpose, one clear alternative, and the key field caveat. It stops short of stating the freshness/cost of the read or how it relates to the other state-mutating siblings, which is a minor gap.

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 takes zero parameters, so the baseline is 4. The description still adds meaning about a returned field (media_app), which is more than the empty input schema conveys.

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?

States a specific verb (Read) and resource (current device/power/playback/volume/keyboard state), and enumerates the state domains covered so an agent can distinguish it from apple_tv_power, apple_tv_playback, or apple_tv_set_volume. It explicitly names apple_tv_screenshot as the sibling for a different need.

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?

Gives a clear when-to-use-else clause: for rendered screen content, use apple_tv_screenshot instead. It also clarifies that media_app is not a foreground-app indicator, steering the agent away from a wrong inference. It does not cover the other read-ish siblings (capabilities, list_apps), but the main boundary is drawn.

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. 14 tool updatesv0.2.0
    • First observedapple_tv_adjust_volume
    • First observedapple_tv_capabilities
    • First observedapple_tv_list_apps
    • First observedapple_tv_open_app
    • First observedapple_tv_open_url
    • First observedapple_tv_playback
    • First observedapple_tv_power
    • First observedapple_tv_press
    • First observedapple_tv_screenshot
    • First observedapple_tv_seek
    • First observedapple_tv_set_text
    • First observedapple_tv_set_volume
    • First observedapple_tv_skip
    • First observedapple_tv_status

TDQS

A3.7/5.0

Scored across 14 tools

Disambiguation4/5

Most tools target clearly distinct actions (power, list_apps, open_app, press, screenshot). There is minor overlap between apple_tv_playback (play/pause/next/previous) and apple_tv_skip (relative forward/back) and between apple_tv_seek (absolute) and apple_tv_skip (relative), but the descriptions explicitly distinguish absolute vs relative and idempotency, so selection is resolvable.

Naming Consistency4/5

All tools share the apple_tv_ prefix, giving a strong namespace. The suffixes mix verbs (seek, press, skip) with nouns (status, capabilities, power, playback, screenshot), which is slightly less uniform than a strict verb_noun scheme but remains readable and internally consistent.

Tool Count5/5

14 tools is well-scoped for a full device-control surface, with each tool earning its place across power, app launch, navigation, playback, volume, text entry, and screen capture. Nothing feels redundant or padded.

Completeness4/5

The surface covers the key lifecycle: status/capabilities discovery, power, app listing/launch, playback control, volume, text input, and screenshot verification. Minor gaps exist (e.g. no read-back of focused text field contents or current playback position), but agents can work around these via status/capabilities.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to develop, test, and certify Roku applications by providing direct control over device functions like app deployment, remote input, and SceneGraph inspection. It supports automated workflows including real-time log collection, media monitoring, and certification verification.
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to control mobile and desktop devices with natural language, including running automation tasks, taking screenshots, and managing devices.
    6
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to inspect and control Roku devices—query UI elements, send remote input, launch channels, and run tests—using the Model Context Protocol or a CLI.
    9
    4
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to control Android TV/Android devices through ADB, including screen capture, remote control, app management, and more.
    24
    44
    MIT