samsung-tv-mcp
Allows AI agents to control a Samsung Tizen smart TV on the local network, including power state, volume, remote key presses, text input, app listing/launching, and pairing.
Provides a tool to open YouTube on the TV and play a specified video from a YouTube URL (watch, youtu.be, shorts, embed) or video ID.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@samsung-tv-mcpturn on the living room TV and play lo-fi beats on YouTube at volume 15"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
samsung-tv-mcp
An MCP server that lets AI agents control a Samsung Tizen smart TV on your local network: power, volume, remote keys, text input, apps and YouTube videos.
You: put lo-fi beats on the living room TV, not too loud
Claude: tv_status → standby
tv_power {on: true}
tv_play_youtube {video: "jfKfPfyJRdk"}
tv_set_volume {level: 15}It talks to the TV directly over its local APIs. No cloud account, no SmartThings, no hub.
Tools
Tool | What it does |
| Power ( |
| On (Wake-on-LAN, then the power key if it stays in standby) or off. Idempotent. |
| Remote keys in order, using aliases ( |
| Absolute volume over DLNA, refused above a configurable cap. |
| Fills the text field open on screen (search boxes). |
| Installed apps with their Tizen IDs. |
| Opens an app by name ( |
| Opens YouTube on a video, from a URL ( |
| Shows the "Allow" pop-up on the TV and waits for it to be accepted. |
Errors are returned as tool results (isError) with a stable code (not_paired, tv_off, bad_request) and a
message the model can act on, rather than thrown, so the agent can recover by itself: pair, turn the TV on, or pick
another app. The server also sends MCP instructions describing that flow.
Guardrails
An agent holding a TV remote should not be able to blast the volume at 3 a.m.
tv_set_volumerefuses levels aboveSAMSUNG_TV_MAX_VOLUME(default 50).tv_press_keysallows at most 5volume_upper call, so the cap cannot be bypassed with keys, and at most 30 keys.KEY_POWERis not accepted as a key; power goes throughtv_power, which checks the current state first, so "turn it on" never turns an already-on TV off.tv_statusandtv_list_appsare annotatedreadOnlyHint, so clients can auto-approve them and ask before the rest.
Related MCP server: samsung-tv
Setup
Requires Node.js 20+ and a Samsung TV from 2016 or later on the same network.
git clone https://github.com/<you>/samsung-tv-mcp && cd samsung-tv-mcp
npm install
npx samsung-tv-mcp discover # scans your /24 and remembers the TV
npx samsung-tv-mcp pair # accept the pop-up on the TV with the physical remote
npx samsung-tv-mcp statusThe IP, MAC and pairing token are stored in ~/.samsung-tv-mcp/.
Claude Code
claude mcp add samsung-tv -- node /path/to/samsung-tv-mcp/src/cli.mjsClaude Desktop and other MCP clients
{
"mcpServers": {
"samsung-tv": {
"command": "node",
"args": ["/path/to/samsung-tv-mcp/src/cli.mjs"],
"env": { "SAMSUNG_TV_MAX_VOLUME": "40" }
}
}
}Configuration
Variable | Default | |
| discovered | Fixed TV address; disables rescanning. |
| from local interfaces |
|
|
| Volume cap for |
| App IDs to probe besides the built-in catalog. | |
|
| Where the config and token live. |
How it talks to the TV
What | How |
Keys and text | WebSocket |
State, apps | REST on |
Volume and mute | UPnP/DLNA RenderingControl on port 9197, no token needed |
YouTube video | DIAL |
Power on | Wake-on-LAN to the TV's MAC, then the power key if it is still in standby |
Things learned on a 2025 TV (UN43U8600F) that the older libraries and docs do not cover:
The app list request is ignored. Newer TVs never answer
ed.installedApp.getored.apps.launchover the WebSocket. They still answerGET /api/v2/applications/<id>one ID at a time, so the server probes a catalog of known IDs (src/apps.mjs) in parallel and keeps the ones the TV recognizes.DIAL needs a YouTube
Origin.POST /ws/apps/YouTubeanswers 403 unless the request carriesOrigin: https://www.youtube.com.Volume over DLNA is absolute and token-free, which beats sending
KEY_VOLUPtwenty times.A TV that turns off does not close the WebSocket. The server drops the channel whenever the REST API stops answering, otherwise it would keep reporting "connected".
Standby swallows Wake-on-LAN while the network stack is still up, so
tv_powerfalls back to the power key.There is no API to install apps. None of the store IDs respond.
Tests
npm testThe suite runs a fake TV (test/fake-tv.mjs) that serves the same REST, DLNA, DIAL and WebSocket endpoints on one
local port, including pairing approval, timeouts and revoked tokens. The MCP tests connect a real MCP client to the
server over an in-memory transport, so they cover the protocol layer, not just the TV client.
Library use
import { SamsungTV } from 'samsung-tv-mcp';
const tv = new SamsungTV({ dataDir: './data', host: '192.168.1.50' });
await tv.pair();
await tv.launchApp('3201907018807'); // NetflixLicense
MIT
Available Tools
9 toolstv_launch_appOpen an appA
Opens an installed app by name ("netflix", "prime video") or by its Tizen ID from tv_list_apps.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the app must be installed and that identifiers can be names or Tizen IDs, but omits what happens on failure (app not installed) and whether launching changes TV foreground state or input source — relevant for a device-control tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, with the examples and cross-reference packed in and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and annotations covering safety, this is nearly sufficient. The main residual gaps are failure behavior when the app is not installed and whether pairing/preconditions apply, which sibling tools like tv_pair hint at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is undocumented in the schema, so the description carries the load: it explains the accepted value forms with examples ('netflix', 'prime video') and the alternative Tizen ID sourced from tv_list_apps. Case-sensitivity and exact matching behavior remain unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb and resource — 'Opens an installed app' — plus concrete examples of accepted identifiers. It references tv_list_apps as the source of Tizen IDs, though it does not distinguish itself from tv_play_youtube, a sibling an agent could plausibly confuse with launching an app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes clear this is for launching already-installed apps and points the agent to tv_list_apps to obtain valid identifiers. It stops short of stating exclusions, e.g. that tv_play_youtube (not this tool) should be used to play specific video content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_list_appsList installed appsBRead-only
Apps from the built-in catalog that are installed on this TV, with their IDs and whether they are running.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Probe the TV again instead of using the cached list |
TDQS
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 usefully adds that results come from the built-in catalog and include running state, but it omits the caching behavior that the optional refresh parameter implies — a notable omission given the tool may return stale data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the resource front-loaded and no filler. It reads as a fragment, but every clause (catalog source, IDs, running state) carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the job of describing return values and does so adequately — installed apps, their IDs, and running status. Only the staleness/caching caveat and a routing hint toward tv_launch_app are missing for a fully self-sufficient definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single optional 'refresh' parameter is already documented as re-probing versus using the cache. The description adds nothing about this parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific resource (apps from the built-in catalog installed on this TV) and what is returned (IDs and running state), which clearly separates it from tv_launch_app or tv_status. The listing verb is implied rather than stated, and 'built-in catalog' scoping is a useful differentiator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus siblings such as tv_launch_app (e.g. 'use this first to obtain an app ID for launch'), and no mention of when to prefer the cache versus re-probing. The agent must infer the workflow entirely from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_pairPair with the TVA
Shows an "Allow" pop-up on the TV and waits up to 30 s for someone to accept it with the physical remote. Tell the user to look at the TV before calling. force=true discards the current token and pairs again.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Significantly exceeds the annotations: it discloses a blocking wait of up to 30 s, that acceptance requires physical human action on the remote, and that force re-pairs by discarding the existing token. It stops short of saying what is returned or what happens when the user declines or the 30 s elapses, which is the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core behavior first, then the user-facing instruction, then the parameter branch. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool with annotations only covering safety hints, the description supplies the essential runtime characteristics (blocking, timeout, human-in-the-loop). The only omission is the failure/decline outcome, which an agent would want but can discover at call time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single boolean 'force', and the description fully compensates by explaining exactly what force=true does (discards the current token and pairs again). Only the default/implicit behavior of force=false is left to inference, which is derivable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the concrete action (shows an 'Allow' pop-up on the TV and waits for acceptance via the physical remote), which is unmistakably pairing and distinct from every sibling (tv_status, tv_power, tv_press_keys, etc.). An agent can route this without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Tell the user to look at the TV before calling') and states the condition that selects the force path ('force=true discards the current token and pairs again'). It does not name what to do if a token already exists but pairing is unnecessary, but the when-to-use context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_play_youtubePlay a YouTube videoA
Opens the TV YouTube app directly on a video (DIAL), given a YouTube URL or an 11-character video ID.
| Name | Required | Description | Default |
|---|---|---|---|
| video | Yes | YouTube URL or video ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish destructiveHint=false and openWorldHint=false; the description adds that playback goes through DIAL and opens the app directly on the video. It does not disclose failure behavior (unpaired TV, unsupported DIAL, bad ID) or what a successful call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and mechanism, with the input form tacked on where it belongs. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, non-destructive action tool with no output schema, the description covers what it does and its input contract. The only real gap is the absence of precondition context (pairing, power state) that would tell the agent when the call is likely to fail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter and 100% schema description coverage, the schema already documents the input, so baseline is 3. The description restates the accepted formats but adds no format nuance (e.g., whether shortened URLs or timestamps are allowed) beyond the schema's minLength of 11.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Opens the TV YouTube app directly on a video') plus the mechanism (DIAL) and input form (URL or 11-char ID). It implicitly separates itself from the generic tv_launch_app sibling by targeting a specific video rather than an app, though it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'given a YouTube URL or an 11-character video ID', which tells the agent the accepted input form. There is no explicit when-to-use vs. tv_launch_app or tv_status, and no stated preconditions such as the TV being paired or powered on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_powerTurn TV on or offAIdempotent
Turns the TV on (Wake-on-LAN, then the power key if it stays in standby) or off. No-op if already in that state.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes | true = turn on, false = turn off |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, yet the description adds real mechanism context: Wake-on-LAN first, power key fallback if it stays in standby, and an explicit no-op when already in the target state. It does not discuss timing/latency or what happens if the TV is unreachable, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, with the fallback path and idempotency note following immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter power tool with no output schema, the description covers the action, method, and idempotency. It could say whether success/failure or resulting state is reported, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter already documents 'true = turn on, false = turn off'. The description restates the on/off meaning without adding format or edge-case detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Turns the TV on ... or off') with the exact scope of the action. It is naturally distinguished from siblings like tv_status (read) and tv_press_keys (arbitrary key injection) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The boolean semantics imply when to call it, but there is no explicit guidance such as 'use tv_press_keys if the power key is not the intended action' or prerequisites (paired device). Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_press_keysPress remote keysB
Presses remote-control keys in order. Use aliases (up, down, left, right, ok, back, home, menu, source, play, pause, stop, fast_forward, rewind, volume_up, volume_down, mute, channel_up, channel_down, 0-9) or raw Samsung codes like KEY_RED. Up to 30 keys per call.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | Keys to press, in order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is not destructive and not open-world. The description adds useful behavioral details: keys are pressed sequentially, up to 30 per call, and aliases or raw Samsung codes are accepted; however, it omits prerequisites such as pairing/power state and behavior for unsupported keys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and followed by the key vocabulary and batch limit. There is little wasted text, and the important invocation constraint is easy to find.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with annotations covering safety, the description is adequate to invoke it. It is not fully complete because it omits pairing/power prerequisites and sibling routing guidance, which matter given tv_pair, tv_power, tv_set_volume, and tv_type_text exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the single keys parameter. The description adds real semantic value by listing accepted aliases and an example raw Samsung code format, going beyond the schema's generic string array definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: presses remote-control keys in order. It clearly identifies the key-pressing capability, but does not explicitly distinguish it from overlapping siblings such as tv_set_volume, tv_power, or tv_type_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains accepted key formats but gives no when-to-use guidance versus alternatives. It does not say when to use tv_power instead of a power key alias, when to use tv_set_volume instead of volume_up/down, or whether pairing is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_set_volumeSet volumeAIdempotent
Sets the absolute volume (0-100) over DLNA. Levels above 50 are refused as a safety cap.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotence, non-destructiveness and closed-world scope, yet the description adds genuinely new behavioral information: values above 50 are refused for safety. It does not say how the refusal surfaces (error vs. silent clamp), which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, and the operation and scale come first with the safety cap immediately after. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, idempotent mutation with no output schema and annotations carrying the safety profile, the description supplies everything an agent needs: what is set, the units, and the practical limit. Only the error surface of a refused level is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden and does so reasonably: it names the parameter's meaning (absolute level), its 0-100 range, and the effective cap at 50. It does not explain that requests of 51-100 are accepted by the schema but rejected in practice, leaving a real ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (sets the volume), the absolute scale (0-100), and the transport (DLNA). No sibling in the list offers volume control, so the scope is unambiguous without needing to name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage only: use this to set absolute volume. There is no explicit when-to-use guidance, no mention of whether a relative/mute-style operation exists, and no prerequisites such as pairing state. The 50-level cap is a constraint, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_statusTV statusARead-only
Power state (on | standby | off), name, model, IP, whether this server is paired, current volume and mute. Rediscovers the TV on the LAN if its address changed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: it may rediscover the TV on the LAN if its address changed, which warns the agent about a potential delay/side effect and implies stale-address conditions. It does not say whether the call fails when unpaired.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the core values front-loaded and the address-rediscovery caveat appended. It is a sentence fragment with no verb, which slightly weakens the lead, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values, and it does so by enumerating each reported field (including enum-like power states). The remaining gap is that it does not describe the response structure or what happens when the TV is unreachable or unpaired.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4; there is nothing for the description to compensate for. The field list usefully previews the return contents even though no input exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what the tool reports (power state, name, model, IP, pairing, volume, mute), so the resource is unambiguous, but it lacks an explicit verb and never contrasts itself with tv_power or tv_set_volume. An agent can infer it is a status getter, but must do so from the name/title rather than the description prose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: a zero-parameter read of TV state. There is no explicit statement of when to call it versus tv_power (query vs change power) or the other siblings, and no mention of prerequisites such as pairing being required before it returns useful data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tv_type_textType textA
Replaces the content of the text field that is open on the TV (search boxes, keyboards). Open the field first; this does nothing if no keyboard is on screen.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover openWorldHint and destructiveHint, so the description carries the real behavioral load, and it does: it discloses that existing content is replaced rather than appended, that a field must already be focused, and that the call silently no-ops otherwise. It does not say whether the text is submitted after typing or what a failure looks like, which keeps it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, and the primary action plus its prerequisite are both front-loaded before the edge-case caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, non-destructive, output-schema-free tool, the description covers the action, the prerequisite, and the silent-failure case, which is most of what an agent needs. Minor gaps remain around whether typing auto-submits and whether pairing must precede it, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does by making clear that 'text' is the full replacement content rather than an appended string. It says nothing about the 500-character limit or any character/charset constraints, so the schema's maxLength is the only guard and the agent could still overrun it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('replaces') and resource ('the content of the text field that is open on the TV') and parenthetically scopes it to search boxes and keyboards. An agent can tell this is a text-entry tool rather than a navigation tool, though it never explicitly contrasts itself with tv_press_keys, which is the closest sibling and could also emit characters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear precondition ('Open the field first') and an explicit failure condition ('this does nothing if no keyboard is on screen'), which is exactly the when-not guidance an agent needs. It stops short of naming alternatives (e.g. use tv_press_keys to navigate to the field or to submit), so it is clear context without full 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.
9 tool updates
v0.1.0- First observed
tv_launch_app - First observed
tv_list_apps - First observed
tv_pair - First observed
tv_play_youtube - First observed
tv_power - First observed
tv_press_keys - First observed
tv_set_volume - First observed
tv_status - First observed
tv_type_text
TDQS
Scored across 9 tools
Each tool maps to a distinct action on the TV, and descriptions clarify boundary cases well (tv_play_youtube vs tv_launch_app, status vs pair). The main overlap is volume control: tv_press_keys accepts volume_up/volume_down/mute aliases that duplicate the purpose of tv_set_volume, which could cause misselection.
All tools share a consistent tv_ snake_case prefix with predictable verb_noun naming (tv_press_keys, tv_set_volume, tv_list_apps, tv_launch_app). Minor deviations: tv_status and tv_power are noun-only, and tv_pair is a bare verb, but the pattern remains readable.
Nine tools is well-scoped for a TV remote server, with one tool per core capability (status, power, keys, volume, text, apps, YouTube, pairing). No redundant or filler tools.
The surface covers power lifecycle, input, volume, text entry, app discovery/launch, YouTube deep-linking, and pairing, which is most of a TV remote's domain. Gaps exist: no absolute channel selection (only channel_up/down keys) and no input/source enumeration or app install, though many of these can be worked around via tv_press_keys.
Maintenance
Related MCP Connectors
Give your AI agent the power to cast to your home TV and control an interactive canvas. By ArdaBot.
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
YouTube for AI agents: transcripts, comments, video stats, channel monitor, Shorts captions.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents.
Related MCP Servers
- AlicenseBqualityCmaintenanceBuild, deploy, and debug Smart TV web apps on Samsung Tizen and LG webOS TVs from any AI agent.310 npm4MIT
- AlicenseNot gradedqualityCmaintenanceEnables discovering, pairing with, and controlling Samsung Tizen TVs on a local network.2 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI agent to control an LG webOS TV by reading playback status, listing and launching apps, adjusting volume or mute, and powering it off.MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to control a Samsung Tizen smart TV over the local network without cloud services, covering power on/off, launching and closing apps, casting YouTube videos, sending remote keys, adjusting volume, and checking TV status and health.1MIT