Skip to main content
Glama
gethshap

Windows Telnet MCP

by gethshap

Windows Telnet MCP(Telnet + SSH + 串口服务器 TCP)

一个只在 Windows 上运行的本地 MCP Server,用来启动和实时操作真正可见的 Windows Telnet、OpenSSH 或串口服务器原始 TCP 客户端窗口。

它不是把客户端放进匿名管道或 ConPTY 的无头封装:每个会话都由系统 conhost.exe 承载,用户能在桌面上看到窗口、手工输入,并与 MCP 交替接管同一个会话。MCP 通过 Windows Console API 读取屏幕缓冲区、写入键盘事件。三种协议共用控制台 worker、工具处理函数与进程回收实现。

环境要求

  • Windows 10/11 或带桌面会话的 Windows Server

  • Node.js 22 或更高版本

  • Windows PowerShell 5.1 (powershell.exe) 或 PowerShell 7 (pwsh.exe)

  • Windows Telnet Client 可选功能(使用 Telnet 时)

  • Windows OpenSSH Client,路径为 %SystemRoot%\System32\OpenSSH\ssh.exe(使用 SSH 时,无需安装 sshd 服务端)

  • Windows 自带 .NET Framework 4.x 及其 csc.exe(使用串口 TCP 时;无需 .NET SDK、Visual Studio 或第三方终端)

本机尚未安装 Telnet 时,在“管理员”终端中执行:

dism /online /Enable-Feature /FeatureName:TelnetClient

然后安装依赖:

cd D:\work\windows-telnet-mcp
npm install

Related MCP server: Terminal MCP

配置 MCP 客户端

通用 stdio 配置:

{
  "mcpServers": {
    "windows-telnet": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": ["D:\\work\\windows-telnet-mcp\\src\\index.js"]
    }
  }
}

启动器优先使用 PowerShell 7;未安装时会自动回退到 Windows 自带的 PowerShell 5.1。也可用环境变量显式指定:

{
  "env": {
    "TELNET_MCP_PWSH": "C:\\Program Files\\PowerShell\\7\\pwsh.exe"
  }
}

VS Code 可把同一项放到 .vscode/mcp.jsonservers 下,并补上 "type": "stdio"

提供的工具

工具

作用

telnet_check

检查 Windows、Telnet、conhost 和 PowerShell 依赖

telnet_start

打开可见 Telnet 窗口;可直接连接主机,也可停在 Microsoft Telnet>

telnet_list

列出当前 MCP 进程创建的会话

telnet_status

查询进程和窗口状态

telnet_read

读取用户当前可见区域或最近的屏幕缓冲区

telnet_send

以控制台键盘事件输入文本,可选择追加 Enter

telnet_key

输入 Enter、方向键、CTRL+]CTRL+C 等按键

telnet_wait_for_text

等待提示符或其他文本出现

telnet_focus

恢复并前置真实 Telnet 窗口

telnet_close

优雅退出;必要时可强制关闭

建议调用顺序:

  1. telnet_check

  2. telnet_start

  3. telnet_wait_for_texttelnet_read

  4. telnet_send / telnet_key

  5. 重复读写

  6. telnet_close

telnet_start 不传 host 时不会建立网络连接,适合先确认窗口和 Telnet 命令提示符。传入 host 后会发起真实的出站连接。

SSH 用法

同一个 MCP 配置现在同时提供 ssh_checkssh_startssh_listssh_statusssh_readssh_sendssh_keyssh_wait_for_textssh_focusssh_close。原来的服务名称、配置路径、TELNET_MCP_PWSH 环境变量以及 telnet_* 参数保持兼容。两种协议分别维护会话列表,不允许用 telnet_* 操作 SSH 会话,反之亦然。

ssh_start 参数示例:

{
  "host": "192.0.2.10",
  "port": 22,
  "username": "admin",
  "identityFile": "C:\\Users\\you\\.ssh\\id_ed25519",
  "title": "MCP Windows SSH"
}

只有 host 必填,支持主机名、IP(IPv6 使用不带方括号的形式)或 SSH config 别名;用户名用单独的 username 字段。可选 identityFile 指向现有私钥,configFile 指向可信的 OpenSSH 配置;省略时沿用 OpenSSH 的常规用户/系统配置。主机密钥检查遵循 OpenSSH 和所选配置,不自动添加跳过校验的参数。首次连接如出现指纹确认,应先由用户核验。

ssh_start 成功只表示客户端窗口启动,ssh_status.running 也只表示进程存活;二者不代表已经登录。接着使用 ssh_read / ssh_wait_for_text 检查主机指纹、密码、密钥口令或远端提示符,再用 ssh_send / ssh_key 交互,也可以直接在可见窗口中操作。

