Skip to main content
Glama
smk-h

embedded-mcp-toolkit

by smk-h

一、简介

1. 是什么?

embedded-mcp-toolkit 是一个基于 MCP(Model Context Protocol)协议的嵌入式板卡远程管理工具,通过多个 MCP 工具提供嵌入式设备交互能力。支持以下功能:

  • 串口管理:打开/关闭串口连接、发送命令、读取输出、一键登录(自动检测 PSH 并解锁)、进入 U-Boot 命令行、U-Boot 会话标记管理、经 ZMODEM 上传/下载文件

  • SSH 管理:打开/关闭 SSH 会话、发送命令、读取输出、一键登录(自动检测 PSH 并解锁)、查看远端设备活跃连接、远程编译(结构化错误/警告反馈)、经 SFTP 上传/下载文件

  • ADB 管理:一次性 adb 命令(adb install / adb push 等)、交互式 ADB shell 会话、设备列表扫描

  • 本地 PowerShell:一次性执行本地 PowerShell 命令(独立进程、UTF-8 编码、超时强杀进程树,命令与结果随业务日志体系落盘到 .embedded/log/local

  • Windows 系统扫描:扫描可用 COM/LPT 端口、扫描本机网络适配器与 IP 配置、目标 IP 子网可达性分析

  • 基础信息:查询 MCP 服务器版本、获取设备配置信息(单台或全部)、跨连接类型查询活跃会话元数据、查询 MCP 宿主端点

  • 多会话管理:同时保持多个串口、SSH、ADB 会话,支持独立读写

  • KeyProvider 密钥管理:支持文件 IPC 和终端交互两种方式,自动处理 PSH 动态口令生成的密钥

  • 进程退出自动清理:客户端断开或进程终止时自动释放所有串口、SSH、ADB 连接

项目背景与价值定位(为什么需要它、与 PowerShell 直调的能力分界与场景选型)详见 docs/项目简介.md

2. 架构关系

OpenCode、MCP Client 与 MCP Server 的三层关系如下:

┌─────────────────────────────────────────────┐
│  OpenCode (MCP Host)                        │
│  ┌────────────┐  ┌────────────┐             │
│  │ MCP Client │  │ MCP Client │  ...        │
│  │ (stdio)    │  │ (http)     │             │
│  └─────┬──────┘  └─────┬──────┘             │
└────────┼───────────────┼────────────────────┘
         │               │
    stdin/stdout      HTTP/SSE
         │               │
┌────────┴────────┐   ┌──┴───────────┐
│ MCP Server A    │   │ MCP Server B │
│ (embedded-mcp-  │   │ (其他服务)    │
│  toolkit)       │   │              │
└─────────────────┘   └──────────────┘

角色

说明

在本项目中的体现

MCP Host

AI 应用,管理多个 Client,把 tool result 喂给 LLM

OpenCode / Claude Code

MCP Client

Host 内部组件,与 Server 保持 1:1 连接,通过 JSON-RPC 通信

Host 每配置一个 Server 就创建一个 Client

MCP Server

提供 tools 供 Agent 调用的独立进程

embedded-mcp-toolkit

通信流程:OpenCode 读取配置 → 创建 MCP Client → 以 stdio 启动 MCP Server 子进程 → 双方通过 JSON-RPC 通信。Agent 说"调用 xx 工具"时,Host 通过 Client 向 Server 发 tools/call,结果返回给 LLM。

注意:Server 发送的推送通知(如 notifications/message)由 Client 接收后止于 Host,不会转发给 Agent。因此需要 Agent 感知的事件应通过 tool 返回值(pull 模式)传递。

3. 怎么安装

3.1 npm

目前支持工具的全局安装和本地指定目录安装,但是全局安装后还是只能在某个目录配置使用(需要claude配置文件、设备配置文件、mcp配置文件以及日志等),暂未测试过全局配置。

mkdir mcp-toolkit
cd mcp-toolkit

# 当前目录安装
npm i @smai-kit/embedded-mcp-toolkit

# 初始化
./node_modules/.bin/embedded-mcp-toolkit init

安装配置完成后目录结构如下:

mcp-toolkit
├── .claude                      # claude配置目录
│   ├── CLAUDE.md
│   ├── settings.local.json      # 项目配置文件(自动生成,一般无需改)
│   ├── skills                   # claude skills,只是写了一些技能,实际可能不需要
│   ├── start-claude.bat.tmp     # 以指定环境变量启动claude的bat脚本
│   └── start-claude.ps1.tmp     # 以指定环境变量启动claude的powershell脚本
├── .mcp.json                    # claude code的mcp配置文件
├── .opencode                    # opencode 的配置目录(非 Claude 用户可忽略)
│   └── opencode.json
├── .embedded                    # 嵌入式工具包专属目录(配置 + 日志统一收纳)
│   ├── configs                  # 配置目录
│   │   ├── challenge.txt        # 登录psh时的挑战码(动态口令)
│   │   ├── config.example.yaml  # 配置模板文件(含完整字段说明,供参考)
│   │   ├── config.yaml          # 实际生效的配置(随包发布,只含 default,按需编辑)
│   │   ├── devices              # 设备配置分文件目录,一台设备一个 .yaml
│   │   │   └── board-example.yaml # 示例设备配置(复制并改名为你的设备)
│   │   └── password_input.txt   # 密钥文件,通过挑战码生成
│   └── log                      # 日志目录,当前claude启动时会自动创建,写入一些工具调用日志
│       └── 2026-05-27_09-06-09.log
├── node_modules                 # node 依赖包目录(npm 自动生成)
│   ├── .bin
│   ├── .package-lock.json
│   ├── @smai-kit                # @smai-kit/embedded-mcp-toolkit中是编译后的js脚本
│   ├── #...
│   └── zod
├── package-lock.json
└── package.json                 # npm 项目依赖清单

3.2 源码安装

git clone源码后:

npm i         # 安装依赖
npm run build # 编译,编译后就可以在当前目录下启动claude使用了

4. 工具介绍

4.1 基础工具

工具名称

功能说明

常用提示词

version_tool

获取 MCP 服务器版本和工具包信息

当前MCP版本是什么

device_info_tool

获取设备配置;不传 device 用默认设备,传 all 列出全部设备

当前设备信息是什么 / 列出所有可用设备

session_info

查询活跃会话元数据(串口/SSH/ADB 通用):按 session_id、按 device 或全部,返回连接信息与原始日志路径

当前有哪些会话 / 列出 board-a 的会话

host_info

查询 MCP 宿主端点(username@ip)与日志保存目录;跨机部署下供构造 scp 命令,并暴露业务日志 / 原始数据日志的绝对路径供 AI 清理;本地启动返回 local

宿主端点是什么 / 日志保存在哪里

greet_tool

演示用打招呼工具

4.2 串口工具

工具名称

功能说明

常用提示词

serial_open

打开串口连接,启动交互式 shell 会话

打开串口 / 连接 COM3

serial_close

关闭串口会话,释放端口资源

关闭串口 / 退出串口 serial_1

serial_write

向串口会话发送命令

向串口发送命令 / 在串口执行 whoami

serial_read

读取串口会话的输出数据

读取串口输出 / 看看串口返回了什么

serial_exec

向串口发送命令并等待输出(write + read,自动完成检测,含常驻命令识别与双超时机制)

在串口执行 uname -a / 让串口运行命令 xxx

serial_shell_login

一键串口登录,自动检测 PSH 状态并解锁

串口一键登录 / 串口登录 board-test

serial_enter_uboot

重启设备并进入 U-Boot 命令行

重启进入 uboot / 进入 U-Boot 命令行

serial_uboot_state

查询/检测/强制设置串口会话的 U-Boot 标记(detect/set/clear/status),标记决定 exec 的 marker 包装风格

检测当前是否在 U-Boot / 标记为 U-Boot 会话

serial_send_ctrl

向串口会话发送控制字符(Ctrl+C/U/D/Z,不追加换行)

串口发 Ctrl+C / 中断串口命令

serial_upload

经 ZMODEM 上传二进制文件到设备(复用串口会话,不释放端口;设备需有 lrzsz)

串口上传固件 / 把 update.bin 传到设备

serial_download

经 ZMODEM 从设备下载二进制文件(复用串口会话,不释放端口;设备需有 lrzsz)

串口拉取日志 / 下载 /tmp/dmesg.log

WARNING

串口持续输出的设备慎用 ZMODEM 下载:ZMODEM 是带内协议,设备持续打印(内核日志、常驻诊断输出等)会与协议帧物理交织。同等洪水强度下,下载方向(设备 sz → MCP)受污染双重命中(设备侧发送被打断 + MCP 接收侧污染)、恢复链路更脆、且受 MAX_CRC_RETRIES=10 重试上限约束,很容易传输失败;上传方向(MCP → 设备 rz)靠本地缓存可无限重传,相对能扛(仅吞吐滑坡)。若设备有持续打印,建议优先用上传;确需下载时,先停掉可控输出源(dmesg -D、kill 常驻打印任务)再传。完整分析见 docs/MCP串口ZMODEM文件传输.md

4.3 ADB 工具

工具名称

功能说明

常用提示词

adb_device_list

列出所有已连接的 ADB 设备及其状态

列出 adb 设备 / 查看连接的安卓设备

adb_exec

一次性执行 adb 命令(无需持久会话),适合 adb installadb push、短命令

adb push 文件 / 安装 apk

adb_shell_open

打开交互式 ADB shell 会话(Android 设备)

打开 adb shell / 连接安卓设备

adb_shell_close

关闭 ADB shell 会话并终止 adb 进程

关闭 adb / 退出 adb_1

adb_shell_write

向 ADB shell 会话发送命令

adb 发送命令 / 在 adb 里执行 ls

adb_shell_read

读取 ADB shell 会话的输出数据

读取 adb 输出 / adb 返回了什么

adb_shell_exec

向 ADB shell 发送命令并等待输出(write + read,自动完成检测)

adb 执行 logcat / 在 adb 运行命令 xxx

adb_shell_send_ctrl

向 ADB shell 会话发送控制字符(Ctrl+C/U/D/Z,不追加换行)

adb 发 Ctrl+C / 中断 adb 命令

4.4 SSH 工具

工具名称

功能说明

常用提示词

ssh_shell_open

打开交互式 SSH shell 会话

打开 SSH / SSH 连接 board-test

ssh_shell_close

关闭 SSH shell 会话,释放连接

关闭 SSH / 退出 ssh_1

ssh_shell_write

向 SSH 会话发送命令

SSH 发送命令 / 在 ssh 里执行 ls

ssh_shell_read

读取 SSH 会话的输出数据

读取 SSH 输出 / SSH 返回了什么

ssh_shell_exec

向 SSH 发送命令并等待输出(write + read,自动完成检测,含常驻命令识别与双超时机制)

SSH 执行 ifconfig / 在 SSH 运行命令 xxx

ssh_shell_connection

检查远端板卡上活跃的 SSH 连接

查看设备上的 SSH 连接 / 谁连到了这台设备

ssh_shell_login

一键 SSH 登录,自动检测 PSH 状态并解锁

SSH 一键登录 / SSH 登录 board-test

ssh_shell_send_ctrl

向 SSH 会话发送控制字符(Ctrl+C/U/D/Z,不追加换行)

SSH 发 Ctrl+C / 中断 SSH 命令

ssh_build

在远端执行编译命令,等待完成并结构化分类错误/警告/信息(每个会话同一时刻只跑一个编译)

远程编译内核 / make -j8 编译并分析结果

ssh_sftp_upload

复用 SSH 会话经 SFTP 上传本地文件到远端(流式传输,适合大文件)

上传文件到板卡 / 把 build.sh 传到 /tmp

ssh_sftp_download

复用 SSH 会话经 SFTP 从远端下载文件到本地

从板卡下载文件 / 拉取 /var/log/dmesg

4.5 Windows 工具

工具名称

功能说明

常用提示词

port_scan_tool

扫描 Windows 设备管理器中的 COM / LPT 端口

扫描可用串口 / 查看有哪些 COM 口

network_scan_tool

扫描 Windows 网络适配器和 IP 配置

扫描网络适配器 / 查看本机网卡信息

subnet_check_tool

分析目标 IP 的子网信息(网络地址/广播地址/可用范围/CIDR),判断是否与本机同子网可达

检查 192.168.16.1 是否可达 / 子网分析

power_shell_exec

独立进程一次性执行 PowerShell 命令(不依赖会话,UTF-8 编码免疫乱码,超时强杀整棵进程树,命令与结果落盘到 {LOG_DIR}/local

PowerShell 执行 ipconfig / 用 ps 运行 xxx

注册策略power_shell_exec 默认仅在远程 SSH 场景(本 MCP 由 Linux 侧 AI 客户端经 ssh 拉起,客户端无法直接访问本机)注册。若客户端(Claude Code / ZCode / OpenCode 等)原生运行在本机 Windows,它自带的 shell 工具可以直接执行 PowerShell,这些工具默认不注册,避免 AI 经 MCP 绕行。在 .mcp.jsonenv 中设置 POWERSHELL_TOOLS=1 可强制开启,0 强制关闭;启动日志中会记录实际决策。

ssh_build 的注册策略与 power_shell_exec 相反:默认仅在本地场景(客户端与 MCP 同在本机 Windows)注册,此时编译服务器不可直达,ssh_build 是唯一编译通道;远程 SSH 场景下客户端已运行在 Linux 编译服务器上,自带 shell 即可本机编译,ssh_build 默认不注册,避免流量 Linux → Windows MCP → Linux 绕圈。在 .mcp.jsonenv 中设置 SSH_BUILD_TOOLS=1 可强制开启,0 强制关闭。

4.6 重要机制:exec 的常驻命令识别与双超时策略

serial_exec / ssh_shell_exec / adb_shell_exec 这三个交互式 exec 工具,采用了提示符检测 + 分类超时机制。核心思路:普通命令靠提示符检测自然结束,常驻命令(ping/logcat/top 等永不返回提示符的)才默认套用短超时熔断

常驻命令识别

命令是否常驻按首 token(第一个空白/管道/重定向之前的命令名)判定。内置白名单(config.yamlexecTimeout.residentCommands 可扩展):

  • A 类(首 token 命中即常驻):pingping6logcattophtopwatchstracetcpdump

  • B 类(首 token 命中且带 follow 参数才常驻):dmesg -w / --followjournalctl -f / --followtail -f / -F / --follow

不在白名单中的命令按普通命令处理。

两种超时策略

命令类型

默认超时

超时动作

超时类型

语义

普通命令(瞬时/长命令)

5 分钟(兜底)

不发 Ctrl+C

fallback(兜底超时)

异常——提示符未匹配的安全阀,调用方应确认/手动终止

常驻命令(ping/logcat/top...)

10 秒(采样)

发 Ctrl+C

sampling(采样超时)

中性——预期采样行为,输出已收集

机制流程

每条命令进入 exec 后:(0)常驻分类——按白名单判定命令类型,选定超时时长与动作;(1)前置冲刷清空缓冲区残留;(2)在有效时长内发送命令并轮询读取输出;(3)结束判定——检测到 shell 提示符(Android :/ $ / :/ #、Linux $ / # / >、U-Boot =>,支持 promptPattern 覆盖)→ 立即返回 timeoutKind=none;超时未检测到 → 按命令类型分支:

  • 常驻命令:发 Ctrl+C 终止(避免 ping/logcat 后台持续运行污染后续会话),返回 timeoutKind=sampling,末尾追加 [采样超时: 已收集 Xms 输出,已发送 Ctrl+C 终止常驻命令]

  • 普通命令:不发 Ctrl+C(避免误杀可能已完成只是提示符没匹配的命令),返回 timeoutKind=fallback,末尾追加 [兜底超时: 已收集 Xms 输出,未发送中断(命令可能仍在运行),请用 send_ctrl 手动确认/终止]

timeoutMs 的作用范围

timeoutMs 参数只覆盖「执行时长」,不改变超时后的动作(是否发 Ctrl+C 始终由命令常驻性决定):

调用方式

命令类型

效果

不传 timeoutMs

常驻命令(ping)

默认 10s 采样超时,发 Ctrl+C

不传 timeoutMs

普通命令(make)

默认 5min 兜底超时,不发 Ctrl+C

timeoutMs: 30000

常驻命令(ping)

30s 采样超时,发 Ctrl+C(时长覆盖,动作不变)

timeoutMs: 5000

普通命令(sleep)

5s 兜底超时,不发 Ctrl+C(时长覆盖,动作不变)

AI 传参约定(必须预估传 timeoutMs

exec 工具要求调用方(AI)每次调用都预估命令预期耗时并显式传 timeoutMs,仅当用户明确表示不传时才可省略。未传时落到的 300000ms(5 分钟)只是内部兜底安全阀,不作为建议传值——当前没有需要等满 5 分钟才有结果的命令,确有超过 ~2 分钟的命令时应显式传更大的值。分级参考(与工具描述一致):

命令类型

建议 timeoutMs

基础瞬时命令(ls/pwd/echo/cat 小文件/ip addr/uname)

3000-5000,上限 10000

大输出命令(cat 大文件、dmesg/journalctl 长输出、日志转储)

20000-30000

中等任务(apt install、dd、服务重启)

30000-120000

reboot/reset/断电重启

≤120000

常驻命令采样(ping/logcat/top)

10000(到点自动发 Ctrl+C)

漏传 timeoutMs 时,exec 返回文本末尾会追加 [提示: 本次未传 timeoutMs, ...] 反向引导调用方下次显式传参;该提示不代表命令失败。

全局默认值(config.yaml 根层 execTimeout

# .embedded/configs/config.yaml
execTimeout:
  residentCommands:          # 常驻命令扩展名单(与内置白名单并集),留空仅用内置
    - my_log_streamer
  samplingTimeoutMs: 10000   # 常驻命令采样超时(ms),留空默认 10000
  fallbackTimeoutMs: 300000  # 普通命令兜底超时(ms),留空默认 300000(5 分钟)

三项均为全局级,所有设备共享。设备级可覆盖(详见 配置说明 execTimeout 段)。

[采样超时: ...]中性采样结果,不是异常——对 logcat 取样、top 采样就是预期行为,AI 不应视为命令出错。[兜底超时: ...] 则提示调用方注意命令可能仍在运行。

Related MCP server: Hyper MCP Terminal

二、配置说明

1. claude配置

目前还未测试过全局配置,后续测试验证。当前配置下,只测试过在指定项目目录使用

1.1 .claude/settings.local.json

{
  "permissions": {
    "allow": [
      "mcp__embedded-board__device_info_tool",
      "mcp__embedded-board__ssh_shell_login",
      "mcp__embedded-board__ssh_shell_connection",
      "mcp__embedded-board__ssh_shell_close",
      "mcp__embedded-board__serial_shell_login",
      "mcp__embedded-board__serial_close",
      "mcp__embedded-board__serial_exec",
      "mcp__embedded-board__version_tool",
      "mcp__embedded-board__ssh_shell_exec",
      "mcp__embedded-board__session_info",
      "mcp__embedded-board__serial_read",
      "mcp__embedded-board__ssh_shell_read"
    ]
  },
  "enabledMcpjsonServers": [
    "embedded-board"
  ]
}
  • permissions:允许claude自动执行而不需要用户确认,这个其实不用管,在claude code运行时会提醒 Yes, and don’t ask again for: xxxx,选择这个就会自动添加到这里,下一次再运行就不需要再确认。

  • enabledMcpjsonServers:启用的 MCP 服务器列表。当前仅启用 embedded-board

1.2 .mcp.json

此文件和.claude同级,文件内容如下(npm本地安装):

{
  "$schema": "https://json.schemastore.org/claude-code-settings.json",
  "mcpServers": {
    "embedded-board": {
      "command": "./node_modules/.bin/embedded-mcp-toolkit",
      "args": [],
      "env": {
        "DEVICE": "board-b",
        "BOARD_CONFIG_PATH": "./.embedded/configs/config.yaml",
        "LOG_SAVE": "1",
        "LOG_DIR": "./.embedded/log",
        "SAVE2FILE_PATH": "./.embedded/log"
      }
    }
  }
}

这个是MCP的配置文件。env 字段中定义的环境变量会在 Claude 启动 MCP server 时,注入到 MCP server 子进程process.env 中。也就是说,这些变量只在 src/mcp.ts 进程中通过 process.env.DEVICE 等方式读取,不会 影响 Claude 自身的 shell 环境变量。

  • DEVICE:默认的设备名称,对应 config.yamldevices 下的 key。config.yamldefault 字段同时存在时,DEVICE 优先级更高(见下方默认设备优先级

  • BOARD_CONFIG_PATH:主配置文件 config.yaml 的路径,相对于 MCP server 进程的工作目录(即启动 Claude 时的 cwd)。注意:devices/ 目录的查找位置始终是 config.yaml 的同级目录,因此 BOARD_CONFIG_PATH 同时决定了 config.yamldevices/ 的位置

  • LOG_SAVE:是否开启业务日志写入文件("1" 表示开启),记录工具调用信息(工具名称、调用参数、会话生命周期等)。需配合 LOG_DIR 使用

  • LOG_DIR业务日志的存储目录,相对于 MCP server 进程的工作目录。开启后整个进程共用一个日志文件(格式 YYYY-MM-DD_HH-mm-ss.log

  • SAVE2FILE_PATH原始数据日志的存储目录,记录串口、SSH、ADB 等 transport 接收到的原始字节流(每行附到达时间戳,每个会话单独一个文件)。设为 "none" 或留空则关闭。与 LOG_SAVE / LOG_DIR 相互独立

两个日志通道的区别LOG_SAVE + LOG_DIR 记录的是"程序自己说的话"(info / warn / error 等诊断信息);SAVE2FILE_PATH 记录的是"设备/远端回的话"(transport 接收的原始数据流),用于排查设备到底返回了什么。两者独立,可单独或同时开启。

1.3 默认设备优先级

工具调用时若未显式指定 device 参数,"用哪台设备"按下面的优先级依次回退(前者覆盖后者,代码见 resolveDeviceName()):

优先级

来源

示例值

说明

1(最高)

单次调用的 device 参数

ssh_shell_open / adb_shell_open 等工具传入的 device 字段

只影响这一次调用

2

DEVICE 环境变量(.mcp.jsonenv

board-b

进程级,所有工具共用

3

config.yamldefault 字段

board-a

仅当 DEVICE 未设置时生效

4(兜底)

硬编码默认值

board-a

三者都缺时使用

常见误区:同时配了 .mcp.jsonDEVICEconfig.yamldefault,以为改了 config.yaml 就能切换设备,结果生效的还是 DEVICE想让 config.yamldefault 生效,把 .mcp.json 里的 "DEVICE" 这一行删掉即可。

完整调用链:args.deviceDEVICEconfig.yamldefaultboard-a。启动后可在日志里看到实际命中了哪一档,例如 Device resolved: board-b (from env)

注:SSH/串口工具在会话注册与日志命名这一步用的是 args.device ?? process.env.DEVICE ?? "default",跳过了 config.yamldefault 兜底;但这只影响日志目录名,实际连接目标(host、port 等)仍由 getSSHConfig()/getSerialConfig()resolveDeviceName() 解析,结果与上表一致。

Tips:MCP server 进程的工作目录就是启动 Claude(或其他 MCP 客户端)时所在的目录。可以在日志文件的第一行看到 cwd: xxx 来确认实际的工作目录。

环境变量不生效?看一下这里:常见问题 2. 环境变量未生效?

2. 日志信息

.mcp.json 中开启 LOG_SAVE 后,业务日志(.embedded/log/ 下,格式 YYYY-MM-DD_HH-mm-ss.log)大致如下:

[2026-05-27 18:55:39] [INFO] MCP server starting... cwd: E:\AI\embedded-mcp-toolkit
[2026-05-27 18:55:39] [INFO] MCP server env: {"DEVICE":"board-b","BOARD_CONFIG_PATH":"./.embedded/configs/config.yaml","LOG_SAVE":"1","LOG_DIR":"./.embedded/log"}
[2026-05-27 18:56:38] [INFO] Config loaded: E:\AI\embedded-mcp-toolkit\.embedded\configs\config.yaml
[2026-05-27 18:56:38] [INFO] Device resolved: board-b
[2026-05-27 18:57:13] [INFO] [serial_open] device=(default) port=(auto) baudRate=115200
[2026-05-27 18:57:13] [INFO] [serial_open] session opened: serial_1 port=COM3
[2026-05-27 18:58:13] [INFO] [serial_exec] session_id=serial_2 command=exit clear=1 timeoutMs=(default)
[2026-05-27 18:58:54] [INFO] [serial_enter_uboot] session_id=serial_2 timeoutMs=60000

每行记录工具名称、调用参数、会话生命周期等。首行的 cwd 可用于排查相对路径问题SAVE2FILE_PATH 写的是另一份原始字节流日志(transport 接收到的设备原始返回),与这份业务日志相互独立。

3. configs配置

设备配置围绕"设备名"组织——它既是配置的 key,也会作为日志目录名、分文件配置文件名使用。开始配置前,先了解一下设备名的命名要求。

3.1 设备名称命名规则

设备名(即 devices 下的 key、config.yamldefaultDEVICE 环境变量、MCP 工具 device 参数所用的字符串)没有任何强制约束——代码层面零校验,不要求 board- 前缀,也没有正则、白名单或 enum 限制(board- 只是约定俗成)。

但设备名会被直接用作文件/目录名日志子目录分文件配置名),因此字符选择有现实要求:

✅ 推荐

❌ 避免

小写字母 + 连字符(kebab-case),如 board-araspberry-piubuntu-01

路径分隔符 / \(会改变目录层级,.. 甚至导致目录穿越)

数字、点号 . 也安全(如 board-2.0

Windows 非法字符 : * ? " < > |mkdirSync 会直接抛错)

空串、空格、控制字符

大小写不敏感系统(Windows/macOS)下与已有设备名仅大小写不同的名字

一句话:起什么名字都行,只要避开路径分隔符和 Windows 非法字符;board- 前缀不是必需的。


设备配置支持两种布局,二选一即可(兼容老配置):

布局

适用场景

设备配置放在

单文件布局(老方式)

设备少(1~2 台)

全部写在 config.yamldevices 段里

分文件布局(新方式,推荐)

设备多

每台设备一个文件,放在 devices/ 目录下

两种布局同时存在时(devices/ 目录非空 + config.yaml 还有 devices 段):以 devices/ 目录为准,config.yaml 里的 devices 段被忽略。 此时修改设备请改 devices/<设备名>.yaml,改 config.yamldevices 段无效。default 等全局字段始终从 config.yaml 读取。

3.2 方式一:单文件布局(老方式)

所有设备写在 config.yamldevices 段里,无需 devices/ 目录:

# config.yaml
default: board-b

devices:
  board-a:
    ssh:
      host: "192.168.16.103"
      port: 22
      username: "root"
      password: "root"
    serial:
      port: "COM4"
      baudRate: 115200
  board-b:
    ssh:
      host: "192.168.16.105"
      port: 22
      username: "root"
      password: "root"
    serial:
      port: "COM3"
      baudRate: 115200

3.3 方式二:分文件布局(新方式,推荐)

config.yaml 只放 default 等全局设置,每台设备一个独立文件:

.embedded/configs/
├── config.yaml              # 仅放 default 等全局设置
└── devices/
    ├── board-a.yaml         # 每台设备一个文件,文件名即设备名
    └── board-b.yaml

config.yaml(仅全局设置):

# config.yaml
default: board-b

devices/board-a.yaml(单台设备的完整、自包含配置):

adb:
  serialNo: "sn_none"
ssh:
  host: "192.168.16.103"
  port: 22
  username: "root"
  password: "root"
serial:
  port: "COM4"
  baudRate: 115200

新增设备只需在 devices/ 下复制一个 .yaml 文件并修改,无需改动 config.yaml

从老方式迁移:运行 embedded-mcp-toolkit split,自动把 config.yamldevices 段拆分为 devices/*.yaml(详见 3.4 配置拆分命令)。

3.4 配置拆分命令(split)

split 命令用于把单文件布局的 config.yaml 迁移为分文件布局。它读取 config.yamldevices 段,为每个设备生成一个独立的 devices/<设备名>.yaml 文件。

基本用法

# 使用默认源路径 ./.embedded/configs/config.yaml
embedded-mcp-toolkit split

# 指定源 config.yaml 路径
embedded-mcp-toolkit split --config ./path/to/config.yaml

# 强制覆盖已存在的设备文件(默认跳过已存在)
embedded-mcp-toolkit split --force

选项

选项

说明

默认值

-c, --config <path>

config.yaml 路径

./.embedded/configs/config.yaml

-f, --force

覆盖已存在的设备文件

false(默认跳过已存在)

输出示例

✂️  embedded-mcp-toolkit 配置拆分
   源配置: ./.embedded/configs/config.yaml
   设备目录: ./.embedded/configs/devices
   覆盖模式: 跳过已存在

  ✅ 创建: board-a
  ✅ 创建: board-b
  ⏭  跳过(已存在): board-c

✅ 拆分完成:创建 2,覆盖 0,跳过 1

说明

  • 拆分后建议手动清理 config.yaml 中的 devices 段(保留 default 等全局字段),避免两份配置并存造成混淆。devices/ 目录存在时,加载层只看 devices/*.yamlconfig.yamldevices 段不生效。

  • 拆分是非破坏性的:原 config.yaml 不会被修改或删除,只是多出 devices/*.yaml 文件。

  • 同一设备文件已存在时默认跳过,加 --force 才覆盖。

3.5 常用字段说明

无论哪种布局,单台设备的字段含义相同,一般只需修改下面几个:

ssh:
  host: "xxx.xxx.xxx.xxx" # 设备 IP 地址
  port: 22
  username: "root"        # 设备的用户名
  password: "root"        # 设备用户的登录密码
serial:
	  port: "COM3"            # 串口的端号
	  baudRate: 115200        # 波特率
【**全局 execTimeout 配置**】<a id="section_exec_config"></a>

常驻命令识别、采样超时、兜底超时的**全局默认值**写在 `config.yaml` 根层的 `execTimeout` 子段,所有设备共享(设备级同名字段可覆盖):

```yaml
# config.yaml
default: board-b
execTimeout:
  residentCommands:          # 常驻命令扩展名单(首 token 精确匹配),与内置白名单并集;留空仅用内置
    - my_log_streamer
  samplingTimeoutMs: 10000   # 常驻命令采样超时(ms),留空默认 10000
  fallbackTimeoutMs: 300000  # 普通命令兜底超时(ms),留空默认 300000(5 分钟)
```

> 设备级覆盖(写在 `devices/<设备名>.yaml` 根层,与 `adb`/`ssh`/`serial` 平级):`samplingTimeoutMs` / `fallbackTimeoutMs` 设备级优先(覆盖全局),`residentCommands` 全局 ∪ 设备级并集。详见 [exec 超时机制](#section_exec_timeout)。

【**通道启用/禁用约定**】

通道

禁用取值

说明

SSH

ssh.host: "none"

该设备不启用 SSH(调用 ssh 工具返回 "does not support SSH")

串口

serial.port: "none"

该设备不启用串口(调用 serial 工具返回 "does not support serial")

ADB

adb.serialNo: "sn_none" 或留空

不绑定具体设备,由 adb 自动发现

不需要的通道可直接整段删除。

关于 keyProvider:用于具有 PSH 的设备在解锁时提供密钥,支持 file(文件读写)和 terminal(终端输入)两种模式。Claude Code 自动调用工具登录的场景下推荐 file 模式。其 challengeFilePath / keyFilePath 是**相对运行 MCP server 时的工作目录(cwd)**的路径,通常写 ./ 开头的项目相对路径即可(与 config.yaml 或设备文件的位置无关)。

关于 ubootserial.uboot 子段用于 serial_enter_uboot 工具的提示符识别(autoboot 提示、命令提示符、printenv 验证键),全部可选,留空时使用内置默认值。各厂商 U-Boot 提示符差异较大,需要适配时请参考 U-Boot 正则表达式配置指南

3.6 两个 txt 文本文件

.embedded/configs/challenge.txt
.embedded/configs/password_input.txt
  • challenge.txt 存放动态口令,一键登录时自动读取串口或 SSH 的动态口令并写入此文件

  • password_input.txt 存放密钥,用动态口令生成密钥后写入此文件

Tips:当密钥被读走后,这两个文件都会被清空。

三、简单示例

1. 启动 claude

cd mcp-toolkit
claude

然后在 claude 中执行 /mcp list 查看 MCP 服务是否连接:

  Manage MCP servers
  1 server

    Project MCPs (D:\Temp\aaa\.mcp.json)
  ❯ embedded-board · ✔ connected · 44 tools

embedded-board 前面的 ✔ connected 即表示连接成功。

旧版每个通道各有一个 serial_list / ssh_shell_list / power_shell_list 列会话工具,现已统一合并为 session_info(跨连接类型查询,见 4.1 基础工具)。

2. 常用提示词

# 获取当前设备信息
❯ 当前设备信息是什么

# 列出/查看会话(跨串口、SSH、ADB)
❯ 当前有哪些会话
❯ 列出 board-a 的所有会话

# 登录设备,没有xxx的话是会用默认设备
❯ ssh一键登录xxx设备
❯ 串口一键登录xxx设备

# 退出登录
❯ 退出xxx设备登录
❯ 关闭ssh_id
❯ 关闭串口serial_id
❯ 关闭所有会话

四、常见问题

1. 串口被拒绝(Port busy / Access denied)

Windows 下串口(COM 口)是独占资源,同一时间只能有一个进程打开。如果 MCP server 尝试打开串口时提示 Port is openAccess deniedPermission denied,说明该 COM 口已被其他程序占用。

1.1 常见占用场景

  • 其他串口调试工具未关闭(如 SecureCRT、PuTTY、MobaXterm、Xshell、minicom 等)

  • 资源管理器窗口打开着该串口(某些驱动会在资源管理器中锁定)

  • 上一个 MCP server 实例未正常退出,残留进程仍持有串口句柄

  • 虚拟机软件(VMware、VirtualBox)占用了宿主机串口做直通映射

1.2 排查方法

(1)关闭所有可能占用串口的工具,然后重试。

(2)Windows 任务管理器检查是否有残留的 node.exe 进程,如果有则结束掉。

(3)使用 PowerShell 查看串口占用(需要管理员权限):

# 查看当前系统可用串口
[System.IO.Ports.SerialPort]::GetPortNames()

# 查看串口设备详细信息
Get-WMIObject Win32_SerialPort | Select-Object Name, Description, DeviceID

(4)在设备管理器(devmgmt.msc)中确认 COM 口编号未变化(USB 转串口设备重新插拔后编号可能改变)。

1.3 解决方法

  • 关闭占用程序后重试

  • 如果是在 Claude 中,先执行"关闭所有会话"确保释放串口,再重新登录

  • 重新插拔 USB 转串口设备,确认 COM 口编号后在设备配置中更新 serial.port 字段

2. 环境变量未生效?

如果启动后日志里看不到 env 信息,或工具读不到 DEVICE/BOARD_CONFIG_PATH 等变量,按以下顺序排查(配置写法详见 1.1 / 1.2):

配置类(最常见)

  • .mcp.json 放错位置:必须在 Claude 启动的项目根目录(与 .claude/ 同级),否则不读取。

  • enabledMcpjsonServers 漏配.claude/settings.local.json 需有 "enabledMcpjsonServers": ["embedded-board"],否则不启动 server。

  • 改完没重启.mcp.json 仅在 Claude 启动时读一次,改后需完全退出再重启。

  • command 路径不存在:如未 npm install./node_modules/.bin/embedded-mcp-toolkit 不存在,server 起不来。

  • JSON 语法错误:缺逗号 / 引号不匹配会让整个 .mcp.json 解析失败,Claude 可能静默忽略。

相对路径 / 工作目录

  • BOARD_CONFIG_PATHLOG_DIR 等相对路径是相对 MCP server 的 cwd(即启动 Claude 的目录)解析的。不从项目根目录启动会指向错误位置——日志首行 cwd: xxx 可确认。

Claude Code 版本

  • 版本过低也可能不兼容(本文档基于 2.1.152)。升级:npm i -g @anthropic-ai/claude-code

3. 重启被中断?

现象:用 *_shell_exec 执行 reboot 重启设备时,设备没有正常重启到新系统,而是停在某个中间状态(比如 bootloader 菜单、烧写流程、或者卡在启动脚本里)。

背景:很多嵌入式系统启动后会执行一批自动初始化脚本,脚本里为了方便调试,常在某些位置加 sleep N 并提示「Press Ctrl+C to stop …」之类的等待。这类等待点在调试时是好事,但放在「重启」场景下就成了陷阱——重启命令本身耗时远超 exec 的默认 timeoutMs(10 秒)。

根因:exec 工具采用 提示符检测 + 超时熔断机制,到 timeoutMs 仍未检测到 shell 提示符时,会无条件自动发一次 Ctrl+C。重启过程中本来就无 shell 提示符(设备在 kernel 关闭 → bootloader → kernel 启动之间),所以一旦超时,就会发 Ctrl+C——而这个 Ctrl+C 恰好可能落在初始化脚本的「等待用户中断」点上,导致启动流程被中止,设备停在中途。

判断方法:查看日志中是否有如下记录:

[serial_exec] timed out after 10000ms (no prompt), sending Ctrl+C

或返回内容末尾出现:

[timed-out: collected 10000ms of output, Ctrl+C sent]

只要看到 Ctrl+C sent,且设备实际未正常重启完成,基本可确认是这个问题。

解决方法reboot、固件烧写、kexec 等长启动命令不要用 *_shell_exec 跑默认超时,二选一:

  • 方式 A(推荐):改用 *_shell_write + *_shell_read 组合。write 只发送字节,没有任何超时和 Ctrl+C 逻辑,是重启/烧写场景的安全通道:

serial_write(session_id, "reboot")      ← 只发命令,不轮询、不熔断
serial_read(session_id, clear=1)        ← 多次轮询读取启动日志
serial_read(session_id, clear=1)
...
  • 方式 B:仍用 exec,但显式传足够大的 timeoutMs,确保命令完成前不触发熔断:

serial_exec(session_id, command="reboot", timeoutMs=120000)   ← 120 秒,远大于重启耗时

如何提醒 AI:在对话里直接说清楚,例如「执行 reboot 重启设备,用 write 发送、用 read 轮询读取,不要用 exec」,或「执行 reboot,等待时间至少 120 秒」。否则 AI 容易直接用 exec 的默认 10 秒超时,结果启动到一半被 Ctrl+C 中断。

完整机制说明见 4.6 重要机制:exec 的提示符检测与超时熔断

NOTE

在提交6066447 后,普通命令(包括 reboot)默认走 5 分钟兜底超时且不再自动发 Ctrl+C,旧版描述的超时被中断问题已修复。详见 4.6 重要机制:exec 的常驻命令识别与双超时策略

Available Tools

43 tools
adb_device_listA

List all connected ADB devices and their status (device, offline, unauthorized, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It states the output (device statuses) but does not disclose potential behaviors such as requiring the ADB server to be started, side effects, or error handling. This is adequate for a simple read-only listing tool but 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 sentence that is direct and front-loaded with the verb and resource. It contains no unnecessary words and fully serves its purpose.

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's simplicity (no parameters, no output schema), the description provides sufficient completeness. It specifies what the tool lists and which statuses are included, covering the essential return information for a device list 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 baseline is 4 per the rules. The description correctly focuses on behavior rather than parameters, and there is no need for additional parameter explanation.

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 'List' and specifies the resource 'connected ADB devices' with status values (device, offline, unauthorized). This clearly distinguishes it from sibling tools like adb_exec (which executes commands) and adb_shell_* (shell operations).

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

Usage Guidelines3/5

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

The description implies usage (when you need to check connected ADB devices) but does not explicitly state when to use it versus alternatives, nor does it mention exclusions or prerequisites. It provides clear context for the tool's purpose but lacks explicit guidance on appropriate use cases.

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

adb_execA

Execute a one-shot ADB command without a persistent session. Use for adb devices, install, push, or short shell commands.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device alias, e.g. "board-lubancat". PREFER passing the alias when you know the target device: it reads the serialNo bound in config and runs the command directly without device probing, and logging follows the alias. Passing a raw serial number is also accepted — it is auto-resolved back to the alias when bound. Omit only when no specific device is intended; the program then auto-discovers the single connected device (errors out if 0 or >1 devices). There is NO need to call adb_device_list first.
commandYesADB command and arguments (without 'adb' prefix), e.g. 'devices', 'shell ls /sdcard'

TDQS

A4/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 transparency burden. It adds behavioral context like 'one-shot' and auto-discovery error behavior (errors out if 0 or >1 devices) from the schema, but it does not disclose whether the command is read-only or mutating (install and push imply mutation), any permission requirements, or output format. The mention of short shell commands hints at execution limits but not explicitly.

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

Conciseness5/5

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

The description is one concise sentence that front-loads the core behavior ('Execute a one-shot ADB command') and then follows with supporting use cases. Every word earns its place; no redundancy or irrelevant detail.

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 moderate complexity (2 params, no output schema, no annotations), the description plus detailed parameter guidance covers the main usage scenarios and device-selection behavior. It does not explain return values or error handling for command failures, but for an execution wrapper over adb this is a minor gap.

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 schema itself thoroughly documents both parameters. The tool description adds no new parameter semantics beyond the schema; it only recites example commands. Baseline 3 is appropriate because the schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states a specific verb and resource: 'Execute a one-shot ADB command without a persistent session.' It also enumerates example use cases (adb devices, install, push, short shell commands), which sharpens the purpose. This differentiates it from persistent-session siblings like adb_shell_open and from adb_device_list.

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 explicit context on when to use: for one-shot commands and short shell commands, and the device parameter guidance further states there is no need to call adb_device_list first and when to omit the device parameter. It does not explicitly name alternative sibling tools when persistent sessions are needed, but the phrase 'without a persistent session' implies the boundary.

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

adb_shell_closeA

Close an ADB shell session and terminate the adb process.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session ID returned by adb_shell_open

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses the primary action and mentions terminating the adb process, but it does not describe error behavior, idempotency, or what happens with an invalid session ID. The ambiguous 'adb process' term adds some context but also confusion.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the core action, and contains no filler. It is appropriately sized for the tool's simplicity, earning its place.

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

Completeness3/5

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

Given the tool's simplicity (one parameter, no output schema), the description is mostly adequate, but it does not cover potential side effects or failure modes. The ambiguous 'terminate the adb process' wording leaves room for misinterpretation about the tool's full impact.

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 already provides a clear description for session_id ('The session ID returned by adb_shell_open'), and the tool description adds no further parameter semantics. With 100% schema coverage, the baseline score of 3 is appropriate.

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 'Close an ADB shell session' with a specific verb and resource, distinguishing it from sibling tools like adb_shell_open and adb_shell_write. However, the phrase 'terminate the adb process' introduces ambiguity about the scope (shell process vs. entire adb server), slightly reducing clarity.

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 this when done with an ADB shell session) but provides no explicit guidance on when to use it versus alternatives, nor does it mention prerequisites like having an open session. It lacks the exclusions or alternative references seen in stronger examples.

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

adb_shell_execA

Send a command to an ADB shell session and wait for the output. Combines write + delay + read in one call. IMPORTANT: Do NOT issue concurrent commands to the same session_id — the ADB shell is a single channel; concurrent calls will interleave output and corrupt results. Always wait for the previous command to finish before sending the next one. If you need parallel execution, open multiple sessions via adb_shell_open.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
delayNoMinimum polling duration in milliseconds (default: 1000), kept for backward compat
commandYesThe command to send to the shell
session_idYesThe session ID returned by adb_shell_open
maxDurationNoExecution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full transparency responsibility. It discloses the single-channel concurrency risk, the combined write+delay+read behavior, and detailed timeout semantics including Ctrl+C handling for resident commands. This goes beyond mere functionality and addresses practical safety concerns.

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 thorough but not bloated. The core purpose is stated first, followed by a crucial warning, then an alternative, and finally detailed timeout guidance. Each section earns its place, though the maxDuration explanation could arguably be trimmed without losing essential information.

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 no output schema and no annotations, the description is remarkably complete. It explains the operation, concurrency constraints, timeout behavior, and parameter nuances, ensuring an agent can use the tool safely and effectively without needing external context. No critical gaps are apparent.

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?

Schema coverage is 100%, so baseline is 3. The description adds critical semantics for maxDuration (always pass a timeout, suggested ranges, fallback behavior), which is not present in the schema. Other parameters are already well described, but the extra guidance for maxDuration elevates the score.

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

Purpose5/5

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

The description clearly states the tool sends a command to an ADB shell session and waits for output, combining write/delay/read. It distinguishes from siblings like adb_shell_write and adb_shell_read by explaining the combined behavior, and mentions alternatives like adb_shell_open for parallel sessions.

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

Usage Guidelines5/5

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

The description explicitly warns against concurrency on the same session and instructs to wait for previous commands, with a clear alternative (open multiple sessions). It also provides guidance on timeout estimation via maxDuration, making usage expectations concrete.

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

adb_shell_openA

Open an interactive ADB shell session to an Android device. Returns the initial banner output.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoTarget device alias, e.g. "board-lubancat". PREFER passing the alias when you know the target device: it reads the serialNo bound in config and connects directly without device probing, and the log directory follows the alias. Passing a raw serial number is also accepted — it is auto-resolved back to the alias when bound. Omit only when no specific device is intended; the program then auto-discovers the single connected device (errors out if 0 or >1 devices). There is NO need to call adb_device_list first.

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It mentions returning the initial banner output and describes auto-discovery behavior (errors if 0 or >1 devices) and connection details (no probing, log directory follows alias). Still, it does not disclose session lifecycle (e.g., session remains open until adb_shell_close) or prerequisites like ADB connectivity.

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 main description is two succinct sentences that front-load the core purpose. The parameter details are structured within the schema and are relevant and well-organized. No filler or redundant text.

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 and no output schema, the description adequately covers the main functionality and return value (banner output). It could be more complete by referencing the companion close tool or session lifecycle, but the sibling list and 'interactive session' terminology provide enough context for an experienced agent.

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

Parameters5/5

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

The parameter description far exceeds the schema, explaining when to pass an alias vs serial, how serials are resolved back to aliases, the exact behavior when omitted (auto-discovery with error conditions), and a note about log directories. This adds substantial semantic value beyond the schema's simple 'Target device alias'.

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 ('Open an interactive ADB shell session') and the resource ('Android device'). It distinguishes itself from siblings like adb_shell_exec (which executes one-off commands) and other shell open tools by specifying 'ADB shell' and 'interactive session'.

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 parameter description gives practical guidance on device selection (prefer alias, omit only for single device) and explicitly notes there is no need to call adb_device_list. However, it does not provide explicit when-to-use vs alternatives, such as contrasting with adb_shell_exec for single commands or explaining when to use adb_shell_open instead of other session types.

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

adb_shell_readA

Read output from an ADB shell session. Do NOT call this concurrently with adb_shell_exec/adb_shell_write on the same session_id — concurrent access to the same ADB shell corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer after reading, 0 = keep buffer
session_idYesThe session ID returned by adb_shell_open

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description takes on the burden of behavioral disclosure. It reveals a critical behavioral trait: concurrent access corrupts the output buffer. This is valuable beyond the schema. It does not fully describe all behavior (e.g., blocking, empty buffer), but it covers the key risk.

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 a crucial usage warning. Every word earns its place; there is no fluff or redundancy.

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 (2 parameters, no output schema), the description is sufficiently complete. It covers purpose and a critical concurrency constraint. The schema handles parameter details, so the description doesn't need to repeat them. It is complete enough for an agent to use correctly.

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 baseline is 3. The description does not add any additional parameter semantics beyond what the schema already provides for session_id and clear. The clear parameter's meaning is fully documented in the schema, not the description.

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

Purpose5/5

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

The description clearly states the tool's purpose with a specific verb+resource: 'Read output from an ADB shell session.' It distinguishes itself from sibling tools like adb_shell_write and adb_shell_exec through the concurrency warning and the focus on reading.

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 an explicit when-not-to-use guideline: 'Do NOT call this concurrently with adb_shell_exec/adb_shell_write on the same session_id.' It does not name alternative tools for the same session, but the context of reading vs. writing/executing is clear.

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

adb_shell_send_ctrlA

Send a control character (Ctrl+C/U/D/Z) to an ADB shell session without appending a newline.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesControl character: c=Ctrl+C(SIGINT), u=Ctrl+U(clear line), d=Ctrl+D(EOF), z=Ctrl+Z(suspend)
session_idYesThe session ID returned by adb_shell_open

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses a key behavioral trait: 'without appending a newline'. This adds value beyond the schema. It doesn't elaborate on error cases or prerequisites, but for a simple signal-sender, this is sufficient.

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 concisely states the action and a critical nuance. There is no wasted verbiage.

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?

For a simple tool with two fully documented parameters and no output schema, the description covers the essential purpose, action, and distinguishing behavior. The sibling context (adb_shell_*) reinforces the domain. No additional detail is necessary.

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%: both session_id and key are fully described in the schema, including the enum values for key. The description adds no additional parameter semantics beyond the schema, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool sends a control character (Ctrl+C/U/D/Z) to an ADB shell session, with the specific behavior of not appending a newline. This distinguishes it from sibling tools like adb_shell_write (for text input) and adb_shell_exec (for commands).

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 context is clear: use this tool to send a control character to an active ADB shell session. It doesn't explicitly mention alternatives or when not to use it, but the specificity of the action and the session_id parameter imply proper usage. No exclusions are stated.

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

adb_shell_writeA

Send a command to an ADB shell session. Do NOT call this concurrently with adb_shell_exec/adb_shell_read on the same session_id — concurrent access to the same ADB shell corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
commandYesThe command to send to the shell
session_idYesThe session ID returned by adb_shell_open

TDQS

A3.7/5.0
Behavior3/5

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

There are no annotations, so the description carries the behavioral burden. It discloses the important concurrency hazard (output buffer corruption), but does not mention side effects of executing commands, prerequisites like an open session, or how output is retrieved.

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 sentences: the first states the core purpose, and the second provides a critical behavioral warning. No redundant wording, and the most important caveat is highlighted.

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

Completeness3/5

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

The description is minimally viable for a simple command-sending tool, but with no output schema and no annotations it could be stronger. It omits how to read output (though adb_shell_read is hinted at), whether a session must already be open, and 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 100%, and each parameter has a clear description in the schema. The tool description adds no parameter-specific meaning beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Send a command to an ADB shell session') with a specific resource. It does not explicitly differentiate from adb_shell_exec, which could overlap in behavior, so it stops short of full sibling differentiation.

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 an explicit when-not usage rule: do not call concurrently with adb_shell_exec/adb_shell_read on the same session_id. It does not describe positive use cases or alternative tool selection, but the concurrency warning gives actionable context.

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

device_info_toolA

Get device configuration. Uses the default device when no name is given; returns all devices when 'all' is specified.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice name (optional). Omit to use the default device; pass 'all' to list every configured device.

TDQS

A4.2/5.0
Behavior4/5

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

Despite no annotations, the description discloses key behaviors: using default device when no name is given and returning all devices for 'all'. This provides good transparency for a read-only configuration 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 efficient sentences: first states purpose, second adds parameter usage details. No 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?

For a simple tool with one optional parameter, the description covers the key behaviors and edge cases (default and 'all'). It lacks output format details, but that's acceptable given no 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?

With 100% schema description coverage, the description adds meaning beyond the schema by explaining the semantics of omitting the parameter (default device) and using 'all'.

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 'Get' and the resource 'device configuration', and the behavior differentiates from siblings like adb_device_list by explaining the handling of 'all' and default device.

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 explains when to omit or use 'all' for the parameter, but lacks explicit guidance on when to use this tool versus sibling tools (e.g., adb_device_list, adb_exec).

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

greet_toolB

Greet someone by name

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only states 'Greet someone by name' but does not mention side effects, return value, safety, or any potential side effects. The agent cannot infer if this is a pure function, what it returns, or if it has any external effects.

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, short, front-loaded sentence with zero wasted words. It conveys the essential action efficiently, earning a perfect score.

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

Completeness3/5

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

For a tool with one required parameter and no output schema, the description is minimally adequate for invocation but lacks essential behavioral context. It does not describe the return value or any side effects, which an agent would need for full understanding. However, given the trivial nature of greeting, a score of 3 reflects the adequacy with clear gaps.

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

Parameters2/5

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

The schema has 0% parameter description coverage, and the tool description only says 'by name', which barely clarifies the 'name' parameter. It adds no detail about format, constraints, or meaning beyond the parameter name itself, failing to compensate for the lack of schema documentation.

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 'Greet someone by name' uses a specific verb ('greet') and a clear object ('someone by name'), making it distinct from sibling tools which are all SSH/serial/network operations. Although it doesn't specify the output, the core action is 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. There are no prerequisites, exclusions, or context clues about typical usage scenarios beyond the obvious greeting purpose.

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

host_infoA

Query the MCP host endpoint (username@ip) of @smai-kit/embedded-mcp-toolkit for constructing cross-machine file transfers (scp) when this MCP (@smai-kit/embedded-mcp-toolkit) runs on Windows and the AI client runs on Linux. Also returns the @smai-kit/embedded-mcp-toolkit log save directories (business log & raw data log absolute paths) for locating/cleaning up logs. Returns 'local started' with no endpoint for local launches.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/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 disclosing behavior. It does so by stating the read-only query nature, the endpoint format (username@ip), the log directory output, and the local-launch special case. This exceeds minimal disclosure and helps the agent anticipate results without calling the 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 packs multiple useful facts into a compact form: purpose, use case, output details, and a conditional edge case. Each sentence earns its place, though it could be tightened slightly by separating the log-directory detail from the endpoint query topic.

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?

For a zero-parameter tool with no output schema, the description is remarkably complete. It explains what is returned, under what conditions, for what purpose, and how to interpret the special local-launch result. No critical information is missing for an agent to call and understand 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 schema already fully covers parameter semantics. The description appropriately does not invent parameter details and instead focuses on output behavior. Baseline 4 is appropriate for a no-parameter tool.

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

Purpose5/5

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

The description states a specific verb (query) and resource (MCP host endpoint, log save directories) and explains the concrete use case (cross-machine scp transfers). It clearly identifies what the tool returns and distinguishes its purpose from the broader sibling set of shell/serial/network tools.

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 provides clear context for when the tool is needed (MCP on Windows, AI client on Linux) and when it behaves differently (local launches return 'local started' with no endpoint). It does not explicitly name alternative tools, but the scp-transfer context is specific enough to guide selection without confusion.

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

network_scan_toolA

Scan Windows network adapters and configurations (IP, MAC, status, speed)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. 'Scan' implies a non-destructive read operation, and the listed fields give some detail. However, it does not disclose permissions, scope (local vs remote), or any side effects, which is a moderate gap for a tool that could potentially access network configurations.

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 concise sentence, no redundant information. It front-loads the action and resource, making it easily scannable for an AI agent.

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

Completeness3/5

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

The description covers the basic purpose and the type of data returned (IP, MAC, status, speed), but it lacks details about output format, local vs remote scope, and any prerequisites. Given no output schema exists, the description should provide more context on what the agent can expect after invocation.

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?

This tool has zero parameters, so the schema is trivially covered (100%). The description does not need to explain parameters, and the baseline for 0-param tools is 4.

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

Purpose5/5

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

The description clearly states the verb 'Scan' and the resource 'Windows network adapters', and further specifies the configuration details (IP, MAC, status, speed). This clearly distinguishes it from sibling tools like port_scan_tool and subnet_check_tool, which focus on other network aspects.

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

Usage Guidelines3/5

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

The description implies usage when network adapter information is needed on Windows, but it does not explicitly state when to prefer this over alternatives or mention any exclusions. There is no comparison with sibling tools, so the agent must infer usage from the tool name and description alone.

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

port_scan_toolA

Scan Windows Device Manager for available COM (serial) and LPT (parallel) ports

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It describes the action (scanning Device Manager) but does not disclose behavioral details such as whether it is read-only, potential permissions required, or what the output format looks like. The description is not misleading, but it 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, concise sentence with no unnecessary words or repetition. It is front-loaded and immediately clear.

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 output schema or annotations. The description explains the purpose but does not specify the return value structure (e.g., list of port names, maybe with details). This is a notable gap given that the output schema is absent.

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?

There are zero parameters, and the schema has 100% coverage (empty schema). Per the baseline rule for 0-param tools, a score of 4 is appropriate; no parameter explanation 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 clearly states the tool's function with a specific verb ('Scan') and resource ('Windows Device Manager') for COM and LPT ports. It is unambiguous and distinguishes itself from sibling tools that handle individual ports or shell operations.

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?

Usage is implied: it is the tool to call when you need to discover available serial/parallel ports. However, there is no explicit guidance on when to use this versus alternatives (e.g., serial_open to act on a specific port) or when not to use it.

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

power_shell_closeA

Close a PowerShell shell session and terminate the process.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session ID returned by power_shell_open

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose the key behavior that the process is terminated, not just the session closed. However, it omits consequences like irreversibility, error handling for invalid sessions, or whether it is a graceful shutdown, leaving gaps in transparency.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that is concise and without waste. It directly states the action and target, making it easy to parse.

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 one-parameter close operation, the description is mostly complete. It states the action and the process termination, and the schema fills in the parameter. What is missing is mention of what happens on failure or whether the operation is safe to repeat, but these are minor for a straightforward close 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?

The schema covers 100% of the parameter, describing session_id as 'The session ID returned by power_shell_open'. The description adds no additional parameter semantics, so the baseline score 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 clearly states the tool's function: closing a PowerShell shell session and terminating the process. It is specific about the resource (PowerShell session) and the action (close/terminate), distinguishing it from sibling close tools for SSH, serial, or ADB.

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: when you have a PowerShell session to close. However, it does not explicitly mention alternatives (e.g., ssh_shell_close, adb_shell_close) or provide exclusions, so the guidance is implied and not fully developed.

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

power_shell_execA

Send a command to a PowerShell shell session and wait for the output. Combines write + delay + read in one call. IMPORTANT: Do NOT issue concurrent commands to the same session_id — the PowerShell process is a single channel; concurrent calls will interleave output and corrupt results. Always wait for the previous command to finish before sending the next one.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
delayNoWait time in milliseconds before reading output (default: 1000)
commandYesThe PowerShell command to execute
session_idYesThe session ID returned by power_shell_open

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It discloses the combined operation flow (write + delay + read), indicates the one-way session nature, and highlights the critical concurrency/interleaving hazard. It doesn't cover timeout, error, or return-value behavior, but the core behavioral traits are 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 primary purpose, and includes a crucial operational warning. No filler or redundant repetition of schema information.

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

Completeness3/5

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

The description covers the core behavior and concurrency rule, which is essential context. However, with no output schema and no annotations, it omits return-value details (e.g., stdout, stderr, exit code), failure behavior, and timeout semantics, leaving some uncertainty for an agent invoking this 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?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal parameter-level insight beyond the combined operation concept; it doesn't elaborate on `clear`, `delay`, or `command` semantics beyond the schema definitions.

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: 'Send a command to a PowerShell shell session and wait for the output.' It further distinguishes itself by explaining that it combines write + delay + read in one call, setting it apart from sibling tools like power_shell_write and power_shell_read.

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 explicit usage guidance by warning against concurrent commands and instructing the agent to wait for the previous command to finish. It implies this tool is the synchronous alternative to manually chaining write/read calls, though it doesn't explicitly enumerate alternatives.

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

power_shell_openA

Open an interactive PowerShell shell session on the local Windows machine. Returns the initial banner output.

ParametersJSON Schema
NameRequiredDescriptionDefault
workingDirNoWorking directory for the PowerShell process (default: current working directory)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full transparency burden. It discloses that the tool opens a persistent interactive session and returns the initial banner, but it omits lifecycle expectations (e.g., needing power_shell_close) and resource implications. Some behavioral insight is present, but key details are missing.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with no redundancy. It immediately states the action and resource, then describes the return value, achieving high conciseness and clear structure.

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

Completeness3/5

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

For a simple tool with one fully documented optional parameter, the description states the purpose and return value. However, without annotations or an output schema, it does not mention the session lifecycle or how this tool fits with power_shell_close/read/write, leaving the agent to infer important 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?

The input schema covers 100% of the single parameter (workingDir) with a meaningful description, so the baseline of 3 applies. The tool description itself adds no parameter-specific information, providing no extra 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 uses a specific verb ('Open') and clearly identifies the resource as 'interactive PowerShell shell session on the local Windows machine', distinguishing it from SSH, ADB, and serial shell open tools. It also states the immediate return behavior ('initial banner output'), making the tool's core function 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 when an interactive local PowerShell session is needed, but it does not explicitly contrast with sibling tools like power_shell_exec for one-off commands or mention session termination via power_shell_close. It provides context (local, interactive) but lacks explicit when-to-use/alternative guidance.

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

power_shell_readA

Read output from a PowerShell shell session. Do NOT call this concurrently with power_shell_exec/power_shell_write on the same session_id — concurrent access to the same PowerShell process corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer after reading, 0 = keep buffer
session_idYesThe session ID returned by power_shell_open

TDQS

A4.4/5.0
Behavior4/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 concurrency hazard that can corrupt the output buffer, which is important behavioral context. It doesn't mention return format or clearing behavior, but those are partially covered by the schema's 'clear' parameter.

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 concise sentences: the first states the purpose, the second delivers a crucial warning. Front-loaded and every word earns its place.

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?

The tool is simple (read output) and has no output schema. The description explains the core function and the concurrency constraint, which is essential context. It doesn't describe the return structure, but that's typical for a read tool and not required given the 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% — both parameters ('session_id' and 'clear') are documented in the schema. The description adds no additional parameter semantics beyond the schema, so baseline 3 is appropriate.

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 the tool's purpose clearly: 'Read output from a PowerShell shell session' — specific verb and resource. It differentiates from sibling tools like power_shell_exec and power_shell_write by focusing on reading output.

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

Usage Guidelines5/5

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

Provides explicit concurrency guidance: 'Do NOT call this concurrently with power_shell_exec/power_shell_write on the same session_id — concurrent access to the same PowerShell process corrupts the output buffer.' This clearly instructs when not to use it and highlights a critical constraint.

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

power_shell_writeA

Send a command to a PowerShell shell session. Do NOT call this concurrently with power_shell_exec/power_shell_read on the same session_id — concurrent access to the same PowerShell process corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
commandYesThe PowerShell command to send
session_idYesThe session ID returned by power_shell_open

TDQS

A4/5.0
Behavior4/5

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

Given no annotations, the description carries the burden of behavioral disclosure. It reveals a critical behavioral trait: concurrent access corrupts the output buffer, which is a non-obvious constraint. However, it does not mention side effects of the command itself (e.g., whether it modifies the session state) or expected output behavior beyond buffer handling. The description adds the 'clear' flag context, which briefly explains the parameter but lacks detail on output format.

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 primary action, and includes a critical caution efficiently. No wasted words.

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 write tool with good schema coverage and a clear description, the description covers the crucial concurrency warning, but it lacks information on output format or post-execution steps. The command syntax is simple, so a 3 reflects that it's a concise definition but not a complete one.

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?

Schema coverage is 100% with descriptions for all three parameters. The description adds context on the 'clear' parameter (buffer clearing behavior) and relates session_id to power_shell_open, which clarifies usage. This additional context exceeds the schema baseline, so a 4 is appropriate.

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

Purpose4/5

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

The description clearly states the verb 'Send' and resource 'command to a PowerShell shell session', which identifies the tool's purpose. It distinguishes it from siblings like power_shell_read and power_shell_exec by focusing on writing, though it doesn't explicitly contrast with them.

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

Usage Guidelines4/5

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

The description provides an explicit 'Do NOT call concurrently' warning with sibling tools, which is strong usage guidance. It doesn't specify when to use this tool over alternatives (e.g., vs exec), but the concurrency constraint is a clear usage rule.

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

serial_closeA

Close a serial port session and release the port.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session ID returned by serial_open

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. While 'close and release' clearly indicates a destructive action (mutating state), it does not disclose any side effects such as what happens to buffered data, whether the port is immediately reusable, or any error conditions. This is minimal transparency.

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

Conciseness5/5

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

The description is a single concise sentence with no wasted words. It efficiently conveys the tool's purpose and is front-loaded.

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

Completeness3/5

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

Given the tool's simplicity (one parameter, no output schema), the description is functionally complete but lacks context about prerequisites (e.g., session must be open), expected behavior on partial closures, or error handling. It does not fully compensate for the lack of annotations.

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% and describes session_id as 'The session ID returned by serial_open'. The description adds no additional meaning beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's action ('close a serial port session') and its effect ('release the port'). It uses specific verb and resource, distinguishing it from siblings like serial_open, serial_read, and serial_write.

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 after an open session, but does not explicitly state when to use (e.g., after finishing communication) or when not to use (e.g., if session is already closed). No alternatives or exclusions are mentioned.

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

serial_downloadA

Download a binary file from the device over ZMODEM via an existing serial session. The device must have lrzsz installed (sz command). IMPORTANT: this tool triggers the device-side sz by itself (via send_cmd); do NOT manually run sz (or serial_exec/write sz) on the session beforehand — a pre-started sz enters its own sending state that breaks the tool's ZMODEM handshake. Just call this tool and pass send_cmd when a directory change is needed (e.g. "cd /home && sz {remote}"). remote_path resolves on the device relative to the shell's current working directory — prefer an absolute path, or combine send_cmd with a cd to pin the directory. If the remote file does not exist or is unreadable, sz errors out and the transfer fails (a partial local file, if any, is removed on failure). Blocks until transfer completes, fails, or times out; progress is logged to stderr. Two timeouts: idle_timeout aborts on stalled transfer (real failure); timeout caps total duration and reports a suggested value if still progressing.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoOverall timeout in seconds as a safety cap against indefinite hangs (default: 300). If reached while the transfer is still progressing (no idle), reports the timeout as too small with a suggested value instead of silently truncating.
send_cmdNoDevice send command template (default: 'sz {remote}'). {remote} is replaced by remote_path. The tool runs this command itself on the device — do NOT start sz manually beforehand. Use it for directory changes, e.g. "cd /home && sz {remote}"
local_pathYesLocal destination file path
session_idYesThe session ID returned by serial_open
remote_pathYesRemote source file path on the device. Resolved relative to the shell's current working directory — prefer an absolute path, or pin the directory via send_cmd (e.g. "cd /home && sz {remote}"). The file must exist and be readable; otherwise sz errors out and the transfer fails.
idle_timeoutNoIdle timeout in seconds: if no data flows for this long, the transfer is treated as a real failure (link/device stalled) and aborted. Independent of file size (default: 15, min: 3).

TDQS

A4.7/5.0
Behavior5/5

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

Thoroughly discloses internal behavior: triggers device-side sz itself, uses ZMODEM handshake, blocks until completion/failure/timeout, logs to stderr, handles partial file removal on error, resolves remote_path relative to cwd, and explains the two distinct timeouts. No annotations exist, so this description fully carries the transparency 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 well-structured with a clear main purpose, an IMPORTANT warning, and logically ordered details. Each sentence contributes essential information given the complexity of ZMODEM transfers, avoiding superfluous text.

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?

Covers prerequisites, usage, error handling, timeouts, and failure modes comprehensively. Even without an output schema, it explains what happens during and after the operation (e.g., removal of partial files, blocking behavior). Complete for a tool with this complexity.

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 already provides detailed descriptions for all parameters (100% coverage), but the description adds holistic context about how parameters interact (e.g., send_cmd for directory changes, timeouts interplay). This adds value beyond the schema, though the schema alone is quite informative.

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 (download a binary file) and the specific method (over ZMODEM via an existing serial session), distinguishing it from sibling tools like serial_upload or ssh_sftp_download.

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?

Provides explicit usage constraints (e.g., do NOT manually run sz, use send_cmd for directory changes) and clarifies prerequisites (existing serial session, lrzsz installed). Does not explicitly compare with alternative download methods (e.g., ssh_sftp_download), but the context makes the intended use clear.

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

serial_enter_ubootA

Enter U-Boot by rebooting the device and stopping autoboot. Detection rules (autoboot prompts, command prompt, verify env keys) are configurable via device config serial.uboot; falls back to built-in defaults. Two-layer strategy: prompt match first; if not matched within a short window, sends 'printenv' and verifies U-Boot env keys. Fails fast on kernel boot or verify timeout.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoTotal timeout in seconds to wait for autoboot prompt (default: 60)
session_idYesThe session ID returned by serial_open

TDQS

A4.7/5.0
Behavior5/5

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

No annotations are present, so the description carries full responsibility. It discloses the reboot side effect, configurable detection rules, fallback to 'printenv', and failure modes (kernel boot or verify timeout). This is rich transparency.

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

Conciseness5/5

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

Three sentences, each adding value: purpose, strategy/config, and failure behavior. No redundancy.

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?

Covers the tool's entire workflow: reboot, detection, fallback, and failure. No output schema exists, but the description does not need to explain return values as it's a side-effectful operation. Only minor omission is explicit prerequisite of an open serial session, but session_id implies it.

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?

Schema coverage is 100% for both parameters. The description reinforces the timeout behavior by mentioning a 'short window' and 'fails fast,' adding strategic context beyond the schema's definition. session_id is left to the schema, which is sufficient.

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 action—'Enter U-Boot by rebooting the device and stopping autoboot'—and includes a mechanism (reboot + autoboot stop). This clearly distinguishes it from sibling serial tools like serial_exec or serial_shell_login.

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 describes the tool's role in the boot process and explains the detection strategy, but it does not explicitly state when to prefer this over alternatives or when not to use it. The context is clear for bootloader access, but no exclusions are given.

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

serial_execA

Send a command to a serial shell session and wait for the output. Combines write + delay + read in one call. IMPORTANT: Do NOT issue concurrent commands to the same session_id — the serial console is a single channel; concurrent calls will interleave output and corrupt results. Always wait for the previous command to finish before sending the next one. If you need parallel execution, open multiple sessions via serial_open.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
delayNoMinimum polling duration in milliseconds (default: 1000), kept for backward compat
commandYesThe command to send to the shell
session_idYesThe session ID returned by serial_open
maxDurationNoExecution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output.

TDQS

A4.3/5.0
Behavior4/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 concurrency hazards, buffer clearing via the 'clear' flag, timeout defaults, and that timeout type is annotated in output. However, it does not describe failure modes or output structure, which is a minor gap.

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 front-loaded with the core purpose, then adds a critical warning and a suggested alternative. It is somewhat lengthy but every sentence provides necessary operational detail, so it earns its place.

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 complexity (5 parameters, concurrency concerns, timeout behavior) and the lack of an output schema, the description covers essential usage, warnings, and alternatives. It stops short of specifying return data structure, but overall it is sufficiently complete for an agent to use effectively.

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

Parameters3/5

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

The schema covers 100% of parameters with detailed descriptions, including maxDuration defaults and guidance, clear flag semantics, and delay purpose. The description adds the 'combines write+delay+read' context but does not materially extend parameter understanding beyond what the schema already provides, 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 clearly states it sends a command to a serial shell session and waits for output, combining write, delay, and read. It explicitly differentiates itself from sibling tools like serial_write, serial_read, and serial_send_ctrl by describing its composite nature.

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

Usage Guidelines5/5

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

Provides explicit usage guidance: warns against concurrent calls on the same session, instructs to wait for previous commands, and recommends opening multiple sessions via serial_open for parallel execution. This gives clear when-to-use and when-not-to-use context.

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

serial_openA

Open a serial port connection and start an interactive shell session. Returns the initial banner output.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoSerial port path (e.g. COM3, /dev/ttyUSB0). Overrides device config if provided.
deviceNoDevice name (optional, defaults to the active device)
parityNoParity: none, even, or odd (default: none)
baudRateNoBaud rate (default: 115200)
dataBitsNoData bits: 5, 6, 7, or 8 (default: 8)
stopBitsNoStop bits: 1, 1.5, or 2 (default: 1)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description is the sole source of behavioral info. It announces that a shell session is started and returns banner output, but does not disclose side effects like port locking, timeout behavior, or required setup. Minimal but functional.

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?

Single sentence that front-loads the action, with no unnecessary words. Each part serves a purpose: action, resource, outcome.

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 6 parameters, no output schema, and no annotations, the description is thin. It omits lifecycle context such as how to close the session (though sibling serial_close exists) or whether multiple opens are allowed. Adequate for simple use but not fully self-contained.

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 clear descriptions for all 6 parameters. The tool description adds no extra semantics beyond the schema, so baseline 3 is appropriate.

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 (open a serial port and start a shell) and the resource (serial port connection), and mentions the return value (initial banner). It distinguishes from sibling tools like serial_exec and serial_read, which serve different purposes.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as serial_shell_login or adb_shell_open. The description does not provide context about prerequisites, lifecycle, or exclusions.

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

serial_readA

Read output from a serial shell session. Do NOT call this concurrently with serial_exec/serial_write on the same session_id — concurrent access to the same serial console corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer after reading, 0 = keep buffer
session_idYesThe session ID returned by serial_open

TDQS

A4.4/5.0
Behavior4/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 reveals a critical trait: concurrent access with serial_exec/serial_write corrupts the output buffer. However, it does not mention return format or whether it blocks, but the concurrency warning is a major safety disclosure.

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 only two sentences: first gives the purpose, second is a critical warning. No fluff, perfectly front-loaded, and every sentence earns its place.

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 read tool with well-documented parameters and no output schema, the description covers the essential context. The concurrency warning addresses the main risk, and the purposes is clear. It could mention buffering behavior briefly, but the clear parameter in schema partially covers that.

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 both parameters (session_id and clear) with 100% coverage, so the description adds no extra parameter meaning. Baseline of 3 is appropriate because the schema already does the heavy lifting.

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 'Read output from a serial shell session' with a specific verb and resource. It distinguishes itself from siblings by explicitly warning about concurrency with serial_exec/serial_write, making its role clear.

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

Usage Guidelines5/5

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

The description gives an explicit when-not-to-use guideline: 'Do NOT call this concurrently with serial_exec/serial_write on the same session_id.' This is a strong usage exclusion that helps the agent avoid a critical error, and it implies the tool's primary purpose is to read serial output.

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

serial_send_ctrlA

Send a control character (Ctrl+C/U/D/Z) to a serial shell session without appending a newline.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesControl character: c=Ctrl+C(SIGINT), u=Ctrl+U(clear line), d=Ctrl+D(EOF), z=Ctrl+Z(suspend)
session_idYesThe session ID returned by serial_open

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 burden of behavioral disclosure. It only states that a control character is sent without a newline, but does not describe session effects, whether the command blocks, or any prerequisites. The schema's enum descriptions add some detail, but the tool description itself lacks behavioral 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 includes the essential information—what the tool does and a key distinguishing detail—without any redundant or filler content.

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?

The tool is simple (two parameters, no output schema), and the description, combined with the schema, sufficiently conveys the action and scope. Some context is missing (e.g., whether the session must already be open), but this is minor given the simplicity and the sibling tool ecosystem.

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 having clear descriptions. The key parameter's enum values are explicitly documented (e.g., c=Ctrl+C, u=Ctrl+U). The tool description adds little beyond the schema, so a baseline of 3 is appropriate; it does not compensate with additional parameter-level meaning.

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 'Send', identifies the resource 'serial shell session', and specifies the exact set of control characters (Ctrl+C/U/D/Z). It also distinguishes itself from serial_write by noting it does not append a newline, making its purpose clear and distinct.

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

Usage Guidelines3/5

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

The description implies usage for sending control characters to a serial session, but does not explicitly state when to prefer this over alternatives like serial_write or serial_exec. No exclusions or alternative tools are mentioned, so guidance is limited to what can be inferred from the tool name and description.

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

serial_shell_loginA

One-click serial login: connect, detect PSH state, auto-unlock if locked, and return a ready session. Combines open + PSH detect + unlock into a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoUnlock key/password. If not provided, uses the configured KeyProvider (file IPC or terminal prompt)
deviceNoDevice name (optional, defaults to the active device)
timeoutNoUnlock step delay in milliseconds (default: 1500)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does a good job: it discloses the sequence of operations (connect, detect, unlock, return). It does not hide that it mutates state (auto-unlock) or that it establishes a session. However, it could add more context about what 'ready session' means, whether it leaves a persistent open connection, or failure behavior.

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 extremely concise and front-loaded: the first sentence states the purpose and outcome, the second explains the composite nature. Every word earns its place; no fluff or repetition.

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 composite login tool with no output schema, the description provides enough context: it tells the user what happens (connect, detect, unlock) and what to expect (ready session). It could be more complete by noting that the resulting session can be used with other serial tools, but that is implicitly understood from sibling names. Overall, it is well-suited for the tool's complexity.

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 already has 100% coverage with clear descriptions for key, device, and timeout. The description does not add any extra semantic meaning beyond the schema. The baseline of 3 applies because the schema does the heavy lifting and the description does not need to compensate.

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 what the tool does: connects to a device, detects PSH state, auto-unlocks if locked, and returns a ready session. It explicitly says it combines open + PSH detect + unlock, distinguishing it from sibling tools like serial_open or serial_exec. The verb+resource model is specific and informative.

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

Usage Guidelines4/5

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

The description conveys the clear context for use: when you want a one-click login that handles connection, PSH detection, and unlocking in a single call. It implies this is a convenience wrapper over separate steps but does not explicitly name alternative tools or state when NOT to use it. That would require explicit exclusions for a 5.

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

serial_uboot_stateA

Query, detect, or force-set the U-Boot mark of a serial session. The mark decides serial_exec's marker wrapping (U-Boot sessions use plain style without subshell). Actions: 'detect' (default) — classify the live environment from buffered tail evidence first (zero side effects); if inconclusive, send a bare Enter to redraw the prompt. Conclusive results sync the mark automatically. WARNING: do NOT detect while a command may still be running or waiting for interactive input (e.g. Y/N) — the probe Enter could answer it. 'set'/'clear' — force the mark when auto-detection is out of sync; 'status' — read the mark only, no device I/O.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNodetect (default) = probe live environment and sync mark; set/clear = force mark; status = read mark only
session_idYesThe session ID returned by serial_open

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description fully carries the behavioral burden. It discloses the zero-side-effect buffered tail inspection, the fallback bare Enter probe (including the potential to answer Y/N prompts), automatic syncing of conclusive results, and that 'status' performs no device I/O. This is exceptionally transparent for a tool with hidden side effects.

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 text is dense but every sentence serves a purpose: it introduces the resource, defines the mark's role, details each action, and includes a critical safety warning. The structure front-loads the purpose and uses clear action labels. No filler or redundant phrasing.

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 tool with no output schema, the description covers the tool's behavior, side effects, and action semantics thoroughly. The only gap is that it does not describe the exact return format for 'status' or 'detect' results, which an agent might need to process the output. Still, the description gives enough context for safe and effective use.

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 covers 100% of parameters, so baseline is 3. The description adds value beyond the schema by explaining the default action ('detect' default), the meaning of 'set'/'clear' in context, and the subtle consequence of 'detect' (auto-sync). This goes beyond the schema's terse enum descriptions, justifying a 4.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Query, detect, or force-set the U-Boot mark of a serial session.' It clearly defines the tool's scope and differentiates it from siblings by explaining its relationship to serial_exec's marker wrapping, making the purpose unmistakable.

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 explicit when-to-use guidance for each action ('detect' default, 'set'/'clear' for out-of-sync, 'status' for read-only) and includes an explicit warning against detecting while a command may be running or awaiting input. However, it does not name alternative sibling tools directly, so it stops short of a full 'how this compares to serial_enter_uboot' exclusion.

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

serial_uploadA

Upload a binary file to the device over ZMODEM via an existing serial session. The device must have lrzsz installed (rz command). IMPORTANT: this tool triggers the device-side rz by itself (via recv_cmd); do NOT manually run rz (or serial_exec/write rz) on the session beforehand — a pre-started rz enters its own waiting state that breaks the tool's ZMODEM handshake. Just call this tool and pass recv_cmd when a working directory change is needed (e.g. "cd /home && rz"). Blocks until transfer completes, fails, or times out; progress is logged to stderr. Two timeouts: idle_timeout aborts on stalled transfer (real failure); timeout caps total duration and reports a suggested value if still progressing.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoOverall timeout in seconds as a safety cap against indefinite hangs (default: 300). If reached while the transfer is still progressing (no idle), reports the timeout as too small with a suggested value instead of silently truncating.
recv_cmdNoDevice receive command (default: 'rz'). The tool runs this command itself on the device after disabling flow control — do NOT start rz manually beforehand. Use it for directory changes or options, e.g. "cd /home && rz -e" to receive into /home, or 'rz -e' to escape control chars
local_pathYesLocal source file path
session_idYesThe session ID returned by serial_open
remote_nameNoRemote file name (default: basename of local_path). The device rz will name the file accordingly.
idle_timeoutNoIdle timeout in seconds: if no data flows for this long, the transfer is treated as a real failure (link/device stalled) and aborted. Independent of file size (default: 15, min: 3).

TDQS

A4.7/5.0
Behavior5/5

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

There are no annotations, so the description carries the full behavioral burden. It discloses that the tool triggers the device-side rz itself, blocks until completion/failure/timeout, logs progress to stderr, and explains the distinct semantics of idle_timeout versus timeout, including the suggested-value behavior on huge transfers.

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 front-loaded with purpose, immediately follows with the critical handshake warning, and then covers usage and timeout behavior. Every sentence contributes important operational context with no redundant filler.

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 no annotations, no output schema, and six parameters, this is an unusually complete description. It covers prerequisites, failure modes, handshake risks, usage guidance, blocking behavior, stderr logging, and timeout semantics, leaving very little for the agent to infer or discover by mistake.

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% and every parameter already has a rich description, so the baseline is satisfied. The main description reinforces recvcmd and the timeouts and adds the working-directory-change example, but it does not meaningfully extend understanding of local_path, remote_name, or session_id beyond what the schema already states.

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 action and resource: 'Upload a binary file to the device over ZMODEM via an existing serial session.' This makes the purpose unambiguous and distinguishes it from low-level sibling operations like serial_write or serial_exec.

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

Usage Guidelines5/5

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

It provides explicit preconditions (lrzsz must be installed), explicit exclusions (do NOT manually run rz beforehand), and clear usage examples for recv_cmd, including directory changes like 'cd /home && rz'. It also warns against using serial_exec/write to start rz, making the when-not guidance specific.

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

serial_writeB

Send a command to a serial shell session. Do NOT call this concurrently with serial_exec/serial_read on the same session_id — concurrent access to the same serial console corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
commandYesThe command to send to the shell
session_idYesThe session ID returned by serial_open

TDQS

B3.3/5.0
Behavior3/5

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

The description discloses the behavioral effect of concurrent access on the output buffer, which is a valuable warning. However, with no annotations provided, the description carries the full burden but does not cover other important behaviors like default buffer clearing (clear flag), error handling, or return behavior.

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

Conciseness5/5

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

The entire description is two sentences: the first states the purpose, the second a critical warning. It is front-loaded, concise, and every word earns its place.

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

Completeness3/5

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

For a simple write operation, the description provides the essential purpose and a concurrency caveat. However, it does not mention what the function returns (or if it returns anything), nor does it explain relationships with sibling tools, leaving some gaps for a tool with no annotations and no output schema.

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?

All three parameters are fully described in the input schema with 100% coverage, including the clear flag's purpose and default. The description does not add any additional meaning beyond what the schema already provides, so it meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the verb 'Send' and the resource 'a command to a serial shell session', which distinguishes it from reading or executing on the serial console. It is specific and actionable, though it does not explicitly compare to sibling tools like serial_exec.

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 only usage guidance is a negative warning about concurrency with serial_exec/serial_read. It does not explain when to use serial_write versus alternatives such as serial_exec or serial_send_ctrl, nor does it provide context like prerequisites or typical use cases.

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

session_infoA

Query active session metadata. Pass session_id for one session, device for all sessions of a device, or neither for all active sessions. Each session returns: session id, connection type (serial/ssh/adb), device name, connection info (e.g. COM3@115200), creation time, and the raw session log file path (serial/ssh/adb traffic recorded continuously by the server, including full boot logs after reset/reboot).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice name (e.g. board-a). Lists all sessions for this device.
session_idNoSession ID (e.g. ssh_1). Returns metadata for this session.

TDQS

A4.5/5.0
Behavior4/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 return fields and the key behavior that logs are recorded continuously, including boot logs. It does not explicitly state side effects or permissions, but as a metadata query it is implicitly safe and read-only. This is more transparent than many descriptions.

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 sentences, front-loaded with the core purpose, then parameter behavior, then return details. Every sentence earns its place, with no redundant or filler content.

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's simplicity (two optional params, no output schema), the description is complete. It covers all parameter combinations, lists all return fields, and includes important behavioral context about log recording. No significant 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?

Schema coverage is 100% with descriptions for both parameters. The description adds value by explaining the 'neither' case and describing the return structure, which goes beyond the schema's brief parameter descriptions. It clarifies the filtering semantics effectively.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Query active session metadata.' It uses a specific verb (Query) and resource (active session metadata), and distinguishes itself from sibling tools which are all about shell/connection operations rather than metadata lookup.

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 explains the parameter combinations: 'Pass session_id for one session, device for all sessions of a device, or neither for all active sessions.' This gives clear context on how to use the tool, though it does not explicitly exclude alternatives or mention when not to use it. However, the distinction from the sibling action tools is implicit and clear enough.

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

ssh_buildA

Execute a build command on the remote server via SSH, wait for completion, classify errors/warnings, and return structured build results for AI analysis. IMPORTANT: Each session supports only ONE build at a time. For concurrent builds, open multiple sessions via ssh_shell_open and assign one build per session.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory on the remote server for the build command
commandYesThe build command to execute (e.g., 'make -j8', './build.sh')
maxWaitNoMaximum wait time in milliseconds (default: 600000 = 10 minutes)
classifyNoWhether to classify output into errors/warnings/info queues (default: true)
session_idYesThe session ID returned by ssh_shell_open or ssh_shell_login. One session supports only one build at a time — open multiple sessions for concurrent builds.
pollIntervalNoPoll interval in milliseconds to check for build completion (default: 2000)

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It discloses key behaviors: execution, waiting, classification, and structured results. However, details on classification scope, timeout handling, and error responses are missing, preventing a perfect score.

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 sentences plus an important note. Front-loaded with the core action. No redundant information. Every word earns its place.

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

Completeness3/5

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

No output schema, so description should hint at return structure. It mentions 'structured build results for AI analysis' but lacks specifics on failure modes, timeouts (despite maxWait parameter), or classification details. Adequate but with 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?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the one-build-per-session constraint (reinforcing session_id semantics) and noting classification (relating to classify parameter), exceeding baseline.

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 it executes a build command on a remote server via SSH, waits for completion, classifies errors/warnings, and returns structured results. It distinguishes from siblings like ssh_shell_exec by specifying build-specific behavior and the one-session-one-build constraint.

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

Usage Guidelines5/5

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

Explicitly states that each session supports only one build at a time and advises opening multiple sessions via ssh_shell_open for concurrent builds, providing clear when-to-use and 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.

ssh_sftp_downloadA

Download a remote file from the board to local over SFTP, reusing an existing SSH session.

ParametersJSON Schema
NameRequiredDescriptionDefault
local_pathYesLocal destination file path
session_idYesThe session ID returned by ssh_shell_open / ssh_shell_login
remote_pathYesRemote source file path

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It mentions the reuse of an existing session, which is key. However, it does not disclose behavior such as whether local files are overwritten, error handling, or permission requirements. This is adequate but could be more detailed.

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

Conciseness5/5

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

The description is a single sentence that efficiently conveys the tool's purpose, prerequisite, and mechanism. No unnecessary 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 (download file with given paths and session), the description is largely complete. However, it does not mention return values or overwrite behavior. With no output schema, a brief note on success/error would improve completeness.

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%: all three parameters (local_path, session_id, remote_path) have descriptions in the input schema. The description adds no additional parameter information beyond the schema. Baseline is 3.

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

Purpose5/5

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

The description clearly states 'Download a remote file from the board to local over SFTP, reusing an existing SSH session.' It specifies the action (download), source (remote), destination (local), protocol (SFTP), and prerequisite (existing session). It distinguishes from sibling tools like ssh_sftp_upload and ssh_shell_* commands.

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 stating 'reusing an existing SSH session,' which indicates an established session is required. However, it does not explicitly state when not to use this tool or reference alternative tools for similar tasks (e.g., uploading via ssh_sftp_upload or shell commands).

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

ssh_sftp_uploadA

Upload a local file to the remote board over SFTP, reusing an existing SSH session.

ParametersJSON Schema
NameRequiredDescriptionDefault
local_pathYesLocal source file path
session_idYesThe session ID returned by ssh_shell_open / ssh_shell_login
remote_pathYesRemote destination file path

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 only states the action and session reuse, but does not disclose whether the remote file is overwritten, what happens on error, or any side effects. This is a significant gap for a mutation tool without annotation support.

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, well-structured sentence that states the action, method, and prerequisite in a concise manner. Every word contributes meaning, and there is no wasted content.

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?

With no output schema and no annotations, the description omits return value information and error behavior. However, the tool is simple and the prerequisite (existing SSH session) is mentioned. This is adequate but not complete for a tool that could fail on invalid session or overwrite conflicts.

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

Parameters3/5

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

The schema descriptions cover all three parameters (local_path, remote_path, session_id) with 100% coverage. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool uploads a local file to a remote board via SFTP, and explicitly notes it reuses an existing SSH session. This specific verb+resource+method distinguishes it from siblings like ssh_sftp_download and serial_upload.

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 clear context: it reuses an existing SSH session, implying the user must have opened one first. It does not explicitly name alternatives or state when not to use it, but the context is sufficiently clear to guide the agent.

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

ssh_shell_closeB

Close an SSH shell session and release the connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session ID returned by ssh_shell_open

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states that the session is closed and the connection released, but does not describe consequences like subsequent reads/writes failing, idempotency, or cleanup of associated resources. This is minimal and lacks important behavioral context for a mutation-like 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 concise sentence that directly states the tool's purpose without any fluff or redundancy. Every word contributes to the meaning, making it highly efficient.

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 close operation with one parameter and no output schema, the description is adequate but misses key contextual details. It does not specify when to close, what happens if the session does not exist, or the post-conditions of closure. Given the lack of annotations, a slightly richer description would be more complete.

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

Parameters3/5

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

The input schema has 100% coverage, providing a clear description for session_id as 'The session ID returned by ssh_shell_open.' The tool description does not add further parameter meaning, but since the schema already fully documents the parameter, the baseline of 3 is appropriate.

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: 'Close an SSH shell session and release the connection.' It uses a specific verb ('close') and resource ('SSH shell session'), and the 'SSH' qualifier distinguishes it from sibling close tools for serial, power, and adb shells.

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. It does not mention that it should be used after an SSH session is no longer needed, nor does it contrast with other close tools. The usage context is only implied by the 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.

ssh_shell_connectionA

Check active SSH connections on the remote board. Shows which client IPs are connected to the SSH service (port 22).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesThe session ID returned by ssh_shell_open

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided. The description indicates it is a read-only operation (check, shows), but does not disclose whether it queries live state or cached data, or any permissions needed. Basic transparency is adequate for a simple check 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 sentences, front-loaded with the verb, no unnecessary words. Efficiently conveys the tool's function.

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 (one parameter, no output schema), the description is fairly complete: it explains purpose and what it shows. However, it could mention the expected output format (e.g., list of IPs) for full completeness.

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 single parameter `session_id` is fully described in the schema as 'The session ID returned by ssh_shell_open'. The description does not add additional meaning beyond that, so baseline 3 is appropriate.

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 'Check' and the resource 'active SSH connections on the remote board', and specifies it shows client IPs connected to port 22. This distinguishes it from sibling tools like ssh_shell_open or ssh_shell_exec.

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 on when to use this tool versus alternatives. While the purpose is clear, there is no mention of exclusions or comparison to similar tools like network_scan_tool.

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

ssh_shell_execA

Send a command to an SSH shell session and wait for the output. Combines write + delay + read in one call. IMPORTANT: Do NOT issue concurrent commands to the same session_id — the SSH shell is a single channel; concurrent calls will interleave output and corrupt results. Always wait for the previous command to finish before sending the next one. If you need parallel execution, open multiple sessions via ssh_shell_open.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
delayNoMinimum polling duration in milliseconds (default: 1000), kept for backward compat
commandYesThe command to send to the shell
session_idYesThe session ID returned by ssh_shell_open
maxDurationNoExecution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output.

TDQS

A4.2/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 behavioral burden. It discloses the synchronous wait-for-output behavior and the single-channel concurrency hazard, which is valuable. However, it does not mention potential side effects of executing arbitrary commands, permission requirements, or what happens when a command times out or continues running in the background.

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 three sentences, front-loaded with the core action, and every sentence earns its place. The concurrency warning is essential and the alternative for parallel execution is compactly stated without redundancy.

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 command-execution tool with 5 parameters and no output schema, the description covers the essential operational behavior, concurrency constraints, and a clear parallel alternative. The main gap is the lack of explicit return-value semantics, but the detailed parameter schema compensates for most technical details.

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 baseline is 3. The phrase 'Combines write + delay + read' adds slight framing for the delay/read components, but the description does not add per-parameter meaning beyond what the input schema already documents.

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+resource construction ('Send a command to an SSH shell session and wait for the output') and explicitly frames the tool as combining write + delay + read. This clearly distinguishes it from lower-level siblings like ssh_shell_write and ssh_shell_read.

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

Usage Guidelines5/5

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

It provides explicit when/how guidance: do not issue concurrent commands to the same session_id, always wait for previous command completion, and open multiple sessions via ssh_shell_open for parallel execution. This gives the agent actionable alternatives and timing constraints.

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

ssh_shell_loginA

One-click SSH login: connect, detect PSH state, auto-unlock if locked, and return a ready session. Combines open + PSH detect + unlock into a single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoUnlock key/password. If not provided, uses the configured KeyProvider (file IPC or terminal prompt)
deviceNoDevice name (optional, defaults to the active device)
timeoutNoUnlock step delay in milliseconds (default: 1500)

TDQS

A4.2/5.0
Behavior4/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 key behaviors: auto-detection of PSH state and auto-unlock if locked. However, it does not cover what happens on failure (e.g., unlock fails) or the exact return format, leaving some gaps in transparency.

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

Conciseness5/5

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

The description is extremely concise: two sentences that efficiently convey the tool's purpose and key behavior. No fluff, every sentence earns its place.

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 no output schema and no annotations, the description is fairly complete in explaining the compound operation. However, it lacks details on the return format ('ready session' is vague) and does not address error cases or prerequisites like needing an established connection, which would enhance completeness.

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% (all parameters have descriptions). The description does not add meaning beyond what the schema already provides for key, device, and timeout. Baseline score of 3 is appropriate as the description adds no extra semantic value.

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

Purpose5/5

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

The description clearly states the tool performs a compound operation: 'One-click SSH login: connect, detect PSH state, auto-unlock if locked, and return a ready session.' It specifies the verb (login) and the resource (SSH session), and distinguishes itself from sibling tools like ssh_shell_open and ssh_build by explicitly combining multiple steps.

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 that this tool is for quickly obtaining a ready SSH session without manual steps, but it does not explicitly state when to avoid using it or mention alternatives. It lacks explicit when-not or exclusion guidance, making it slightly less clear for precise decision-making.

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

ssh_shell_openA

Open an interactive SSH shell session to the board. Returns the initial banner output.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice name (optional, defaults to the active device)
timeoutNoConnection timeout in seconds (default: 10)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full transparency burden. It discloses that the session is interactive and returns the banner, but it omits important behavioral traits such as the session remaining open until closed via ssh_shell_close, potential authentication requirements, or side effects. This is minimal but not misleading.

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 short sentences, front-loaded with the primary action. Every word contributes meaning, and there is no redundant filler.

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 tool of this simplicity, the description is adequate: it names the action and the return value. However, it does not mention the session lifecycle (e.g., that the shell must be closed later), which could be inferred from sibling tools but is not stated. Lacks a bit of context but is generally complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters (device and timeout). The description adds no additional semantic meaning beyond what is in the schema, so the baseline score of 3 is appropriate.

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 (open), the target (interactive SSH shell session to the board), and the immediate result (returns the initial banner output). It distinguishes from sibling tools like ssh_shell_write, ssh_shell_read, and ssh_shell_exec by focusing on session opening.

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 does not mention that ssh_shell_exec or ssh_shell_write might be better for non-interactive commands, nor does it specify prerequisites or contexts where this tool should be avoided.

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

ssh_shell_readA

Read output from an SSH shell session. Do NOT call this concurrently with ssh_shell_exec/ssh_shell_write on the same session_id — concurrent access to the same SSH shell corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer after reading, 0 = keep buffer
session_idYesThe session ID returned by ssh_shell_open

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full transparency burden. It discloses a critical behavioral trait: concurrent access corrupts the output buffer. However, it does not describe the output format, blocking/non-blocking behavior, or how reading affects the session beyond the clear flag documented in the schema.

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 efficient sentences: the first identifies what the tool does, and the second warns about a critical concurrency issue. There is no filler or unnecessary repetition.

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 read tool with no output schema and no annotations, the description is minimally viable: it gives the purpose and a key warning. It still leaves gaps around return value structure, buffer read behavior, and how to properly sequence reads after exec/write calls.

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

Parameters3/5

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

The schema already provides complete descriptions for both session_id and clear, so parameter coverage is 100%. The description's mention of session_id in the concurrency warning adds no extra semantic value beyond what the schema already states.

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

Purpose5/5

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

The description clearly states the tool's function with a specific verb and resource: 'Read output from an SSH shell session.' This distinguishes it from related siblings like ssh_shell_exec and ssh_shell_write, which handle sending input.

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 concrete when-not condition: do not call concurrently with ssh_shell_exec/ssh_shell_write on the same session_id because it corrupts the output buffer. It lacks explicit guidance on when to prefer this tool over other read-like alternatives, but the purpose and exclusion are clear.

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

ssh_shell_send_ctrlA

Send a control character (Ctrl+C/U/D/Z) to an SSH shell session without appending a newline.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesControl character: c=Ctrl+C(SIGINT), u=Ctrl+U(clear line), d=Ctrl+D(EOF), z=Ctrl+Z(suspend)
session_idYesThe session ID returned by ssh_shell_open

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the 'without appending a newline' behavior and lists the keys, but does not explain the effects of each control character (e.g., SIGINT, EOF) or any session state requirements. The schema does add these details, but the description itself could be more forthcoming.

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, well-structured sentence. It front-loads the verb, specifies the key characters, and adds a crucial qualifier. No unnecessary words or repetition.

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 tool with two parameters and no output schema, the description is adequate. It explains what to send, to which session, and notes the newline behavior. Slight gaps include explicit session-open prerequisites, but these are implied by the session_id parameter 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 coverage is 100% with thorough descriptions for both parameters. The description adds minimal value beyond the schema, only reinforcing the key values via 'Ctrl+C/U/D/Z' and the no-newline behavior. This meets the baseline for high schema coverage.

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

Purpose5/5

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

The description clearly states the tool's action ('Send a control character'), the target (SSH shell session), and the specific characters (Ctrl+C/U/D/Z). It distinguishes itself from siblings like ssh_shell_write by noting it does not append a newline.

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 usage context is implied: use for sending control characters to an SSH session, not for arbitrary text. However, it does not explicitly mention alternatives or when not to use it, leaving room for clearer guidance.

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

ssh_shell_writeA

Send a command to an SSH shell session. Do NOT call this concurrently with ssh_shell_exec/ssh_shell_read on the same session_id — concurrent access to the same SSH shell corrupts the output buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoBuffer clear flag: 1 (default) = clear buffer before collecting, 0 = append to buffer
commandYesThe command to send to the shell
session_idYesThe session ID returned by ssh_shell_open

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description takes on full responsibility for disclosing behavioral traits. It reveals a critical concurrency hazard (output buffer corruption) and hints at buffering behavior, which is more than minimal. It does not detail return values or idempotency, but the disclosed risk is substantial.

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 exceptionally concise: two sentences, no wasted words. The purpose is front-loaded, and the safety warning is delivered efficiently. Every element serves a functional purpose.

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 write tool with no output schema, the description covers its purpose and a key operational risk. It doesn't specify return behavior or the typical write-read flow with ssh_shell_read, but the schema handles parameter context, and the warning adds missing operational insight, making it fairly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the structured data (e.g., 'clear' flag, 'command', 'session_id'). The tool description adds no extra parameter-specific meaning beyond what the schema already provides, meeting the baseline without exceeding 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 'Send a command to an SSH shell session' with a specific verb and resource. The concurrency warning referencing ssh_shell_exec/ssh_shell_read helps distinguish this tool from related siblings by implying its role in the write operation.

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 explicit usage constraints by warning against concurrency with ssh_shell_exec/ssh_shell_read on the same session, which names alternatives and gives a clear when-not-to-use context. However, it stops short of fully contrasting with all sibling tools or specifying ideal scenarios.

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

subnet_check_toolA

Analyze subnet information for a target IP address. Retrieves host IP, subnet mask, and gateway, calculates subnet range (network address, broadcast address, usable host range, CIDR), and determines whether the target IP falls within the same subnet as the host.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_ipYesThe target IP address to check (e.g., 192.168.16.1)

TDQS

A4/5.0
Behavior4/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 transparently discloses the tool's behavior: it retrieves host IP, subnet mask, and gateway, calculates the subnet range, and determines if the target IP is in the subnet. This is sufficient for a read-only analysis tool, though it does not mention error handling or limitations.

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 the first stating the main purpose and the second listing the specific computations and output. Every word contributes value, no redundant phrases, and it is appropriately sized for a single-purpose tool.

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?

With only one parameter and no output schema, the description provides a comprehensive list of what the tool calculates and returns, including network address, broadcast address, usable host range, CIDR, and the same-subnet determination. This is enough for an agent to understand what to expect, though the exact output format is not specified.

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 fully documents the single parameter target_ip with a description and example, so the description doesn't need to add much. The description's mention of 'target IP' adds no extra meaning beyond the schema's definition, and with 100% schema coverage the baseline is 3.

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

Purpose5/5

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

The description uses the specific verb 'Analyze' with the resource 'subnet information for a target IP address' and clearly lists the distinct calculations and outputs (network address, broadcast address, usable host range, CIDR) and the final comparison result. This distinguishes it from sibling tools like network_scan_tool and port_scan_tool, which are more about scanning than single-IP subnet analysis.

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

Usage Guidelines3/5

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

The description implies the tool is for checking if a target IP is in the same subnet as the host, but it does not explicitly state when to use it versus alternatives like network_scan_tool, nor does it mention any exclusions or prerequisites. The usage context is clear but not explicitly contrasted with other tools.

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

version_toolA

Get the MCP server version and toolkit information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided, but the description indicates a safe read-only operation. It does not disclose any potential side effects or authentication needs, though none are likely for a version 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?

Single sentence that is front-loaded and contains no extraneous information. Every word adds value.

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 no parameters, no output schema, and a simple purpose, the description is nearly complete. It could optionally mention the return format, but this is not critical.

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?

No parameters exist, so the description bears no parameter burden. The schema coverage is 100% (0 params), warranting a baseline of 4.

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 it retrieves the MCP server version and toolkit information. It distinguishes itself from sibling tools that focus on device/shell/network operations.

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 use when version/toolkit info is needed. No explicit when-not or alternatives provided, but for a simple query tool this is adequate.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev1.4.0
    • Removednotify_demo_tool
  2. 2 tool updatesv1.3.1
    • Changedserial_download2 fields changed
      • changedInput schema / properties / remote_path / description
        Previous value: -"Remote source file path on the device"New value: +"Remote source file path on the device. Resolved relative to the shell's current working directory — prefer an absolute path, or pin the directory via send_cmd (e.g. \"cd /home && sz {remote}\"). The file must exist and be readable; otherwise sz errors out and the transfer fails."
      • changedInput schema / properties / send_cmd / description
        Previous value: -"Device send command template (default: 'sz {remote}'). {remote} is replaced by remote_path"New value: +"Device send command template (default: 'sz {remote}'). {remote} is replaced by remote_path. The tool runs this command itself on the device — do NOT start sz manually beforehand. Use it for directory changes, e.g. \"cd /home && sz {remote}\""
    • Changedserial_upload2 fields changed
      • changedInput schema / properties / recv_cmd / description
        Previous value: -"Device receive command (default: 'rz'). e.g. 'rz -e' to escape control chars"New value: +"Device receive command (default: 'rz'). The tool runs this command itself on the device after disabling flow control — do NOT start rz manually beforehand. Use it for directory changes or options, e.g. \"cd /home && rz -e\" to receive into /home, or 'rz -e' to escape control chars"
      • removedInput schema / properties / remote_dir
        Removed value: -{
        -  "description": "Remote directory hint (the rz command writes to its current dir by default; cd before rz if needed)",
        -  "type": "string"
        -}
  3. 4 tool updatesv1.3.0
    • Changedadb_shell_exec1 field changed
      • changedInput schema / properties / maxDuration / description
        Previous value: -"Override execution duration in ms. Default varies by command type: resident commands (ping/logcat/top/...) 10000 (sampling, Ctrl+C sent on timeout), normal commands 300000 (5min fallback, no interrupt sent). Action on timeout still follows resident classification regardless of this value."New value: +"Execution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output."
    • Changedserial_exec1 field changed
      • changedInput schema / properties / maxDuration / description
        Previous value: -"Override execution duration in ms. Default varies by command type: resident commands (ping/logcat/top/...) 10000 (sampling, Ctrl+C sent on timeout), normal commands 300000 (5min fallback, no interrupt sent). Action on timeout still follows resident classification regardless of this value."New value: +"Execution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output."
    • Addedserial_uboot_state
    • Changedssh_shell_exec1 field changed
      • changedInput schema / properties / maxDuration / description
        Previous value: -"Override execution duration in ms. Default varies by command type: resident commands (ping/logcat/top/...) 10000 (sampling, Ctrl+C sent on timeout), normal commands 300000 (5min fallback, no interrupt sent). Action on timeout still follows resident classification regardless of this value."New value: +"Execution cap in ms — ALWAYS estimate and pass a timeout matching the command's expected runtime; do not omit it. Suggested ranges: instant info commands (ls/ip addr/cat/echo) 3000-5000; medium tasks (apt install, dd, service restart) 30000-120000; long builds/flashes (make, flash_image) up to 600000; streaming/resident commands (ping/logcat/top, or sampling a fixed window of live output) 10000 (Ctrl+C auto-sent to stop). If omitted, safety-valve defaults apply: resident commands 10000ms (sampling, Ctrl+C sent on timeout), other commands 300000ms (5min fallback, NO interrupt sent — the command may still be running, terminate via send_ctrl if needed). Timeout type is annotated in the returned output."
  4. 32 tool updatesv1.0.3
    • Addedadb_device_list
    • Addedadb_exec
    • Addedadb_shell_close
    • Addedadb_shell_exec
    • Addedadb_shell_open
    • Addedadb_shell_read
    • Addedadb_shell_send_ctrl
    • Addedadb_shell_write
    • Addedgreet_tool
    • Addedhost_info
    • Addednetwork_scan_tool
    • Addedport_scan_tool
    • Addedpower_shell_close
    • Addedpower_shell_exec
    • Addedpower_shell_open
    • Addedpower_shell_read
    • Addedserial_download
    • Addedserial_enter_uboot
    • Addedserial_exec
    • Addedserial_read
    • Addedserial_send_ctrl
    • Addedserial_shell_login
    • Addedserial_upload
    • Addedserial_write
    • Addedssh_sftp_upload
    • Addedssh_shell_close
    • Addedssh_shell_exec
    • Addedssh_shell_open
    • Addedssh_shell_read
    • Addedssh_shell_send_ctrl
    • Addedssh_shell_write
    • Addedsubnet_check_tool
  5. 15 tool updatesv1.0.1
    • Removedadb_device_list
    • Removedadb_exec
    • Removedgreet_tool
    • Removednetwork_scan_tool
    • Removedpower_shell_close
    • Removedpower_shell_exec
    • Removedpower_shell_open
    • Removedpower_shell_read
    • Removedserial_exec
    • Removedserial_read
    • Removedserial_write
    • Removedssh_sftp_upload
    • Addedssh_shell_connection
    • Removedssh_shell_open
    • Removedsubnet_check_tool
  6. 14 tool updatesv1.0.1
    • Removedadb_shell_close
    • Removedadb_shell_exec
    • Removedadb_shell_open
    • Removedadb_shell_read
    • Removedadb_shell_write
    • Removedport_scan_tool
    • Removedserial_enter_uboot
    • Changedserial_exec2 fields changed
      • changedInput schema / properties / delay / description
        Previous value: -"Wait time in milliseconds before reading output (default: 1000)"New value: +"Minimum polling duration in milliseconds (default: 1000), kept for backward compat"
      • addedInput schema / properties / maxDuration
        Added value: +{
        +  "description": "Max execution time in ms before auto-interrupting with Ctrl+C (default: 10000)",
        +  "type": "number"
        +}
    • Removedserial_shell_login
    • Removedssh_shell_close
    • Removedssh_shell_connection
    • Removedssh_shell_exec
    • Removedssh_shell_read
    • Removedssh_shell_write
  7. 37 tool updatesv0.2.2
    • First observedadb_device_list
    • First observedadb_exec
    • First observedadb_shell_close
    • First observedadb_shell_exec
    • First observedadb_shell_open
    • First observedadb_shell_read
    • First observedadb_shell_write
    • First observeddevice_info_tool
    • First observedgreet_tool
    • First observednetwork_scan_tool
    • First observednotify_demo_tool
    • First observedport_scan_tool
    • First observedpower_shell_close
    • First observedpower_shell_exec
    • First observedpower_shell_open
    • First observedpower_shell_read
    • First observedpower_shell_write
    • First observedserial_close
    • First observedserial_enter_uboot
    • First observedserial_exec
    • First observedserial_open
    • First observedserial_read
    • First observedserial_shell_login
    • First observedserial_write
    • First observedsession_info
    • First observedssh_build
    • First observedssh_sftp_download
    • First observedssh_sftp_upload
    • First observedssh_shell_close
    • First observedssh_shell_connection
    • First observedssh_shell_exec
    • First observedssh_shell_login
    • First observedssh_shell_open
    • First observedssh_shell_read
    • First observedssh_shell_write
    • First observedsubnet_check_tool
    • First observedversion_tool

TDQS

A3.5/5.0
Disambiguation3/5

Tools are mostly grouped by transport (ssh/serial/adb/powershell), which helps, but there are overlapping entry points: ssh_shell_open vs ssh_shell_login, adb_exec vs adb_shell_exec, and session_info vs ssh_shell_connection could all cause misselection. The stray greet_tool is unrelated but not really confusable with anything else.

Naming Consistency3/5

The transport_shell_verb pattern (ssh_shell_open, serial_write, adb_shell_exec, power_shell_read) is fairly consistent within families, but the *_tool suffix on version_tool, port_scan_tool, network_scan_tool, greet_tool, device_info_tool, and subnet_check_tool breaks the pattern. Exceptions like ssh_build and ssh_sftp_upload add further inconsistency.

Tool Count2/5

44 tools is well over the typical well-scoped MCP server size. Much of the bulk comes from repeating the same open/write/read/exec lifecycle across four transports, plus tangential tools like greet_tool and notify_demo_tool that do not clearly belong in an embedded toolkit.

Completeness4/5

The core embedded debugging workflows are well covered: session open/close, write/read/exec, control characters, login handling, U-Boot entry, file transfer over SFTP and ZMODEM, adb device listing, and session/device info. Minor gaps like an explicit reboot/power-control tool are workable around, but no major dead ends are obvious.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A lightweight, zero-agent SSH operations tool that enables remote command execution, file transfer, and audit logging. It integrates as an MCP server for AI-driven infrastructure management.
    14
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A secure remote server management tool based on MCP protocol, supporting SSH connections, command execution, and SFTP file transfers.
    20
    16
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/smk-h/embedded-mcp-toolkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server