Smart Appliance MCP
Discovery and control of Google TV / Android TV devices via the google_tv_remote adapter, including pairing, remote controls, app launch probing, and companion integration.
Adapter-driven routing for devices discovered through Home Assistant, allowing control and state retrieval for connected appliances.
Discovers Roku TVs and streaming devices over SSDP and controls them via Roku's External Control Protocol (ECP).
Click on "Install 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., "@Smart Appliance MCPDiscover my smart appliances"
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.
Smart Appliance MCP
An MCP server that lets any MCP-capable LLM client discover and control smart appliances on the local network.
The important design choice is adapter-driven routing:
discover_devicesscans with every registered adapter.Each discovered device stores its
provider.Later calls use only
deviceId; the server looks up the device and routes the command to the adapter found during discovery.
That keeps client prompts simple. The LLM client does not need to know whether a TV is Roku, Home Assistant, Samsung, LG, Matter, or something else.
Tools
discover_devices: finds appliances and remembers them for this server session.diagnose_discovery: explains discovery state and likely network blockers without asking users to edit technical config.list_known_devices: returns devices already found.get_device_controls: shows available capabilities for one device.discover_apps: probes app launch targets exposed by a discovered media device.search_apps: searches discovered apps by name, package id, category hints, and launchability.pair_device: starts one-time consumer pairing when a provider requires it.complete_pairing: completes pairing with the code shown on the appliance.list_pairings: lists locally stored pairings.remove_pairing: removes a locally stored pairing.control_device: performs actions such as volume, navigation, power, search, and app launch.search_content: searches installed apps or native content providers when supported.suggest_content: returns adapter-aware viewing suggestions.record_watch_event: remembers watched, liked, dismissed, or started content.list_watch_history: shows the recent local watch history used by recommendations.recommend_content: ranks what to watch next by category, freshness, app, watch history, and app launchability.get_device_state: returns state when an adapter supports it.
Related MCP server: Smart Home Control MCP Server
Included Adapters
roku: discovers Roku TVs and Roku streaming devices over SSDP and controls them through Roku ECP.smart_appliance_companion: discovers the optional TV-side companion app over mDNS and uses it for installed app listing and package launch.google_tv_remote: discovers Google TV / Android TV devices through mDNS Google Cast signals and DIAL/SSDP, then models the normal remote-style pairing flow.home_assistant: optional broad appliance bridge for TVs, lights, switches, thermostats, and more.google_tv: optional ADB fallback for development/testing only. Enable withENABLE_ADB_ADAPTER=true.
Quick Start
npm install
npm run build
npm startFor local development:
npm run devClient Configuration
Build the project, then add a server entry like this to your MCP client:
{
"mcpServers": {
"smart-appliance": {
"command": "node",
"args": ["/absolute/path/to/smart-appliance-mcp/dist/index.js"]
}
}
}If you use Home Assistant, include:
{
"env": {
"HOME_ASSISTANT_URL": "http://homeassistant.local:8123",
"HOME_ASSISTANT_TOKEN": "your-long-lived-access-token"
}
}For Google TV / Android TV, use the consumer pairing flow. The server discovers the TV through local-network signals such as mDNS _googlecast._tcp.local and DIAL/SSDP, then carries the address internally on the discovered device record.
The intended user flow is:
Discover my smart appliances.
Pair my living room TV.
Complete pairing with code 123456.
Turn the TV volume up.Discovered Google TV devices use provider: "google_tv_remote". Pairing state is stored locally and routed through the same adapter registry as every other provider.
The Google TV remote adapter includes local discovery, consumer pairing, live remote controls, app launch probing, and adapter-routed command execution. The ADB adapter and GOOGLE_TV_REMOTE_DEVICES override remain available only as opt-in development diagnostics, not normal user setup.
App discovery is intentionally adapter-driven too. On Google TV, discover_apps probes launch surfaces the TV exposes locally, such as DIAL /apps/<name> endpoints. If the TV does not expose an installed app list through the consumer remote or DIAL interfaces, the server reports that clearly instead of pretending a guessed package name or browser URL is a discovered app launch path.
For the best Google TV experience, install the optional companion app from companion/google-tv. The companion runs on the TV, advertises _smart-appliance._tcp.local, lists installed Leanback launcher apps with Android PackageManager, and launches apps locally by package name. This is the normal-user path for apps like Crunchyroll that do not expose DIAL launch endpoints.
Recommendations
The recommendation layer is local-first and adapter-aware:
Adapter watch history is used first when the discovered device can provide it.
record_watch_eventstores lightweight local fallback history, including app, title, categories, progress, and status.recommend_contentmerges TV-sourced history, local fallback history, a provided content catalog, and starter rows.Results are scored for freshness, category overlap with recent viewing, app availability, launchability, and seen/dismissed state.
The response separates fresh
recommendationsfromalreadyWatchedanddismissedmatches.Each recommendation includes
userSummary/userReasonsfor clean user-facing answers, plus detailed fields for internal planning.Actionable recommendation rows include artwork and actions:
artwork.thumbnailUrl,posterUrl, andbackdropUrlfor images.actions.previewfor trailers or preview clips when a catalog suppliespreviewUrl/trailerUrl.actions.primaryas the one-click watch action, expressed as an MCP tool call payload.
chatCardsandformat_recommendation_cardsrender the same results for chat clients:Images are included only when the catalog supplies title-specific artwork.
Preview links use normal web URLs.
Watch/search links use
mcp://action?...URLs that describe the MCP tool call for the host client to confirm and execute.
If the current adapter cannot provide TV watch history, list_watch_history, recommend_content, and format_recommendation_cards return an optional companionPrompt. Google TV's consumer remote protocol does not expose private per-app streaming history, so exact content history requires a provider integration or an optional TV-side companion source.
Provider catalogs change constantly, so production clients should pass fresh catalog rows into recommend_content from a provider integration, search connector, or user-owned media source. The MCP does not claim live Netflix/Crunchyroll catalogs unless an adapter or connector supplies them.
Frontend Watch Queue
Run a local UI for actionable recommendations:
npm run uiOpen http://localhost:5177. The UI renders MCP recommendation output as cards with artwork, preview, one-click watch actions, filtering, search, and an already-watched panel. Use the {} button to paste a recommend_content response from any LLM client.
For chat-native cards, call format_recommendation_cards with the same inputs as recommend_content. It returns cards plus Markdown, using links instead of buttons. By default, links point at the local UI action endpoint, so keep npm run ui running:
[Watch on TV](http://127.0.0.1:5177/api/actions/run?payload=...)Use linkMode: "mcp_scheme" if a host client supports mcp://action?... links directly.
Example Tool Flow
First ask the client:
Discover my smart appliances.Then:
Turn the living room TV volume up.The MCP server handles the routing internally:
const device = registry.getDevice(deviceId);
const adapter = registry.adapterFor(device);
await adapter.control(device, request);Adding a New Adapter
Create a class that implements SmartApplianceAdapter:
export class SamsungTizenAdapter implements SmartApplianceAdapter {
readonly id = "samsung_tizen";
readonly label = "Samsung Tizen TV";
async discover(options: DiscoveryOptions): Promise<SmartDevice[]> {
return [];
}
async control(device: SmartDevice, request: ControlRequest) {
return { ok: true };
}
}Then register it in src/index.ts:
registry.register(new SamsungTizenAdapter());Discovery remains the source of truth. Once a Samsung TV is discovered with provider: "samsung_tizen", all future commands for that deviceId route to the Samsung adapter automatically.
Notes
Local-network discovery depends on your network allowing multicast/SSDP.
Some TV ecosystems require pairing before control; those adapters should expose a pairing flow as an MCP tool or resource.
Content recommendations are adapter-aware but can be made stronger by combining device capabilities with the host LLM client's taste/profile context.
Available Tools
18 toolscomplete_pairingA
Complete consumer pairing for a discovered device using the code shown by the appliance.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It frames completion of a pairing mutation but says nothing about required permissions, whether an existing pairing is replaced, what happens on an invalid code, or whether the operation is reversible. This is a notable gap for a mutation-style action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that communicates the action, target, and required input context with no filler. It is properly sized and prioritized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two required parameters, no output schema, and no annotations, the description provides the core invocation context but misses important surrounding context like postconditions, failure modes, or how this step relates to an ongoing pairing workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the description must compensate. It does add meaning by saying the device is 'a discovered device' (mapping to deviceId) and that code comes 'shown by the appliance' (mapping to code). It does not explicitly restate the parameter names or formats, but for two simple required parameters this is adequate.
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 states a specific action ('Complete'), a specific resource ('consumer pairing'), and a specific scenario ('for a discovered device', 'using the code shown by the appliance'). This clearly distinguishes it from siblings like pair_device, remove_pairing, or discover_devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: after a device has been discovered and after the appliance displays a code. It doesn't explicitly exclude uses or name alternatives, but the context is clear enough for an agent to select it over discovery or device-listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
control_deviceD
Control a discovered device. The server routes the command through the adapter found during discovery.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | ||
| action | Yes | ||
| payload | No | ||
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing effects. It states the command is routed through an adapter, hinting at indirection, but does not disclose potential side effects, return behavior, error conditions, or whether actions are reversible. There is no contradiction with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short – one sentence – but that brevity is not efficient; it under-specifies essential information. It is front-loaded with the command purpose but omits critical usage details, so it is not concise in a valuable way.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, no annotations, and nested objects, the description is grossly incomplete. There is no explanation of command semantics, parameter relationships, expected behavior for different action types, or any prerequisites beyond 'discovered device'.
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 explain parameters. It offers no parameter explanations: what are deviceId, action, value, payload? The schema provides enums for action and types for value, but the description adds zero meaning beyond that.
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 says 'Control a discovered device' – it identifies the purpose (controlling a device) but does not specify what types of controls or actions are possible, nor does it distinguish from sibling tools like get_device_state or get_device_controls. It also does not clarify the scope beyond 'discovered device'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For instance, it does not mention that get_device_controls likely retrieves available controls while this tool executes them, nor how it relates to discovery or pairing tools. The description implies a prerequisite (discovery) but does not explain when to choose this over similar actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_discoveryA
Explain current discovery state and next checks without asking users for technical setup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. The verb 'Explain' implies a read-only, non-destructive operation, and 'without asking users for technical setup' suggests no user-side side effects. However, it doesn't explicitly state that it makes no changes or what state it accesses, leaving some ambiguity for a diagnostic tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the main purpose and the key constraint. Every word adds value; there is no redundancy or padding.
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 0-parameter tool with no output schema, the description adequately covers the core purpose: explaining discovery state and next steps. It could elaborate on what 'current discovery state' encompasses, but it's sufficient for an agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to add parameter details. Per the baseline for 0-param tools, this scores a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Explain'), the resource ('current discovery state'), and the deliverable ('next checks'). It distinguishes this tool from siblings like discover_devices (which performs discovery) and list_known_devices (which lists results) by focusing on explanation rather than action.
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 phrase 'without asking users for technical setup' provides a clear usage context: use this tool when you need to explain state without involving the user in technical tasks. It doesn't explicitly mention alternatives or exclusions, but the context is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_appsC
Probe app launch targets exposed by a discovered media appliance.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only says 'Probe,' which suggests a read-only action but does not confirm side effects, authentication needs, or what is returned. This lacks essential behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and front-loaded, containing no unnecessary words. However, it is too sparse to be genuinely helpful, so while concise, it earns only an average score for structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter), no output schema, and no annotations, the description is incomplete. It does not clarify what 'launch targets' are, what the tool returns, or any typical usage context, leaving significant gaps.
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 must compensate. It hints that deviceId refers to a 'discovered media appliance,' providing minimal context, but does not explain how to obtain the ID or its expected format, offering little value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Probe' and identifies the resource as 'app launch targets' on a 'discovered media appliance.' This distinguishes it from sibling tools like discover_devices (which finds devices) and search_apps (which searches apps). The term 'launch targets' is somewhat ambiguous but still conveys a clear purpose.
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?
There is no guidance on when to use this tool versus alternatives. The phrase 'discovered media appliance' implies prior discovery, but this is not explicit. No when-not or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_devicesB
Discover smart appliances on the local network and remember their provider adapter.
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal a persistent side effect ('remember their provider adapter'), but it does not explain what this means for state, reversibility, permissions, or what happens during discovery. This is a significant gap for a tool that likely mutates stored state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase earns its place, and it communicates the core action and a key side effect efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema, but the description still lacks important context such as what the tool returns, how timeoutMs affects behavior, and what 'remember' means operationally. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the timeoutMs parameter at all. Although the parameter name and schema constraints are somewhat self-explanatory, the description adds no semantic value beyond the schema, so it fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Discover smart appliances on the local network') and adds a distinguishing side effect ('remember their provider adapter'). This differentiates it from siblings like list_known_devices and discover_apps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: use this when you need to discover smart appliances on the local network. However, it does not explicitly mention alternatives or when not to use it, such as when to prefer list_known_devices or diagnose_discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_recommendation_cardsC
Format recommendations as chat-renderable cards with preview links and MCP action links instead of buttons.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | No | ||
| mood | No | ||
| limit | No | ||
| catalog | No | ||
| deviceId | Yes | ||
| linkMode | No | ||
| categories | No | ||
| maxAgeDays | No | ||
| excludeApps | No | ||
| includeSeen | No | ||
| actionBaseUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions 'chat-renderable cards' and link modes, but doesn't disclose side effects, prerequisites (e.g., valid deviceId), or what the output structure looks like. For a formatting tool, it doesn't clarify whether it mutates any state or just returns formatted data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the core action. It avoids fluff. However, given the complexity (11 parameters), it could benefit from more detail, but for what it is, it's efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 11 parameters and no output schema, so the description needs to be more comprehensive. It doesn't cover parameter relationships, default behaviors, or how the tool integrates with the recommendation pipeline. For an MCP tool, it's insufficient for an agent to use correctly without additional documentation.
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. It mentions 'preview links and MCP action links' which relates to linkMode, but doesn't explain key parameters like deviceId, apps, mood, catalog, or actionBaseUrl. The description adds minimal semantic value beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to format recommendations into chat-renderable cards with specific link types (preview and MCP action links). It distinguishes itself from sibling tools by focusing on formatting rather than content retrieval or device control, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance on when to use this tool. It doesn't specify when to choose this over other recommendation-related tools like 'recommend_content' or 'suggest_content'. The phrase 'instead of buttons' hints at a UX preference but lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_controlsB
Return available controls for a discovered device.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It only states the basic action ('return controls') without revealing whether the operation is read-only, what happens if the device is not found, error conditions, or the structure of the returned data. No additional behavioral traits are disclosed beyond the literal action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero fluff. Every word contributes to the purpose. It is optimally concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description covers the core purpose but lacks important context such as what 'controls' entails, the return format, potential failure modes, or when to prefer this over get_device_state. It is sufficient for a trivial tool but not fully complete for an agent to invoke it confidently without additional assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the deviceId parameter (0% coverage). The description adds some semantic context by specifying the device must be 'discovered', implying the deviceId refers to a device from discovery. However, it does not explain format, required validation, or relationship to other parameters. This is adequate but minimal, giving a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Return available controls for a discovered device' uses a specific verb ('return') and resource ('controls for a discovered device'), clearly distinguishing it from sibling tools like control_device (which sends commands) and get_device_state (which reports state). The purpose is unambiguous and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., device must be discovered), exclusions (e.g., use control_device to change state), or any context for selection. This is a significant gap given there are many sibling tools with overlapping domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_stateA
Return current state for a discovered device when the discovered adapter supports it.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It only states the action and condition, without revealing side effects, error handling, or what happens if the adapter is unsupported. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that delivers essential information without fluff. It is front-loaded with the core purpose and includes a necessary condition, earning its place.
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 tool with one parameter and no output schema, the description is adequate but incomplete. It does not describe the return value format, potential errors, or prerequisites beyond 'discovered device'. The condition about adapter support is present, but further context on behavior when unsupported would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It vaguely implies that the deviceId refers to a discovered device, but it does not explain the format, source (e.g., from discover_devices), or any constraints. The parameter name is self-explanatory, but the description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'current state for a discovered device'. It also adds a condition ('when the discovered adapter supports it') that distinguishes it from sibling tools like get_device_controls, which focus on controls rather than state.
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 condition 'when the discovered adapter supports it' provides clear context for when the tool is applicable, implying that some adapters do not support state retrieval. However, it does not explicitly mention alternative tools or when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_known_devicesA
List devices discovered during this MCP server session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It states the tool lists devices discovered during the session, but does not explicitly confirm it is read-only, non-destructive, or free of side effects. While 'List' implies a safe read, the description adds no contextual details about return behavior, caching, or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the purpose without extraneous words. Every word contributes to the definition, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (zero parameters, no output schema), the description adequately covers the core functionality. It specifies the session scope, which is the key contextual detail. It could optionally mention that this is a read-only list (since annotations are absent), but given the simplicity, the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is trivially 100%. Per the rubric, the baseline is 3 when schema coverage is high, and the description adds no parameter information because none is needed. This is appropriate for a parameterless tool.
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 is specific: 'List devices discovered during this MCP server session.' It names the verb ('List'), the resource ('devices'), and the scope (session-discovered). This clearly distinguishes it from siblings like 'discover_devices' (initiates discovery) and 'get_device_state' (retrieves state).
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 gives a clear context (session-scoped devices) but does not explicitly state when to use this tool versus alternatives like 'discover_devices' or 'list_pairings'. It implies the tool is for viewing already-discovered devices, but there is no direct guidance on exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pairingsA
List locally stored consumer pairings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states 'locally stored' which implies a read-only operation and local scope, but it doesn't disclose details like whether the list is sorted, includes inactive pairings, or if any side effects occur. For a simple list tool, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource. No wasted words, perfectly sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, no output schema, no annotations), the description is mostly complete. However, it doesn't mention what the output looks like (e.g., list of pairing IDs, device names) or any edge cases like empty lists. For a basic list tool, this is acceptable but could be slightly more informative.
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, and schema description coverage is 100% (vacuously). The description adds no parameter info because none exist, but the baseline for zero-param tools is 4, and the description correctly implies no inputs are needed.
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 'List locally stored consumer pairings' clearly states the action (list) and the resource (locally stored consumer pairings). It distinguishes from siblings like list_known_devices and list_watch_history by specifying 'pairings' and 'locally stored', though it doesn't explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving pairings but provides no explicit guidance on when to use this tool versus alternatives like list_known_devices or remove_pairing. It doesn't mention prerequisites or context, but the purpose is clear enough for basic selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_watch_historyC
List recent watch history from the TV adapter when available, merged with local MCP history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| deviceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the merge behavior (TV adapter vs local history), which is useful, but it does not disclose whether this is a read-only operation, any permission or device availability requirements, or the format of the returned history. The merge behavior is a positive signal, but key behavioral details (e.g., what happens if TV adapter is unavailable) are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the key action ('List recent watch history') and adds the merge behavior. Every word earns its place; no fluff.
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 2 optional parameters, no output schema, and no annotations, the description is sparse. The tool likely needs to explain when TV adapter is available, how merging works, and what the returned data looks like. The description gives a high-level overview but is incomplete for understanding the filter logic and data shape, especially since there are no output schema details.
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%, meaning the description adds no explanation of parameters. The schema provides basic details (limit integer 1-100, deviceId string), but the description does not clarify the meaning of deviceId (e.g., the TV device?) or how limit affects merged results. With no parameter info in the description, it fails to compensate for the low coverage.
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 states that the tool lists recent watch history, with a specific distinction: it merges TV adapter history with local MCP history. This clearly identifies the tool's purpose and resource, and distinguishes it from siblings like record_watch_event and list_known_devices, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving watch history, but provides no guidance on when to use it versus alternatives like search_content or recommend_content, nor any context about when the TV adapter is available or when local history is used. No exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pair_deviceA
Start consumer pairing for a discovered device when its provider supports pairing.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Start consumer pairing' without explaining side effects, permissions, state transitions, idempotency, or how this relates to complete_pairing. This is a meaningful gap for a state-changing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every phrase earns its place: the action, the target, and the precondition.
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?
Although the tool is simple with one parameter, there is no output schema and no annotations. The description does not explain the pairing flow, what 'start' means versus 'complete', return behavior, or failure conditions. Given the sibling complete_pairing exists, this context is needed.
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. It refers to 'a discovered device' but never explicitly explains that deviceId is the discovered device's identifier or how to obtain it. This adds minimal meaning beyond the schema's type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Start') and resource ('consumer pairing') with a clear target ('a discovered device') and a condition ('when its provider supports pairing'). This clearly distinguishes it from siblings like complete_pairing, list_pairings, and remove_pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: after device discovery and only if the provider supports pairing. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_contentB
Rank what to watch next using watch history, categories, freshness, apps, and discovered launchability.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | No | ||
| mood | No | ||
| limit | No | ||
| catalog | No | ||
| deviceId | Yes | ||
| categories | No | ||
| maxAgeDays | No | ||
| excludeApps | No | ||
| includeSeen | No | ||
| chatLinkMode | No | ||
| actionBaseUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It reveals the ranking factors (watch history, categories, freshness, etc.), giving insight into its operation, but it does not state whether the tool mutates state, requires authentication, or what the output format is. This is modest but incomplete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single, front-loaded sentence with no wasted words. It immediately states the action ('Rank') and the resource ('what to watch next'), making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, no annotations, no output schema, and no guidance on return values or edge cases, the description is too brief. It gives a general sense of purpose but lacks the detail needed for reliable invocation, especially regarding parameter semantics and output handling.
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 for 11 parameters. It only hints at a few (categories, freshness, apps) and leaves core parameters like deviceId, limit, catalog, mood, includeSeen, and chatLinkMode unexplained. This is insufficient for an agent to correctly construct a request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as ranking 'what to watch next' using specific inputs like watch history, categories, freshness, apps, and discovered launchability. This distinguishes it from sibling tools like search_content, though it does not explicitly differentiate from suggest_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for generating a ranked watch-next list, but it does not provide explicit guidance on when to use this tool versus siblings like suggest_content or search_content, nor list any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_watch_eventA
Record watch activity so recommendations can avoid repeats and learn category/app preferences.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | No | ||
| title | Yes | ||
| source | No | ||
| status | No | ||
| deviceId | No | ||
| watchedAt | No | ||
| categories | No | ||
| progressPercent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavioral traits. It implies a write/persist operation and states downstream effects on recommendations, which is useful. However, it does not disclose duplicate handling, overwrite behavior, auth requirements, or what happens when event details are incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the action and its purpose without wasted words. Every phrase earns its place.
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 8 parameters, no annotations, no output schema, and no parameter descriptions in the schema, the description is too thin. It gives a high-level purpose but omits required input guidance, status semantics, and behavioral details needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only hints at "category/app preferences," loosely mapping to categories and appId, but does not explain any of the 8 parameters, including required title, status enum, watchedAt, or progressPercent. This is minimal compensation for a schema with no field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Record watch activity," and clarifies the purpose: to improve recommendations and capture category/app preferences. This clearly distinguishes it from sibling retrieval/recommendation tools like list_watch_history or recommend_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the clear context of use: record watch activity when a user watches something so recommendations can avoid repeats and learn preferences. It does not explicitly mention when not to use it or name alternatives, but the purpose statement makes the appropriate use case apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_pairingB
Remove a locally stored consumer pairing.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure, but it only mentions that the pairing is locally stored. It does not disclose whether the operation is reversible, idempotent, requires permissions, or what happens when the deviceId does not match an existing pairing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It conveys the action and object efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema, so the description is minimally viable. However, because it is a mutation with no annotations, it would benefit from noting side effects or no-match behavior, leaving a clear completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain deviceId beyond the schema's required string type. The tool name and schema property name suggest deviceId identifies the pairing, but the description adds no semantic detail about how it maps to the removal operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Remove' and a clear resource 'locally stored consumer pairing,' stating the exact scope. This distinguishes it from sibling pairing operations like pair_device, complete_pairing, and list_pairings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for deleting a stored consumer pairing but does not explicitly state when to choose this tool over sibling tools such as list_pairings or pair_device. There is no mention of prerequisites, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_appsA
Search all apps exposed by a discovered media appliance, including app names, package ids, categories, and launchability.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| deviceId | Yes | ||
| onlyLaunchable | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates that the tool returns app-related metadata (names, package ids, categories, launchability) which implies a read operation, but it does not explicitly state that it is non-destructive, nor does it mention any limitations (e.g., pagination, ordering, rate limits). The overall behavior is simple enough that the read-only nature is reasonably inferred, but explicit confirmation is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff. It states the action, scope, and key output details efficiently. Every word earns its place.
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 search tool with four parameters and no output schema, the description gives a clear purpose and hints at the output structure, but it omits parameter semantics and explicit usage context. The tool's simplicity keeps it adequate, but the missing param documentation prevents full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage (0%) for its four parameters (deviceId, query, limit, onlyLaunchable), and the tool description does not explain any of them. The mention of 'including app names, package ids, categories, and launchability' refers to output fields, not parameter meanings. This fails to compensate for the schema gap, leaving agents to guess parameter purposes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches all apps exposed by a discovered media appliance, listing specific output fields (app names, package ids, categories, launchability). It distinguishes itself from the sibling 'discover_apps' (which likely discovers apps) and 'search_content' (which searches media content) by specifying the resource and scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching apps on an already-discovered appliance ('discovered media appliance'), which nudges toward appropriate usage. However, it does not explicitly state when to prefer this over alternatives like 'discover_apps' or mention prerequisites (e.g., device must be paired/discovered) or exclusions. Context is present but not made explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contentB
Search content or installed apps on a discovered media appliance using its discovered adapter.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose side effects or read-only nature. It does not explicitly state that the operation is read-only, nor does it mention any potential errors, permissions, or rate limits. The word 'search' implies read-only, but it is not clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and to the point in one sentence. It avoids unnecessary details and directly communicates the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is somewhat vague regarding the 'discovered adapter' and does not explain the return value or output format. Given that there is no output schema, it would benefit from clarifying what the search returns, but it covers the basic operation.
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 description adds minimal value beyond the parameter names. 'query' and 'deviceId' are self-explanatory to a degree, but the description does not clarify that deviceId refers to a discovered media appliance or explain the type of content searched. It also does not describe the expected format of query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search content or installed apps') and the target ('a discovered media appliance'). It distinguishes from sibling tools like list_known_devices and record_watch_event, which perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention preconditions or typical usage scenarios. It only states the function without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_contentB
Suggest content to watch based on a discovered media appliance and optional viewing prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | ||
| deviceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose what happens with the result (e.g., possibly formatted recommendations), whether it interacts with the device, or any preconditions like the device being paired or online. The description is minimal and leaves out behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, concise, and front-loaded with the verb 'Suggest'. No wasted words. It communicates the core action and key inputs efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has simple parameters (2, with 1 required), no output schema, and no annotations. The description covers the basic inputs but lacks guidance on expected output format or edge cases. Given the simplicity, it's acceptable but could mention that output may be formatted via format_recommendation_cards, which is a sibling.
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 explain parameters. It mentions 'deviceId' (media appliance) and 'optional viewing prompt', which adds meaning. However, it doesn't clarify the format of the prompt or how the device ID is discovered (e.g., via list_known_devices). It partially compensates but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: to suggest content based on a media appliance and an optional prompt. It distinguishes from siblings like 'recommend_content' and 'search_content' by focusing on a discovered device context. However, it could be more explicit about the difference from 'recommend_content'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you have a discovered media appliance (deviceId) and optionally a viewing prompt. It does not explicitly state when not to use it or mention alternatives like 'recommend_content' or 'search_content'. Some guidance on when to prefer this over 'recommend_content' would be helpful.
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. Dates show when Glama detected each change.
18 tool updates
v0.1.0- First observed
complete_pairing - First observed
control_device - First observed
diagnose_discovery - First observed
discover_apps - First observed
discover_devices - First observed
format_recommendation_cards - First observed
get_device_controls - First observed
get_device_state - First observed
list_known_devices - First observed
list_pairings - First observed
list_watch_history - First observed
pair_device - First observed
recommend_content - First observed
record_watch_event - First observed
remove_pairing - First observed
search_apps - First observed
search_content - First observed
suggest_content
TDQS
Most tools target a distinct action/resource (discovery, pairing, device control, media recommendations). Minor overlap exists between suggest_content and recommend_content, and between search_content and search_apps, but descriptions clarify different inputs and purposes.
All tools use a consistent snake_case verb-first naming convention (list_, discover_, get_, control_, pair_, search_, suggest_, etc.). No mixed styles or arbitrary names; resource nouns follow verbs predictably.
At 18 tools the surface is on the heavy side for a single server, covering several subdomains (discovery, pairing, media, device control). The tools are not redundant enough to cut, but the count is above the ideal 3-15 range.
The server covers the full pairing lifecycle and core discovery/control/media workflow with no dead ends. Minor gaps like explicit device forgetting or media playback commands are absent, but adapters likely make those device-specific.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
Control your Tesla from your AI assistant - climate, charging, access, and security.
Manage digital signage screens, playlists and media from your AI assistant.
Turns a phone into a camera+Bluetooth remote so AI assistants can see and control any PC.
Related MCP Servers
- AlicenseAqualityAmaintenanceControl any smart TV with natural language — play Netflix/YouTube/Spotify by name, cast URLs, scene presets, multi-room audio, and multi-TV sync. Supports LG, Samsung, Android TV, Roku.2346MIT
- FlicenseNot gradedqualityDmaintenanceEnables controlling smart home devices like lights, fans, air conditioners, and Android TVs through natural language commands, with persistent state and TV content search/playback via ADB.1-
- AlicenseCqualityCmaintenanceEnables you to manage and automate interactions with Nature Remo devices, including listing devices and appliances, and operating TVs and air conditioners through natural language commands.4167MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to control Govee smart devices, including lights, via natural language. Supports turning on/off, changing colors, adjusting brightness, and activating scenes through the Govee API or local network.91MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fridaythethirteen/smart-appliance-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server