优先使用密钥、ssh-agent 或在窗口中手动输入密码。通过 ssh_send 发送的内容不会在工具结果中回显,但 MCP 主机仍可能记录工具参数,不能视为不留痕的密码通道。

ssh_close 只接受 sessionId:关闭本地客户端并在必要时强制终止,不发送 Telnet 的 quit 或假定的远端 exit,因此在密码提示或远端应用中也不会误提交输入。这会断开连接,但不保证远端后台任务结束。若需要远端程序正常退出,应先主动执行该程序的退出操作。

串口服务器:原始 TCP 透传

适用于设备已配置为 TCP Server / Raw TCP 的串口服务器。Windows 作为 TCP 客户端连接它的 IP 和端口;不是在本机把 COM 口发布为服务器,也不创建虚拟 COM 口。波特率、数据位、校验位、停止位、流控及端口映射需要在串口服务器侧预先配置。

正式客户端是一个可见的 C#/.NET Framework 控制台程序,网络直接 P/Invoke 调用系统 ws2_32.dll 的 Winsock,不使用 TcpClient。这里“原生 Winsock”指网络接口,不代表整个程序是无 CLR 的 C++ 二进制。没有新增 npm 依赖;沿用项目已有 Node/MCP 运行环境,不安装 PuTTY、串口驱动或额外编译器。

首次使用或更新 C# 源码后,在项目目录构建一次(重建前关闭串口会话):

npm run build:serial

构建产物位于 .build/windows-serial-client.exe,不提交到仓库。构建脚本兼容 PowerShell 5.1/7,使用系统 .NET Framework 编译器;没有下载操作或后台自动编译。缺少产物时,serial_start 会给出构建提示。

同一个 MCP 配置新增 serial_check/start/list/status/read/send/key/wait_for_text/focus/close 共 10 个工具;会话与 Telnet、SSH 隔离。serial_start 示例(替换为设备实际地址):

{
  "host": "192.0.2.20",
  "port": 4001,
  "encoding": "utf8",
  "newline": "crlf",
  "connectTimeoutMs": 10000,
  "title": "Serial console"
}

hostport 必填;IPv6 不带方括号。编码支持 utf8(默认)、gbkasciilatin1,回车支持 crlf(默认)、crlfconnectTimeoutMs 限制 DNS/建立 TCP 连接,总计 100–120000 ms;它不是远端设备响应超时,也不是 serial_start 的等待时长。

serial_start 成功仅表示可见进程启动,serial_status.running 仅表示进程存活。先用 serial_readserial_wait_for_text 检查 [serial] CONNECTED(仅表示 TCP 已建立),再检查设备提示符;需要唤醒设备时,由调用者明确发送 Enter。连接失败或超时、远端断开后客户端退出,会话自动移除;没有自动重连或重发命令。

serial_send / serial_key 仍操作真实控制台。输入即时编码发送,默认没有本地回显,远端回显原样显示;appendEnter 和 ENTER 按 newline 转换,方向/导航键发送 ANSI 序列,CTRL+C/CTRL+] 发送对应控制字节,不进入 Telnet 命令模式。编码器、解码器保留跨字符/分包状态。

这是文本终端接口,不是任意二进制/十六进制文件传输接口;不可表示的字符使用编码替代字符。无 Telnet 协商/IAC 转义,无 RFC 2217、TLS、Modbus RTU 帧处理或远程串口配置;serial_key 不提供 CTRL+BREAK,原始 TCP 没有通用的串口 BREAK、DTR/RTS 控制协议。需要这些能力时必须先确认设备协议,不能把控制指令猜作透传字节。

serial_close 只接受 sessionId,关闭本地窗口和连接,不发送 quit/exit。强制关闭不保证尚在缓冲区的字节送达;关键命令应先等待设备确认。MCP EOF、强杀、繁忙输入中的回收使用原有 Job Object 机制。

用 PowerShell TcpClient 调试

下面脚本仅作有界的一次性连通/收发调试,兼容 5.1/7;正式 MCP 不调用它。默认只观察数据,不主动发字节。示例显式发送 help 和回车,应换成设备支持且安全的命令:

.\scripts\debug-serial-tcp.ps1 -ServerHost 192.0.2.20 -Port 4001 -Text 'help' -AppendEnter -TimeoutMs 3000

连接和观察阶段各有 TimeoutMs 上限,观察期间持续收取 TCP 分片,不把一次 DataAvailable=false 当作响应结束;退出始终关闭连接。可选 -Encoding gbk -Newline cr。请先关闭占用端口的其他会话再调试,部分串口服务器只允许单客户端连接。原始 TCP 是明文,只应连接授权、可信网络内的设备。

统一连接管理

