Skip to main content
Glama

Smart Appliance MCP

MCP를 지원하는 모든 LLM 클라이언트가 로컬 네트워크에서 스마트 가전을 발견하고 제어할 수 있게 해주는 MCP 서버입니다.

핵심 설계 선택은 어댑터 중심 라우팅입니다.

  1. discover_devices는 등록된 모든 어댑터로 스캔합니다.

  2. 발견된 각 기기는 자신의 provider를 저장합니다.

  3. 이후 호출은 deviceId만 사용하며, 서버는 기기를 찾아 발견 당시 확인된 어댑터로 명령을 라우팅합니다.

이 덕분에 클라이언트 프롬프트가 단순해집니다. LLM 클라이언트는 TV가 Roku, Home Assistant, Samsung, LG, Matter 또는 다른 어떤 것인지 알 필요가 없습니다.

도구

  • discover_devices: 가전 기기를 찾아 이번 서버 선택세션 동안 기억합니다.

  • diagnose_discovery: 사용자가 기술적인 설정을 직접 편집하지 않아도 디스커버리 상태와 유력한 네트워크 차단 원인을 설명합니다.

  • list_known_devices: 이미 발견된 기기 목록을 반환합니다.

  • get_device_controls: 한 기기에서 사용할 수 있는 기능을 보여줍니다.

  • discover_apps: 발견된 미디어 기기가 노출하는 앱 실행 대상을 조사합니다.

  • search_apps: 발견된 앱을 이름, 패키지 ID, 카테고리 힌트, 실행 가능성 기준으로 검색합니다.

  • pair_device: 공급자가 요구하는 경우 일회성 사용자 페어링을 시작합니다.

  • complete_pairing: 제품에 표시된 코드로 페어링을 완료합니다.

  • list_pairings: 로컬에 저장된 페어링 목록을 표시합니다.

  • remove_pairing: 로컬에 저장된 페어링을 제거합니다.

  • control_device: 볼륨, 브라우징, 전원, 검색, 앱 실행 등의 조작을 수행합니다.

  • search_content: 지원되는 경우 설치된 앱 또는 네이티브 콘텐츠 제공자를 검색합니다.

  • suggest_content: 어댑터를 고려한 시청 추천을 반환합니다.

  • record_watch_event: 시청, 좋아요, 나중에 보지 않음, 시청 시작한 콘텐츠를 기록합니다.

  • list_watch_history: 추천에 사용하는 최근 로컬 시청 기록을 표시합니다.

  • recommend_content: 카테고리, 최신성, 앱, 시청 기록, 앱 실행 가능성 기준으로 다음에 볼 콘텐츠를 순위화합니다.

  • get_device_state: 어댑터가 지원하거나거할 때 현재 기기 상태를 반환합니다.

Related MCP server: MCP Roku Control

포함된 어댑터

  • roku: SSDP 기반으로 Roku TV 및 Roku 스트리밍 기기를 발견하고, Roku ECP를 통해 제어합니다.

  • smart_appliance_companion: mDNS로 선택형 TV 보조 앱을 발견하고, 설치된 앱 목록 제공 및 패키지 실행에 사용합니다.

  • google_tv_remote: mDNS Google Cast 신호 및 DIAL/SSDP를 통해 Google TV / Android TV 기기를 발견한 후, 일반적인 리모컨 스타일 페어링 흐름을 제공합니다.

  • home_assistant: TV, 조명, 스위치, 온도조절기 등을 위한 선택형 광범위 가전 브리지입니다.

  • google_tv: 개발·테스트 전용 선택형 ADB 대체 기능입니다. ENABLE_ADB_ADAPTER=true로 활성화합니다.

빠른 시작

npm install
npm run build
npm start

로컬 개발 환경:

npm run dev

클라이언트 구성

프로젝트를 빌드한 다음, MCP 클라이언트에 다음과 같은 서버 항목을 추가하세요:

{
  "mcpServers": {
    "smart-appliance": {
      "command": "node",
      "args": ["/absolute/path/to/smart-appliance-mcp/dist/index.js"]
    }
  }
}

Home Assistant를 사용한다면 다음도 추가하세요:

{
  "env": {
    "HOME_ASSISTANT_URL": "http://homeassistant.local:8123",
    "HOME_ASSISTANT_TOKEN": "your-long-lived-access-token"
  }
}

Google TV / Android TV의 경우 소비자 페어링 방식을 사용합니다. 서버는 mDNS _googlecast._tcp.local 및 DIAL/SSDP와 같은 로컬 네트워크 신호로 TV를 발견한 뒤, 발견된 기기 레코드에 주소를 내부적으로 저장합니다.

