Skip to main content
Glama
FasenChen

StreamXpress MCP Server

StreamXpress MCP Server

当前版本: 0.2.0(未发布)

基于 DekTec StreamXpress 的 MCP(Model Context Protocol)服务,让 AI 能够通过 SpRcApi 远程控制接口来操控 TS(Transport Stream)码流推送。

版本与发布

  • 版本号唯一来源是 pyproject.tomlproject.version,采用 Semantic Versioning。

  • 在 1.0.0 之前,MINOR 表示新增或调整兼容行为,PATCH 表示缺陷修复;破坏性变更会提升 MINOR 并在 README 中明确说明。

  • 每个版本的用户可见变更记录在 CHANGELOG.md;发布前把 Unreleased 改成日期、更新 README 当前版本、跑完整测试,然后提交 chore: release vX.Y.Z 并打 vX.Y.Z tag。

Related MCP server: Pro Tools MCP Server

前置条件

  • StreamXpress v3.x 已安装

  • 一块 DekTec 输出适配器(如 DTU-315),其硬件中烧录了相应授权:

    • DTC-302-RC(远程控制授权,-rc 远程控制模式必需)

    • DTC-300-SP(播放许可)或 DTC-300-NICP(本机网卡 IP 推送许可)

    这些许可证固化在 DekTec 设备硬件中,插入设备后 StreamXpress 会自动识别(设备信息中可见 Remote-control license: Yes),无需单独激活或配置文件。

  • Python 3.10+

关于 StreamXpress 的安装位置:StreamXpress 由 DekTec 安装程序安装,默认位于 C:\Program Files\DekTec\StreamXpress\,**不在系统 PATH 中**,不能直接在任意目录下执行 StreamXpress.exe。另外,可执行文件名可能是 StreamXpress.exe(v3.x)或 StreamXpress64.exe(部分版本),请以实际安装为准,用完整路径调用。

MCP 服务本身不需要把 StreamXpress 加进 PATH。launch / play 通过 config.jsonstreamxpress_path 启动本机 StreamXpress,再经 SpRcApi(http://localhost:<rc_port>)控制它。当前用法是本机 DTU-315 RF 出流:SOAP 只打 localhost,不做 TS-over-IP 远程推流。

配置文件

MCP 通过项目根目录的 config.json 集中配置,本仓库已直接携带一份字段留空的 config.json——编辑它即可,无需复制模板:

字段

说明

streamxpress_path

StreamXpress 可执行文件的完整路径(如 C:\Program Files\DekTec\StreamXpress\StreamXpress64.exe),launch 工具用它启动

sprc_api_path

SpRcApi 目录路径,默认留空(使用包内自带 wsdl);若填写,运行时优先使用 <sprc_api_path>\WSDL\SpRc.wsdl 作为 wsdl 来源

rc_port

远程控制端口,默认 5000

查找顺序:环境变量 STREAMXPRESS_MCP_CONFIG 指定的文件 → 项目根 config.json → 默认值。字段留空时使用默认值,不报错。

让本地路径修改不进 gitconfig.json 现在被 git 跟踪,直接编辑会出现在 git status。执行下面这一条即可让 git 忽略本地改动(仍保留仓库版本):

git update-index --skip-worktree config.json

想取消:git update-index --no-skip-worktree config.json

若以非 editable 方式安装(pip install .),项目根定位不适用,请用环境变量 STREAMXPRESS_MCP_CONFIG 指定配置文件路径。

快速开始

MCP 客户端(WorkBuddy、Claude Desktop 等)会用配置里的 command(默认 python)启动本服务,而客户端解析到的 python 通常不是项目 venv 里的 python。因此最简单的方式是直接把包装到当前 Python 环境,不使用 venv

# 1. 克隆并安装(装到当前 Python 环境,不使用 venv)
git clone <repo-url>
cd StreamXpress_MCP
pip install -e ".[dev]"

# 2. 以远程控制模式启动 StreamXpress
#    可执行文件不在 PATH 中;先在 config.json 里填好 streamxpress_path(见"配置文件"章节),
#    然后可用 MCP 的 launch 工具启动;也可手动用完整路径启动:
& "C:\Program Files\DekTec\StreamXpress\StreamXpress64.exe" -rc 5000

# 3. 运行 MCP 服务
python -m streamxpress_mcp

想用 venv 隔离? 可以,但注意:MCP 客户端配置里的 command 必须指向 venv 里的 python.exe 绝对路径(如 C:\...\StreamXpress_MCP\.venv\Scripts\python.exe),不能写裸的 python——否则客户端会用系统 Python 启动进程,因找不到 streamxpress_mcp 模块而立即退出,表现为 ModuleNotFoundErrorMCP error -32000: Connection closed

MCP 客户端配置

在 MCP 客户端的配置文件中添加(如 WorkBuddy 的 mcp.json、Claude Desktop 的 claude_desktop_config.json):

{
  "mcpServers": {
    "streamxpress": {
      "command": "python",
      "args": ["-m", "streamxpress_mcp"]
    }
  }
}

前提:command 里指定的 python 必须已安装本包(即执行过上面的 pip install -e "./[dev]")。按上方“不使用 venv”的方式安装则保持 "python" 即可;若包装在 venv 里,则必须把 command 改为该 venv 的 python.exe 绝对路径。

可用工具

工具注册名如左(不带前缀)。MCP 客户端(WorkBuddy、Claude Desktop 等)通常会在工具名前加上 MCP server 名前缀,例如 connect 在客户端中显示为 streamxpress_connect

破坏性变更: 工具面从 62 个 SpRcApi 透传/参数 setter 收成本机预设播放器工具(当前 9 个)。升级后请在 MCP 客户端重连/重启会话以刷新工具列表。

播放语义对齐 Dolby STAMP 的 DekTec handler:OpenFile(xml)OpenFile(码流)Play。XML 是 StreamXpress File → Save Settings 的调制/射频快照(一群码流可共用一份);码流路径由 play 显式传入,MCP 不做自动匹配。

工具

说明

launch

按 config.json 启动本机 StreamXpress(-rc 模式)并探测端口

connect

连接 StreamXpress RC 会话。默认 host=http://localhostport 默认为 config.json 的 rc_port

play

主入口:加载 settings XML → 加载码流 → 开播。未连接时会先连 localhost(必要时 launch),并自动选 DTU-315

pause

暂停播放并保留当前位置

resume

从暂停位置继续播放,不重新加载 XML 或码流

stop

停止播放

get_status

查询播放状态、进度、循环/速率信息、FIFO/下溢计数和健康摘要

clear_errors

清除播放错误计数

disconnect

断开 RC 会话

MCP 静态描述

下表是 FastMCP 从 server.py 函数 docstring 生成并通过 MCP 暴露给客户端的静态 tool description。为避免翻译造成语义漂移,这里保留实际描述原文;参数名称、类型和默认值另由 input schema 自动生成。

工具

静态描述

launch

Launch StreamXpress in remote-control mode using config.json settings. Reads streamxpress_path and rc_port from the project config.json at the repository root, starts StreamXpress with -rc <port>, and probes the port until the RC service is ready. Returns pid, port and readiness; use the returned port with connect.

connect

Connect to a StreamXpress instance running in remote-control mode. The StreamXpress must be started with: StreamXpress.exe -rc . Defaults are this machine (http://localhost) and rc_port from config.json.

play

Play a stream using a StreamXpress settings XML preset. Loads the XML first (modulation / RF / loop flags), then the stream file, then starts playout. One XML can be reused by a group of streams. Auto-connects to localhost StreamXpress and selects the DTU-315 (or the unique idle port) before opening files.

pause

Pause playout and preserve the current file position. Use resume() to continue from this position. Pause is not equivalent to stop(): stop exits hold mode, while pause keeps the player in hold mode.

resume

Resume playout from pause without reloading the stream or preset.

stop

Stop playout.

get_status

Get current playout state, progress, counters, and health summary.

clear_errors

Clear the StreamXpress playout error counter.

disconnect

Disconnect from the StreamXpress remote-control session.

play(settings_xml, stream, loop=True) 要求:

  • XML 根元素必须是 StreamXpressSettings(StreamXpress 保存的设置快照;Atsc3Xpress XML 不支持)

  • settings_xmlstream 都是 StreamXpress 所在机器(本机)上的绝对路径

关于 XML 里的 <Filename>:StreamXpress 的 OpenFile(xml) 会尝试打开 XML 内 <Filename> 指向的文件,该值留空会让 OpenFile 直接报 E_FILE_CANT_FIND (8195)。因此 play 会在调用前自动把码流路径注入一份临时 XML 副本(原文件不动,用完即删)——你无需手动编辑 XML 的 Filename 字段,直接把 StreamXpress 保存的设置 XML 传进来即可。

AI 交互示例

用户: 用 DVB-T2 474 MHz 那份预设播 SGP_SIPSI_1a.ts

AI 调用:
  1. play(
       settings_xml="D:\\SX_presets\\dvbt2_uhf_474m.xml",
       stream="D:\\Test_ts\\SGP_SIPSI_1a.ts"
     )
     # 内部:launch/连 localhost(若需要)→ 选 315 → OpenFile(xml) → OpenFile(ts) → PLAY
  2. get_status()
  3. pause()
  4. get_status()          # playout_state = PAUSE,position_percent 保持
  5. resume()
  6. get_status()          # health.num_errors / fifo_load 可用于监测下溢
  7. clear_errors()        # 需要重新开始错误观测窗口时使用
  8. stop()
  9. disconnect()

一群码流共用同一份 XML 时,只换 stream 路径即可。制式/频点/电平都在 XML 里,不在对话里现拼。

XML 用 StreamXpress GUI 调通一次后 File → Save Settings 生成。

许可证

本项目封装了 DekTec SpRcApi。使用本软件配合 StreamXpress 进行码流推送,需要 DekTec 设备提供相应授权:DTC-300-SP/NICP(播放授权)与 DTC-302-RC(远程控制授权)。这些许可证固化在 DekTec 设备硬件中,插入设备即可使用,无需单独购买或激活许可证文件。

Available Tools

12 tools
connectA

Connect to a StreamXpress instance running in remote-control mode.

The StreamXpress must be started with: StreamXpress.exe -rc

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesHTTP URL of the StreamXpress host, e.g. "http://localhost"
portYesTCP port the -rc listener is bound to, e.g. 5000

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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. It discloses the startup requirement but does not explain connection behavior (e.g., whether it is idempotent, what happens on failure, or if prior setup is needed beyond the -rc flag). This is insufficient for a state-changing 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?

Two short sentences with no filler. The essential information is front-loaded, and every word contributes to the purpose or usage prerequisite. Highly concise and well-structured.

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 role in a larger workflow (siblings include start, stop, select_port), the description does not mention that connect is a mandatory first step. An output schema exists, but the description does not indicate what a successful or failed connection returns. The description is adequate for a simple tool but lacks workflow context.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already well documented. The description adds a small amount of context by tying the port to the '-rc' listener, which slightly reinforces the schema's meaning but does not fundamentally expand it.

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

Purpose5/5

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

The description clearly states the action ('Connect') and the specific resource ('a StreamXpress instance running in remote-control mode'). This distinguishes the tool from siblings like 'disconnect' and 'scan_ports' and gives a precise purpose without ambiguity.

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

Usage Guidelines4/5

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

The description provides a critical prerequisite (starting StreamXpress with '-rc <port>'), which is essential context for when to use this tool. It does not explicitly mention when not to use it or compare with alternatives, but the intent is clear from the tool name and sibling set.

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

disconnectA

Disconnect from the StreamXpress remote-control session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 only states the action without detailing side effects (e.g., closing network connections, ending session, idempotency, or cleanup). This is a significant 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, simple sentence with no fluff or redundancy. It is perfectly concise and front-loaded, stating the essential information immediately.

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 low-complexity (0 parameters, simple action), but the description lacks context about session management, such as whether it is the counterpart to 'connect', whether it is safe to call multiple times, or what the output schema contains. The lack of annotations and behavioral details leaves some gaps.

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 input schema has zero parameters, so there is no parameter semantics to explain. Baseline is 4 for 0-param tools, and the description adds nothing beyond the schema, which is acceptable.

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 ('Disconnect') and the resource ('StreamXpress remote-control session'), distinguishing it from siblings like 'connect' and 'stop'. The verb+resource combination is specific and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage (call when you want to end the session) but provides no explicit guidance on when to use this tool versus alternatives like 'stop' or 'connect'. No exclusions or context are given, making the guidance minimal.

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

get_statusA

Get current playout status including position, wraps, filename, and bitrate.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the burden of behavioral disclosure. 'Get' implies a read-only operation, but it does not state whether a connection must be active, whether it returns real-time data, or any error conditions. The listed fields add some transparency, but the description lacks depth.

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 immediately identifies the action and resource. It includes the most important output fields without any wasted words.

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

Completeness4/5

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

Given the tool's simplicity (no params, output schema exists), the description covers the essential purpose and key return fields. It is complete enough for an agent to understand the tool's role, though a note about preconditions (e.g., needing a connection) would enhance completeness.

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 is not required to explain parameter meanings. The baseline for no parameters is 4, and the description correctly focuses on the output fields rather than nonexistent inputs.

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 'Get' with a clear resource 'current playout status' and lists concrete fields (position, wraps, filename, bitrate). It clearly distinguishes this tool from sibling control tools like start, stop, and set_rate, which are all action-oriented.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description only states what it does, not when or whether it should be preferred over other tools. Sibling tools like connect, open_file, and start suggest a workflow, but the description gives no explicit context for using get_status.

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

open_fileC

Open a TS file for playout.

ParametersJSON Schema
NameRequiredDescriptionDefault
filepathYesFull path to the .ts file or StreamXpress .xml settings file

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/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 side effects (e.g., overwriting current file), prerequisites (e.g., requiring an active connection), or additional accepted file types (the schema mentions XML settings). The single clause 'for playout' gives minimal context but lacks necessary behavioral detail.

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 with the core action front-loaded. It is not bloated, but it is slightly under-specified; however, for the purpose of conciseness it is well-sized.

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?

Even though the tool is simple and an output schema exists, the lack of annotations and workflow context leaves gaps. The description does not mention that opening a file might replace the current one, require a connection, or that it can open XML settings files. Given sibling tools suggest a connected workflow, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100% for the only parameter, so the baseline is 3. The tool description adds no parameter-level meaning; the schema's filepath description ('Full path to the .ts file or StreamXpress .xml settings file') is actually richer than the tool description. No bonus is warranted.

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 'Open a TS file for playout' clearly states the verb (open) and resource (a TS file) for a distinct action compared to sibling tools like connect, start, or set_rate. However, it omits that the filepath parameter can also be a StreamXpress .xml settings file, making the description slightly incomplete and narrower than the schema.

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

Usage 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, nor any indication of prerequisites (e.g., must be connected first) or typical workflow ordering (e.g., open_file before start). The description simply states the action without context.

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

scan_portsA

Scan for available output ports on the connected StreamXpress.

Returns a list of port descriptors with serial, type, and output capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It states the operation (scan) and return value (port descriptors with serial, type, output capabilities). However, it does not explicitly state that the operation is read-only or safe, nor does it mention any prerequisites like an active connection (only 'connected' as an adjective). This is adequate but not fully transparent.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the purpose and followed by the return value. Every sentence is informative and there is no waste, padding, or repetition. Structure is excellent.

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

Completeness5/5

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

Given the tool has no parameters and an output schema that likely documents the return fields, the description is fully complete. It explains what the tool does and what it returns, with no need to detail return structure (handled by schema) or prerequisites beyond the implied connection. This is a self-contained, sufficient description.

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 100% schema coverage (empty schema). The baseline for zero parameters is 4, and there is no parameter meaning to convey. The description correctly implies that the tool requires no additional input.

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 ('Scan') and clearly identifies the resource ('available output ports on the connected StreamXpress'). It distinguishes itself from sibling tools like 'connect' and 'select_port' by focusing on enumeration of ports. This is a clear and unambiguous purpose.

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

Usage Guidelines4/5

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

The description implies usage context by mentioning 'on the connected StreamXpress', suggesting it should be called after establishing a connection. It doesn't explicitly name alternatives or exclusions, but its complementary role to select_port is evident. This gives reasonable context without explicit 'when not to use' guidance.

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

select_portB

Select a physical output port for playout.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesDevice serial number (from scan_ports)
port_numYesPhysical port number on the device
modulationNoInitial modulation standard (0=none, use SPRC.MOD_* constants)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations are absent, so the description must carry the burden of behavioral disclosure. It does not explain whether this operation mutates state, has side effects, or requires specific conditions. The single sentence adds no transparency beyond what 'select' implies.

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 with no redundant words. It is appropriately sized for a straightforward selection 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?

The presence of an output schema reduces the need to explain return values. The schema also documents prerequisites (serial from scan_ports). However, the description alone does not place the tool within a broader setup workflow or mention potential side effects, leaving some gaps.

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 input schema covers 100% of parameters with descriptions, so the baseline is 3. The description itself adds no parameter-specific meaning, but the schema already provides sufficient details such as 'serial from scan_ports' and 'modulation standard'.

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 a specific verb ('select') and resource ('physical output port for playout'), clearly indicating the tool's function. It differentiates from sibling tools like scan_ports and connect by focusing on choosing an output port for playout.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool or how it fits into a workflow. The schema mentions 'serial' comes from scan_ports, but the description itself does not reference prerequisites, alternatives, or sequencing.

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

set_asi_paramsC

Set ASI output parameters.

ParametersJSON Schema
NameRequiredDescriptionDefault
remuxNoEnable real-time remultiplexing (add null packets to match output rate)
tx_modeNo0=188-byte packets, 2=204-byte (Add16), 3=188-from-204 (Min16)
playout_rateNoOutput rate in bps (0 = use file native rate)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior1/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, but it merely restates the tool's action. It does not mention side effects, whether settings apply immediately, whether a restart is needed, or any dependencies.

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 compact sentence with no wasted words, which is structurally concise. However, it is under-specified rather than helpfully concise, omitting context that would aid tool selection and invocation.

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 no annotations, this description is insufficient: it lacks usage guidelines, behavioral context, and sibling differentiation. The presence of an output schema and full input schema reduces the need for return-value documentation, but the tool still needs more contextual guidance.

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 input schema has 100% coverage with descriptions for all three parameters, so the baseline is 3. The description adds no additional parameter semantics, but the schema already documents remux, tx_mode, and playout_rate.

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 'Set ASI output parameters' clearly names the verb (set) and resource (ASI output parameters), matching the tool name. However, it does not explain what ASI is or differentiate this from sibling tools like set_tsoip_params or set_rf_params.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as set_rate or the other *_params tools. There are no prerequisites, context, or exclusions stated, leaving the agent to guess.

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

set_rateA

Set the TS playout bitrate in bits per second (188-byte packets).

ParametersJSON Schema
NameRequiredDescriptionDefault
rate_bpsYesTarget bitrate, e.g. 25_000_000 for 25 Mbps

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are present, and the description only states the tool's action without disclosing side effects, constraints, or interaction with other settings. The detail about 188-byte packets adds technical context but does not explain behavioral traits such as valid ranges, persistence, or call timing.

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, information-dense sentence that immediately conveys the action, target, and unit. It contains no filler or redundant information, earning a perfect score for conciseness.

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 one-parameter setter with an output schema, the description covers the core purpose and parameter semantics. However, it omits operational context such as when the setting takes effect or any prerequisites, making it minimally adequate but not fully complete.

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 schema already fully describes the parameter (rate_bps) with an example, and the description enhances it by specifying the measurement basis (188-byte packets). This additional semantic detail helps distinguish the intended bitrate calculation from raw data rate, adding value beyond the schema.

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 'Set' and the resource 'TS playout bitrate' with explicit units ('bits per second (188-byte packets)'). It distinguishes itself from sibling set_* tools by targeting the rate specifically, leaving no ambiguity about its function.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives or prerequisites (e.g., whether the device must be connected or if the rate can be changed during playout). Sibling tools like set_tsoip_params or set_rf_params are not referenced, so the description offers no usage context.

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

set_rf_paramsA

Set RF output frequency and level (modulator ports only).

ParametersJSON Schema
NameRequiredDescriptionDefault
level_dbmYesOutput level in dBm, e.g. -37.5
frequency_hzYesCenter frequency in Hz, e.g. 500_000_000 for 500 MHz

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.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 must disclose behavioral traits. It only states the operation and scope, but does not mention side effects, prerequisites (e.g., connection or selected port), or whether the change is immediate or persistent. This leaves significant ambiguity for a mutation 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, focused sentence that front-loads the core action. It contains no filler or redundant information, making it highly efficient.

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 simple 2-parameter tool with full schema and an output schema, the description covers the essential purpose and scope. It lacks explicit prerequisites like requiring an active connection or selected port, but the context is largely complete given the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters fully described in the input schema. The tool description adds no additional parameter meaning beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific action 'Set' and the resource 'RF output frequency and level', clearly identifying what the tool does. The parenthetical 'modulator ports only' differentiates it from sibling tools like set_asi_params or set_tsoip_params, which target other parameter types.

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 gives a clear usage constraint: 'modulator ports only', indicating when this tool is appropriate. While it doesn't explicitly name alternatives, the scope is evident from the context, and the sibling tools' names imply distinct parameter sets.

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

set_tsoip_paramsB

Configure TS-over-IP output parameters (UDP/RTP).

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTime-To-Live for multicast
dest_ipYesDestination IP address, e.g. "239.1.1.1" (multicast) or "192.168.1.100" (unicast)
fec_colsNoFEC matrix columns (L), 0 disables FEC
fec_rowsNoFEC matrix rows (D), 0 disables FEC
protocolNo"UDP" or "RTP"UDP
dest_portYesDestination UDP port, e.g. 1234
num_tp_per_ipNoNumber of TS packets per IP packet (1-7)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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. It only states that the tool 'configures' parameters without revealing whether changes take effect immediately, whether they overwrite existing settings, what happens on invalid input, or whether a restart is required. This is a significant gap for a configuration/mutation tool.

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, focused sentence with no redundancy. It earns its place by clearly stating the tool's purpose, but it could arguably be more informative without becoming verbose.

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?

Despite being a simple configuration tool, the description lacks essential context: it does not specify whether the destination must be set before starting, how the FEC/TTL settings interact, or what state the output must be in. The existence of an output schema reduces the need to describe return values, but the sparse description leaves gaps in operational usage.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions for all 7 parameters, so the baseline is 3. The description adds minimal contextual framing by identifying these as 'output parameters' but does not elaborate on any specific parameter meanings beyond what is already in the schema.

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 ('Configure') and a specific resource ('TS-over-IP output parameters'), and it explicitly mentions the protocol scope (UDP/RTP). This clearly distinguishes it from sibling tools like set_rf_params and set_asi_params, which target different output types.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, whether it should be called before start, or how it relates to set_rf_params/set_asi_params. The context is only implied by the tool name and the phrase 'UDP/RTP'.

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

startA

Start TS playout on the selected port.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 does not mention prerequisites (e.g., must have an open file or connected port), side effects (e.g., begins streaming), error conditions, or whether the operation is reversible.

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, direct sentence with no wasted words. It is front-loaded with the action verb.

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 no parameters and an output schema, so the description need not cover return values. However, the lack of behavioral transparency and explicit usage guidance leaves some gaps for an agent deciding how and when to invoke this tool.

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 parameter semantics baseline is 4. The description does not need to add parameter information, and none is provided.

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 ('Start'), the resource ('TS playout'), and the context ('selected port'). It distinguishes from the sibling tool 'stop', which performs the inverse operation.

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 phrase 'on the selected port' implies that a port must first be selected via 'select_port', but the description does not explicitly state when to use this tool or mention any alternatives. There are no exclusions or conditions provided.

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

stopA

Stop TS playout.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the core action ('Stop TS playout') but does not disclose side effects, idempotence, error behavior, or whether any state is required. This is a significant gap for an operation that mutates playout 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 zero wasted words. It immediately communicates the action and target, making it perfectly concise for a tool with no parameters.

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 simplicity of a zero-parameter stop action and the presence of an output schema, the description is nearly complete. However, it lacks any context about behavioral expectations (e.g., whether it errors if nothing is playing), but this is a minor gap for such a simple tool.

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

Parameters4/5

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

The tool has zero parameters, so there is nothing to document. Per the rubric, a baseline of 4 is appropriate when no parameters exist; the description adds no parameter-specific information because none is needed.

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 'Stop TS playout' uses a specific verb ('Stop') and clearly identifies the resource ('TS playout'). It is concise and directly contrasts with sibling tool 'start', making its purpose unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, whether it should only be called after 'start', or any conditions for safe use. The tool name implies usage, but the description offers no explicit context.

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. 12 tool updatesv0.1.0
    • First observedconnect
    • First observeddisconnect
    • First observedget_status
    • First observedopen_file
    • First observedscan_ports
    • First observedselect_port
    • First observedset_asi_params
    • First observedset_rate
    • First observedset_rf_params
    • First observedset_tsoip_params
    • First observedstart
    • First observedstop

TDQS

A3.5/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: connection management, port scanning/selection, file opening, playout start/stop, status retrieval, and parameter configuration. No two tools appear to do the same thing.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern (e.g., scan_ports, select_port, open_file, set_rate). The few single-word verbs (start, stop, connect, disconnect) are acceptable but slightly inconsistent with the underscore-separated verb_noun style.

Tool Count5/5

12 tools is well within the ideal range for a device control server. Each tool covers a necessary aspect of playout control, and there is no bloat or redundancy.

Completeness4/5

The tool surface covers the core lifecycle: connect, configure port, open file, start/stop, query status, and adjust parameters. Notable gaps include lack of pause/resume or file listing, but these are not critical for the apparent primary workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to develop, test, and certify Roku applications by providing direct control over device functions like app deployment, remote input, and SceneGraph inspection. It supports automated workflows including real-time log collection, media monitoring, and certification verification.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to control Pro Tools via the PTSL gRPC API, providing session management, timeline navigation, track control, clip management, editing, markers, transport, audio analysis, and more.
    18
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to develop, deploy, navigate, inspect, and debug Roku BrightScript and SceneGraph applications with direct hardware control.
    -