原有 30 个协议工具保持兼容,新增 7 个 connection_* 工具。连接配置保存设备入口,重启后保留;运行会话对应当前可见窗口,只属于创建它的 MCP 进程。保存或删除配置不操作设备,不关闭已打开的窗口。

工具

参数与用途

connection_list

可选 queryaliasgrouptagprotocol;搜索配置,返回候选 ID,不按重名或重复别名自动选择

connection_get

connectionId;读取完整配置和当前 revision

connection_save

profile;新建时不带 ID,更新时同时传 connectionIdexpectedRevision

connection_delete

connectionIdexpectedRevision;仅删除配置

connection_open

connectionId、可选 mode: "reuse"(默认)或 "new"

connection_sessions

可选 connectionId;统一列出当前实例的三种协议会话,包括旧工具直接打开的会话

connection_close

sessionId、可选 force;自动分发到正确协议,不删除配置

保存、打开和编辑

调用 connection_save,例如保存 SSH 入口:

{
  "profile": {
    "name": "机房核心交换机 SSH",
    "aliases": ["核心交换机", "Core-SW"],
    "group": "机房 A",
    "tags": ["核心", "网络设备"],
    "notes": "管理口入口,不在备注中填写密码",
    "protocol": "ssh",
    "options": {
      "host": "192.0.2.10",
      "port": 22,
      "username": "admin"
    }
  }
}

返回的 connection 包含 connectionIdrevision、时间和完整 profile。把该 ID 传给 connection_open,再使用返回的 sessionIdtools.read/send/key/... 操作窗口。初次 SSH 指纹仍需核验;管理层不自动填密码或发送初始化命令,客户端仍沿用原有认证机制(例如 OpenSSH 密钥认证)。

每条连接都可保存多个别名 aliases 和多个标签 tags,均为字符串数组,默认 [];各最多 32 项,每项去掉首尾空格后为 1–120 字符,不允许控制字符。旧配置没有 aliases 时按空数组读取,不会因此改写文件或增加版本。

connection_list 搜索示例:

{ "alias": "core-sw" }
{ "tag": "核心" }
{ "alias": "核心交换机", "tag": "网络设备", "protocol": "ssh" }

aliastag 分别按完整别名、完整标签匹配,不区分大小写;组合条件要求同时满足。query 是包含匹配,也会搜索别名和标签,例如 { "query": "core" } 可匹配别名 Core-SW。多个连接可以使用相同别名或标签,搜索返回所有候选,确定后仍按唯一 connectionId 打开,避免误连。

protocolsshtelnetserialoptions 复用相应 *_start 参数。保存的 Telnet 配置必须指定有效主机,直接调用 telnet_start 仍可不传主机;串口仍是 TCP Server / Raw TCP 模式,不是本地 COM,波特率等在设备侧配置。一条配置对应一种协议,同设备的不同入口可放在同一分组。

更新采用完整替换:先 connection_get,保留需要的 profile 字段,修改后连同 ID 和读取到的 revision(作为 expectedRevision)提交。省略的可选字段恢复默认值,不是局部合并。版本冲突时重新读取、核对变更,再提交;不自动强制覆盖。删除也必须提供当前版本。

不提供密码、私钥内容或启动命令字段,未知字段会被拒绝;可以保存私钥/SSH 配置的文件路径。备注等自由文本不是密码保险箱,切勿手工填入秘密。配置文件和它引用的 SSH 配置应视为可信本地配置;不要直接使用来源不明的文件。

会话行为与边界

  • 默认 reuse 返回该配置在当前实例中最早找到的可用会话,不重新连接、不自动切换焦点;可用返回的 tools.focus 前置窗口。需要另开一个窗口时显式用 mode: "new"

  • 同一配置的并发打开按顺序执行,复用请求会等待正在启动的窗口。不同配置可独立启动;不同 ID 即使指向同一地址也不自动合并。

  • 已开的会话保留启动时的配置快照。修改名称、地址甚至协议后,默认复用仍返回原窗口和原协议,并以 configurationChanged 提醒;用 new 才采用新配置,不暗中替换旧连接。

  • connection_sessions 返回启动版本和当前版本;配置被删除后,原窗口仍可操作、关闭,标记 configurationDeleted。不关联配置的直接会话,其 connectionIdnull

  • readiness: "unconfirmed" 表示未确认远端连接/登录就绪;配置列表不是在线探测结果。仍应读屏确认,不把可见窗口或存活进程当成登录成功。

  • 统一关闭沿用协议语义:Telnet 默认尝试 CTRL+]/quit,force: true 强制关闭;SSH/串口只关闭本地客户端,不向设备注入 quit/exit。

  • 多个 MCP 实例共享配置文件,但不共享运行窗口,不能凭别的实例的会话 ID 接管或关闭它。串口服务器可能只允许单连接,需要自行避免跨实例占用。

  • MCP 退出回收自己的全部会话;再次启动只读取配置,不恢复旧 PID、不自动重连。配置损坏时统一会话列表仍尽力返回运行会话并附 configurationError,关闭入口不依赖配置文件。

  • 对同一会话的重复关闭只执行一次;强制关闭请求可在优雅关闭未成功时升级。关闭进行中拒绝新读写,复用请求等待关闭结果,不把即将退出的窗口当成有效会话。

配置文件和写入保护

默认文件:%LOCALAPPDATA%\windows-telnet-mcp\connections.json。可以在 MCP 启动环境中设置 TELNET_MCP_CONNECTIONS_FILE 为其他绝对路径;环境配置改变后需要重启 MCP。只读列表不会创建文件,第一次保存时才创建目录与文件。不增加数据库或 npm 依赖,建议文件留在当前用户的本地私有目录,不要提交到 Git。

文件格式为 schemaVersion: 1connections 数组,最多 1000 条、10 MiB。保存时使用独占 .lock 文件串行化跨实例更新,在锁内重新读取并检查版本,然后同步写入同目录临时文件并替换目标文件;不先删除旧文件。坏 JSON、未知格式版本、重复 ID、校验错误均拒绝覆盖原文件。

读取接受 UTF-8(含 BOM),严格拒绝损坏的 UTF-8 编码;即使读取期间文件增长,也不会突破 10 MiB 的读取上限。协议启动参数在创建 worker 前校验,主机不能是命令行选项,用户名、路径及窗口标题不允许 NUL 或换行;IPv6 会话目标以 [地址]:端口 显示。

普通退出等待正在进行的保存完成;若写入时进程被强杀,可能留下 .lock.tmp 文件。下次会提示写锁超时,不会依据锁文件年龄或 PID 自动删锁。恢复步骤:停止使用该配置路径的所有实例,备份并检查配置文件,确认没有写入者后再手动移除对应 .lock,必要时处理同目录遗留 .tmp;重新启动后核对版本再操作。只对本地文件系统使用此方案,不把网络共享盘当作已验证的并发存储。

实现边界

  • MCP Server 的 stdout 只用于 JSON-RPC;Telnet 不继承该管道。

  • 每个会话有独立 worker,因此可以并行打开多个 Telnet 窗口。

  • worker 在启动控制台前加入独立的 Windows Job Object;其唯一句柄关闭时,系统回收该会话的进程树。因此 worker 被强杀也不依赖 PowerShell 清理代码来回收 telnet.execonhost.exe

  • 客户端发现后先固定进程句柄并验证属于当前 Job,再允许附着或进入清理状态;不只凭 PID/进程名决定要操作的进程。

  • MCP 退出时同时停止已启动和正在启动的 worker,并禁止新会话;worker 另外监听 MCP 父进程退出,覆盖父进程突然终止、工作线程忙碌等情况。

  • Telnet 自行退出时,worker 自动释放控制台并结束,会话随后从 telnet_list 移除。

  • 如果宿主的 Job Object 限制不允许建立上述生命周期保护,启动会失败,不会退回到可能遗留进程的启动方式。

  • 读取的是字符屏幕缓冲区,不是 OCR,速度快且不会受窗口遮挡影响。

  • 目前不抓取像素截图,也不支持鼠标事件;Windows Telnet 本身是字符终端,这两项不是必要能力。

  • Telnet 协议通常是明文的。不要通过不可信网络发送密码或敏感数据;有条件时应使用 SSH。

验证

快速单元回归(不打开终端窗口):

npm run test:unit

完整回归(会打开测试用可见窗口):

npm run check

worker 控制通道最多允许 64 个未完成请求,单条回复上限为 16 Mi 字符。请求超时、管道故障、非法回复或超限回复会停止对应会话并回收其进程树,不让已排队的命令继续在失去反馈的情况下执行;输入可能已部分送达,因此不得自动重试。错误不回显非法协议片段中的屏幕/凭据内容。实际终端发送、真实超时回收、UTF-8 分片、重复关闭和复用竞态均有回归测试。

该命令先用系统编译器构建串口客户端。串口集成测试连接临时本机 TCP 服务(IPv4/IPv6),在两种 PowerShell 下验证可见性、UTF-8/GBK 分片解码、编码/换行字节、控制键、无 Telnet 协商、远端断开和 MCP EOF/强杀回收。无需串口硬件或额外服务。回环测试不等于已验证具体硬件的端口映射、串口参数、时序或设备协议。

集成测试会使用检测到的 PowerShell 7 和 Windows PowerShell 5.1,短暂打开真正可见的 cmd.exe 控制台,覆盖读写、EOF 清理、客户端自行退出、worker 强杀、32,768 字符输入中断,以及读屏字符边界。会话管理单元测试覆盖启动/关闭竞态、关闭幂等性和失败清理。

安装 Telnet 后,还会通过 MCP 工具测试真实 telnet.exe:连接测试临时创建的 127.0.0.1 随机端口,验证收发、优雅关闭、自行退出、长输入期间的 MCP EOF,以及 MCP 强杀后的回收。只连接本机,不需要账号或外部服务,也不需要安装 Telnet 服务端。未安装 Telnet 时,这组测试会明确标记为 skipped。

SSH 集成测试同样使用真实的 Windows ssh.exe,连接仅绑定 127.0.0.1 的临时 SSH 测试服务,验证密码交互、键盘输入、备用屏幕、密码提示下关闭、远端退出、MCP 崩溃回收以及 Telnet/SSH 混合会话退出。测试主机密钥在内存中生成,只在独立临时目录写测试配置和公开的 known_hosts,结束后删除;不改用户的 SSH 配置,不注册系统服务。ssh2 仅为测试开发依赖,实际 MCP 运行时依赖不变;未安装 OpenSSH Client 时 SSH 测试标记为 skipped。

文件结构

  • src/index.js:MCP 工具、会话管理和 MCP stdio transport

  • src/session-options.js:旧协议工具与连接配置共用的参数校验

  • src/connection-store.js:连接配置持久化、搜索、跨实例写锁与版本检查

  • src/connection-manager.js:协议分发、重复打开保护和统一会话入口

  • src/windows-console-worker.ps1:Win32 Console API、可见进程启动及实时读写

  • src/windows-serial-client.cs:可见串口服务器 Raw TCP 终端,直接使用原生 Winsock

  • scripts/build-serial.ps1:使用 Windows 自带编译器构建串口客户端

  • scripts/debug-serial-tcp.ps1:仅用于调试的 PowerShell TcpClient 收发脚本

  • test/mcp.test.js:MCP 握手和真实 Telnet/SSH/串口 TCP 本机集成测试

  • test/serial-debug.test.js:TcpClient 调试脚本在 PowerShell 5.1/7 下的 IPv4/IPv6 收发和断开测试

  • test/worker.test.js:真实可见控制台读写和进程回收回归测试

  • test/session.test.js:会话生命周期与竞态单元测试

  • test/worker-protocol.test.js:控制通道分帧、非法回复、超时、排队限额及错误脱敏测试

  • test/connections.test.js:持久化、并发更新、损坏保护、版本冲突和统一管理回归测试

  • test-support/connection-fixture.js:独立临时配置目录,不读写真实用户连接配置

  • test-support/windows.js:测试用 PowerShell 检测和进程退出检查

  • test-support/ssh-peer.js:仅供测试的临时本机 SSH 服务

  • docs/design.md:方案研究与取舍

Available Tools

10 tools
telnet_checkCheck Windows Telnet prerequisitesA
Read-only

Checks whether this machine can open and control a visible Windows Telnet client.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint annotation already signals no mutation, and the description adds useful context: the check is local, capability-oriented, and specific to a visible Windows Telnet client. No contradictory behavioral claims are present.

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?

One sentence delivers the complete purpose without filler. The key scoping information is front-loaded and the title reinforces the meaning.

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 zero-parameter, read-only capability check, the description is nearly sufficient. 'Checks whether' implies a boolean or status result, though an explicit return contract would be marginally clearer given the absence of an output schema.

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 the schema covers all relevant input. With no parameters, the description has no semantic burden for arguments.

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 ('checks whether') and a specific resource ('this machine can open and control a visible Windows Telnet client'). It is clearly not a status/read/send operation, though it does not explicitly name a sibling to distinguish itself from.

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 title says 'prerequisites' and the description implies this should be used before attempting to open/control a Telnet client. However, there is no explicit statement of when to use it versus telnet_status or telnet_start, nor any exclusions.

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

telnet_closeClose Windows Telnet sessionA
Destructive

Closes the visible Telnet session. Graceful mode sends CTRL+], then quit. Force mode closes or terminates the process if necessary.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo
sessionIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already signal destructive and non-read-only behavior. The description adds concrete behavioral detail: graceful mode performs CTRL+] then quit, and force mode terminates the process if needed. This goes beyond what annotations alone provide and helps the agent anticipate side effects and failure fallbacks.

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 tight sentences, no fluff. The main purpose is front-loaded and the two modes are summarized efficiently. Every clause contributes information.

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

Completeness4/5

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

For a two-parameter close operation with no output schema, the description is largely sufficient. It explains the key behavioral choice via force and relies on the destructive annotation for safety. The only notable gap is that 'sessionId' semantics are not explicitly connected to the close action, but this is relatively minor given the schema and sibling 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 0%, so the description must compensate. It explains the 'force' boolean semantics via graceful vs force mode, which adds real value. However, it does not explicitly describe 'sessionId' beyond the schema's type/pattern, leaving its role to be inferred from the tool name and context.

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 opens with a specific verb and resource: 'Closes the visible Telnet session.' It is distinct from sibling tools (read, send, start, list) and clarifies two execution modes. The term 'visible' adds useful scoping about which session is affected.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to end a telnet session) and even gives guidance on choosing graceful vs force mode. However, it does not explicitly compare against any sibling tools or mention when not to use it. The mode explanation provides usable context but stops short of full routing guidance.

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

telnet_focusFocus visible Telnet windowB

Restores and brings the real conhost.exe Telnet window to the foreground.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

B3.4/5.0
Behavior3/5

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

The description adds behavioral context beyond the annotations: it clarifies that the tool affects the real conhost.exe window and brings it to the foreground, and annotations indicate it is neither read-only nor destructive. However, it does not mention side effects such as stealing focus, potential failure conditions, or whether it can reveal a minimized or hidden window.

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

Conciseness5/5

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

A single clear, front-loaded sentence with no filler. It communicates the operation and target 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?

For a very simple tool with one parameter and no output schema, the purpose is stated clearly enough to attempt a call. Still, the description lacks usage conditions, parameter mapping, and behavioral side effects, so it is only minimally 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 sessionId or explain how it identifies the target Telnet session. The parameter name and UUID format make the meaning partially inferable, but the description itself provides no compensating semantic guidance.

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 exactly what the tool does: 'Restores and brings the real conhost.exe Telnet window to the foreground.' This distinguishes it clearly from sibling tools like telnet_start, telnet_close, and telnet_read by targeting window focus rather than session lifecycle or I/O.

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 explicit guidance is given about when to use this tool versus alternatives, when it is appropriate, or what prerequisites exist (e.g., the session must already be started and its window must exist). The usage context must be inferred entirely from the tool name and sibling list.

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

telnet_keyPress a key in Windows TelnetB

Sends one named key to the visible Telnet console. CTRL+] enters the Microsoft Telnet command prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
sessionIdYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already signal readOnlyHint=false and destructiveHint=false, and the description adds context by specifying that the key goes to the visible Telnet console and that CTRL+] enters the Microsoft Telnet command prompt. This adds useful behavior beyond the annotations, though it does not disclose further side effects or state changes from key presses.

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 concise sentences, with the core action front-loaded. Every word contributes meaning, and the CTRL+] note is a valuable short addition without bloat.

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 two-parameter key-sending tool, the description is mostly sufficient, but it lacks usage guidance, return behavior, and any mention of whether the console must already be visible or focused. The schema covers the key enum and sessionId format, but the description does not fully compensate for the missing parameter explanations.

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 sessionId or enumerate key meanings. The only slight addition is 'named key' and the CTRL+] behavior note, but most parameter semantics are left entirely to the schema enum and property names.

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

Purpose4/5

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

The description states a clear action ('Sends one named key') and a target ('the visible Telnet console'), so an agent can tell this is a keystroke-injection tool. It is not a tautology of the title, but it does not explicitly differentiate from sibling tools like telnet_send or telnet_focus.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives such as telnet_send or telnet_wait_for_text. There is no mention of prerequisites like a visible or focused console, nor any exclusion criteria, leaving the agent to infer usage context.

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

telnet_listList Telnet sessionsB
Read-only

Lists visible Windows Telnet sessions started by this MCP server process.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint annotation already covers the safety profile. The description adds useful scoping ('visible... started by this MCP server process') but leaves the term 'visible' undefined and does not disclose return format or pagination behavior. This adds context beyond annotations but not rich 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.

Conciseness5/5

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

A single, front-loaded sentence with no filler. Every word adds meaning: 'visible', 'Windows Telnet sessions', and 'started by this MCP server process' all contribute to the tool's purpose and scope.

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 no-parameter, read-only list tool, the description is mostly adequate: it states what is listed and the process scope. However, with no output schema, the description should hint at what the returned session list contains (e.g., IDs, names), and the ambiguous 'visible' could confuse an agent. This is a minor but real gap.

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

Parameters4/5

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

The tool has zero parameters, so the input schema is complete and there is nothing for the description to clarify. Baseline of 4 is appropriate; no parameter documentation is needed and the description correctly avoids inventing parameter details.

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 ('Lists') and resource ('visible Windows Telnet sessions started by this MCP server process'), which clearly defines scope. It does not explicitly name a sibling tool for differentiation, but the 'started by this MCP server process' qualifier distinguishes it from broader session queries.

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 like telnet_status or telnet_check. The description implies it is for enumerating sessions, but it does not state exclusions or conditions that would route an agent to a sibling tool.

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