의도한 사용자 흐름은 다음과 같습니다:

Discover my smart appliances.
Pair my living room TV.
Complete pairing with code 123456.
Turn the TV volume up.

발견된 Google TV 기기는 provider: "google_tv_remote"를 사용합니다. 페어링 상태는 로컬에 저장되며, 다른 모든 공급자와 동일한 어댑터 레지스트리를 통해 라우팅됩니다.

Google TV remote 어댑터는 로컬 디스커버리, 소비자 페어링, 실시간 원격 제어, 앱 실행 조사, 어댑터 라우팅 명령 실행을 포함합니다. ADB 어댑터와 GOOGLE_TV_REMOTE_DEVICES 오버라이드는 일반 사용자 설정이 아닌, 선택적 개발 진단 용도로만 유지됩니다.

앱 디스커버리도 의도적으로 어댑터 기반입니다. Google TV에서 discover_app_s는 TV가 로컬로 노출하는 실행 진통점, 예를 들어 DIAL /apps/<name> 엔드포인트를 탐지합니다. TV가 리모컨이나 DIAL 인터페이스를 통해 설치된 앱 목록을 노출하지 않는 경우, 서버는 추측한 패키지나 브라우저 URL을 실제 디스커스된 것처럼 처리하지 않고, 그 한계를 명확히 보고합니다.

최상의 Google TV 환경을 원한다면 companion/google-tv에서 제공하는 옵션 보조 앱을 설치하세요. 이 보조 앱은 TV에서 실행되며 _smart-appliance._tcp.local을 광고하고, Android PackageManager로 설치된 Leanback 실행기 앱을 나열한 뒤, 패키지 이름으로 앱을 직접 실행합니다. 이 경로는 DIAL 시작 엔드포인트를 제공하지 않는 Crunchyroll 같은 앱을 위한 일반 사용자 경로입니다.

추천

추천 계층은 로컬 우선이며 어댑터를 인식합니다.

  1. 어댑터의 시청 기록은 발견된 기기가 제공할 수 있을 때 우선 사용됩니다.

  2. record_watch_event는 앱, 제목, 카테고리, 진행도, 상태를 포함하는 가벼운 로컬 대체 기록을 저장합니다.

  3. recommend_content는 TV 기반 기록, 로컬 대체 기록, 제공된 콘텐츠 카탈로그, 초기 시드 행을 병합합니다.

  4. 결과는 최신성, 최근 시청과 차지하는 카테고리 일치, 사용 가능한 앱, 실행 가능성, 시청/해제 상태를 기준으로 점수화됩니다.

  5. 응답은 최신 recommendations와 alreadyWatched 및 dismissed 항목을 구분합니다.

  6. 각 추천에는 표시용 요약인 userSummary/userReasons와, 내부(Inclusion) 상세 계획용 필드가 있습니다.

  7. 바로 실행 가능한 추천 행에는 이미지와 작업이 포함됩니다:

    • artwork.thumbnailUrl, posterUrl, backdropUrl

    • actions.preview: 카탈로그가 previewUrl/trailerUrl을 제공할 때 위한 예고편/미리보기 클립

    • actions.primary: MCP 도구 호출 페이로드로 표현된 원클릭 시청 동작

  8. chatCards와 format_recommendation_cards는 같은 결과를 채팅용 클라이언트 방식으로 렌더링합니다:

    • 이미지는 카탈로그가 제목별 고유 이미지를 제공할 때만 포함됩니다.

    • 미리보기 링크는 일반 웹 URL을 사용합니다.

    • 시청/검색 링크는 mcp://action?... URL을 사용하며, 이는 호스트 클라이언트가 사용확인 후 실행할 MCP 도구 호출을 나타냅니다.

현재 어댑터가 TV 시청 기록을 제공할 수 없으면 list_watch_history, recommend_content, format_recommendation_cards는 선택적으로 companionPrompt를 반환합니다. Google TV의 소비자 리모컨 프로토콜은 넷플릭스 스트리밍 기록을 비공개로 유지하므로, 정확한 콘텐츠 기록은 공급자 통합 또는 선택형 TV측 보조 앱이 필요합니다.

공급자 카탈로그는 계속 변하기 때문에 운영 환경 클라이언드는 항상 최신 카탈로그를 recommend_content에 직접 넘겨야 합니다. MCP는 어댑터나 커넥터가 제공하지 않는 한 Netflix/Crunchyroll 카탈로그를 제공한다고 주장하지 않습니다.

프런트엔드 시청 대기열