telnet_readRead visible Telnet screenA
Read-only

Reads text from the real Windows console screen buffer. Use mode=visible for exactly what the user can see, or mode=tail for recent buffer rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNovisible
rowsNo
sessionIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description agrees by saying it 'Reads text'. It adds useful behavioral detail: the source is the real Windows console screen buffer, and the two modes return different scopes. It does not discuss edge cases, but the read-only annotation lowers the burden.

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 with no filler: it states the action, the source, and the meaningful mode distinction. The most important information is front-loaded in the first clause.

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 read-only tool with a simple parameter set and no output schema, the description gives enough to understand what is read, where it is read from, and how mode affects the result. It could be more explicit about how 'rows' behaves in tail mode, but overall the agent can correctly select and invoke the tool.

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?

With 0% schema description coverage, the description compensates for the critical mode parameter by defining 'visible' and 'tail'. However, 'rows' is only implied by 'recent buffer rows' and sessionId is left entirely to its name and schema format, so parameter coverage is incomplete.

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 ('Reads text') on a clear resource ('the real Windows console screen buffer') and distinguishes the tool from sibling send/key/wait operations by framing it as a non-mutating read. The mode options 'visible' and 'tail' further clarify what the tool returns.

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

Usage Guidelines4/5

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

It explicitly tells the agent when to use mode=visible ('exactly what the user can see') versus mode=tail ('recent buffer rows'). It does not enumerate when not to use this tool compared with sibling read/check tools, but the mode guidance provides clear context for the main decision.

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

telnet_sendType into Windows TelnetA

Injects text as real Windows console keyboard events into the visible Telnet session. Set appendEnter=true to submit the line. The text may be transmitted to the remote Telnet server.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
sessionIdYes
appendEnterNo

TDQS

A3.8/5.0
Behavior4/5

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

The annotations already signal a non-read-only, open-world operation, and the description adds useful behavioral context: it injects real keyboard events, targets the visible session, and that text may reach the remote Telnet server. This goes beyond the annotations without contradicting them.

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 with no filler. The primary action is front-loaded, and the appendEnter behavior is stated succinctly in the second sentence.

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 three-parameter action with no output schema, the description covers the core behavior, the key flag, and the external transmission risk. It is mostly complete, though it could mention what happens on success or failure.

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 compensate. It explains text as the injected payload and appendEnter as the line-submit flag, but sessionId is only implicit from its name and schema pattern. Most parameters get some semantic clarity, but not all are explicitly mapped.

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 that the tool injects text as Windows console keyboard events into a visible Telnet session, which is a specific verb and resource. It is clear in what it does, though it does not explicitly differentiate itself from the sibling tool telnet_key.

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 one concrete usage instruction: 'Set appendEnter=true to submit the line.' However, it does not explicitly say when to use this tool versus alternatives like telnet_key, nor does it mention 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.

telnet_startStart visible Windows TelnetA

Opens a real, user-visible conhost.exe window running the built-in Windows telnet.exe. If host is supplied, this initiates an outbound Telnet connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostNoHost name or IP address. Omit to open the Microsoft Telnet prompt without connecting.
portNo
titleNoMCP Windows Telnet
logFileNoOptional client-side Telnet log path.
usernameNo
autoLoginNo
terminalTypeNo
escapeCharacterNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag readOnlyHint=false and openWorldHint=true, so the agent knows this is an actuating, externally-facing operation. The description adds genuinely useful behavioral context beyond the annotations: it opens a real, user-visible conhost.exe window and uses the built-in telnet.exe, which has visible UI side effects. It does not mention whether the call blocks or returns a session handle, but the visible-window and outbound-connection details are meaningful.

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 efficient sentences with no filler. The first sentence front-loads the essential visible-window behavior, and the second adds the only conditional behavior worth calling out. It earns full credit for structure even though other dimensions have gaps.

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 8 parameters, no output schema, and an open-world annotation, the description is not complete enough for confident invocation. It explains host handling but leaves credentials-related fields (username/autoLogin), port defaults, terminalType, escapeCharacter, and logFile mostly unexplained, several of which also lack schema descriptions. The agent is also left guessing about return behavior and session lifecycle.

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 only 25%, with six of eight parameters undecorated. The description mostly restates the host behavior already present in the schema and does not explain port defaults, the meaning of autoLogin, terminalType choices, escapeCharacter semantics, or title/logFile behavior. With low schema coverage, the description needed to compensate but largely does not.

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 verb ('Opens') and resource ('conhost.exe window running the built-in Windows telnet.exe'), making the tool's action unmistakable. It also reveals the host-dependent outbound connection behavior, which clearly separates it from the sibling control/interaction tools.

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 conditional usage context: provide a host to connect, omit it to get the Telnet prompt. However, it never explicitly explains when to choose this tool over telnet_send, telnet_focus, telnet_close, or the other siblings, nor does it mention prerequisites like the Windows Telnet client being enabled.

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

telnet_statusGet Telnet session statusB
Read-only

Checks whether a visible Windows Telnet process is still running.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYes

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already covers safety, and the description adds a useful scoping detail: it checks a visible Windows process rather than a generic session. However, it does not disclose expected return values, behavior for an invalid or unknown sessionId, or whether the check is instantaneous.

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

Conciseness5/5

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

A single, front-loaded sentence with no filler; every word contributes meaning and the key scope qualifier ('visible') is included.

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 read-only check, the description conveys the high-level behavior, but there is no output schema and no explicit description of the result format. The agent must infer that the tool returns a running/not-running indication and cannot anticipate error behavior.

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 never mentions sessionId or how it relates to the process being checked. Since schema description coverage is 0%, the description was expected to compensate, but the schema's self-explanatory UUID field does most of the work.

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?

Description names a specific verb ('Checks whether ... is still running') and a concrete resource (visible Windows Telnet process), so the tool's core purpose is clear. It doesn't explicitly contrast with the sibling telnet_check, but the status/check wording largely differentiates it.

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 when-to-use or when-not-to-use guidance is given. With nine sibling tools, an agent gets no explicit hint about when to call telnet_status instead of telnet_check, telnet_list, or telnet_read; suitability is only implied by the name.

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

telnet_wait_for_textWait for Telnet screen textB
Read-only

Polls the real console screen until literal text appears or the timeout expires.

ParametersJSON Schema
NameRequiredDescriptionDefault
rowsNo
textYes
pollMsNo
sessionIdYes
timeoutMsNo
caseSensitiveNo

TDQS

B3.2/5.0
Behavior4/5

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

The annotations already mark it read-only and open-world; the description adds meaningful behavior beyond that: it polls the real console, performs literal matching, and resolves on timeout. This is useful context for an agent deciding whether to call it and what to expect.

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 ('real console screen', 'literal text', 'timeout expires') adds a distinct piece of information.

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 six parameters, zero schema descriptions, and no output schema, the description is too sparse to fully support correct invocation. It omits the meaning of rows and pollMs, the case-sensitivity default, and what happens on timeout.

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?

With 0% schema description coverage, the description needed to compensate, but it only loosely covers 'text' and 'timeout'. It does not explain sessionId, rows, pollMs, or caseSensitive beyond what their names and defaults suggest, leaving ambiguity around rows and polling behavior.

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 and resource ('Polls the real console screen') and clarifies that the operation is a blocking wait for literal text or timeout. It is clear on its own, though it does not explicitly contrast itself with siblings like telnet_check or telnet_read.

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 conveys that the tool waits/polls, but it gives no guidance on when to choose this tool over the sibling telnet_check, telnet_read, or telnet_send tools, and no exclusions or alternatives are mentioned.

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. 10 tool updatesv0.1.0
    • First observedtelnet_check
    • First observedtelnet_close
    • First observedtelnet_focus
    • First observedtelnet_key
    • First observedtelnet_list
    • First observedtelnet_read
    • First observedtelnet_send
    • First observedtelnet_start
    • First observedtelnet_status
    • First observedtelnet_wait_for_text

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct operation: status/check/list cover different aspects of session state and capability, while read/wait_for_text/send/key separate reading, polling, text injection, and named key injection. There is no meaningful overlap that would confuse an agent.

Naming Consistency5/5

All tools share a consistent telnet_ prefix followed by a clear verb or verb phrase, such as start, close, send, read, list, and wait_for_text. The naming pattern is uniform and predictable across the entire set.

Tool Count5/5

Ten tools is well-scoped for controlling a visible Windows Telnet client: session lifecycle, I/O, waiting, focusing, and diagnostics are all represented without unnecessary duplication. Each tool contributes a distinct capability.

Completeness5/5

The toolset covers the full interaction lifecycle: starting a session, connecting, sending input, reading output, waiting for expected text, sending special keys, listing sessions, checking readiness, focusing, and closing. No obvious gap prevents an agent from automating a Telnet workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables programmatic control over tmux terminal sessions for SSH access, command execution, and terminal automation. Supports creating sessions, sending commands, capturing output, and managing multiple panes for interactive debugging and monitoring.
    8
    8 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables management of visible, interactive terminal sessions across platforms (macOS, Windows, Linux, WSL). Supports creating, executing commands, capturing output, and managing multiple terminal windows simultaneously.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables spawning, interacting with, and capturing screen output from terminal-based programs for debugging PTY/TTY/TUI applications.
    6 npm
    7
    MIT