즉시 반응 가능한 추천을 위한 로컬 UI 실행:

npm run ui

http://localhost:5177을 여세요. UI는 MCP 추천 결과를 카드형태(이미지, 미리보기, 원클릭 시청, 필터, 검색, 이미 시청한 패널)로 표시합니다. {} 버튼을 누르면 어떤 LLM 클라이언트에서든 recommend_content 응답을 붙여넣기할 수 있습니다.

채팅용 카드가 필요하다면 recommend_content와 같은 입력으로 format_recommendation_cards를 호출하세요. 이 함수는 버튼 대신 링크로 연결된 cards와 마크다운을 반환합니다. 기본적으로 링크는 로컬 UI 작업 엔드포인트를 가리키므로 npm run ui를 유지하세요:

[Watch on TV](http://127.0.0.1:5177/api/actions/run?payload=...)

호스트 클라이언트가 mcp://action?... URL을 직접 지원한다면 linkMode: "mcp_scheme"을 사용할 수 있습니다.

도구 흐름 예시

먼저 클라이언트에 요청합니다:

Discover my smart appliances.

그다음:

Turn the living room TV volume up.

MCP 서버는 라우팅을 내부적으로 처리합니다:

const device = registry.getDevice(deviceId);
const adapter = registry.adapterFor(device);
await adapter.control(device, request);

새 어댑터 추가

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 };
  }
}

그다음 src/index.ts에서 등록하세요:

registry.register(new SamsungTizenAdapter());

디스커버리는 여전히 근거가 되는 정보의 원천입니다. Samsung TV가 provider: "samsung_tizen"으로 발견되면, 그 후 해당 deviceId의 모든 명령은 Samsung 어댑터로 자동 라우팅됩니다.

참고 사항

  • 로컬 네트워크 디스커버리는 사용 네트워크가 멀티캐스트/SSDP를 허용해야 합니다.

  • 일부 TV 생태계는 제어 전에 페어링을 요구합니다. 이러한 어댑터는 MCP 도구 또는 리소스로 페어링 흐름을 제공해야 합니다.

  • 콘텐츠 추천은 어댑터를 인식하지만, 기기 기능과 호스트 LLM 클라이언트의 취향/프로파일 맥락을 결합하면 더 강력해질 수 있습니다.

Available Tools

18 tools
complete_pairingA

Complete consumer pairing for a discovered device using the code shown by the appliance.

NameRequiredDescriptionDefault
codeYes
deviceIdYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
valueNo
actionYes
payloadNo
deviceIdYes

TDQS

D1.9/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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

Schema description coverage is 0%, so the description must explain 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.

Purpose2/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
deviceIdYes

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. 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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema coverage is 0%, so the description must 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
timeoutMsNo

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0%, and the description 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.

Purpose5/5

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

The description clearly states a specific action ('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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
appsNo
moodNo
limitNo
catalogNo
deviceIdYes
linkModeNo
categoriesNo
maxAgeDaysNo
excludeAppsNo
includeSeenNo
actionBaseUrlNo

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
deviceIdYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention 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.

NameRequiredDescriptionDefault
deviceIdYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

For a simple tool with 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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness4/5

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

Given the tool's low complexity (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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
limitNo
deviceIdNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
deviceIdYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
appsNo
moodNo
limitNo
catalogNo
deviceIdYes
categoriesNo
maxAgeDaysNo
excludeAppsNo
includeSeenNo
chatLinkModeNo
actionBaseUrlNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
appIdNo
titleYes
sourceNo
statusNo
deviceIdNo
watchedAtNo
categoriesNo
progressPercentNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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

Schema description coverage is 0%, so the description must 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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
deviceIdYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full burden 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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

Schema description coverage is 0% and the description 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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
limitNo
queryNo
deviceIdYes
onlyLaunchableNo

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
queryYes
deviceIdYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description must disclose 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
promptNo
deviceIdYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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

Schema description coverage is 0%, so the description must explain 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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 18 tool updatesv0.1.0
    • First observedcomplete_pairing
    • First observedcontrol_device
    • First observeddiagnose_discovery
    • First observeddiscover_apps
    • First observeddiscover_devices
    • First observedformat_recommendation_cards
    • First observedget_device_controls
    • First observedget_device_state
    • First observedlist_known_devices
    • First observedlist_pairings
    • First observedlist_watch_history
    • First observedpair_device
    • First observedrecommend_content
    • First observedrecord_watch_event
    • First observedremove_pairing
    • First observedsearch_apps
    • First observedsearch_content
    • First observedsuggest_content

TDQS

B3.1/5.0

Scored across 18 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers